function mag_xss(html,vueParsObj){ var isArticlePage = false; var qikanUrl=''; var magDir=''; if(vueParsObj && vueParsObj.data && vueParsObj.data.magDir){ isArticlePage = true; qikanUrl = mag_currentQikanUrl(); magDir = vueParsObj.data.magDir; } var options = { whiteList:{ }, stripIgnoreTagBody:true, onTag:function(tag,html,options){ if(isArticlePage){ //文章rich json中的img if(tag=='img'){ var className = mag_vue_getAttrValue(tag,'class',html); if(className && className.match(/(^| )mag_rich_graphic( |$)/g)){ var src = mag_vue_getAttrValue(tag,'src',html); if(src && src.trim()!='' && !src.trim().startsWith('http://') && !src.trim().startsWith('https://')){ var newSrc = qikanUrl+'/'+magDir+"/"+src; html = html.replace(src,newSrc); } } } //文章整合页面rich video处理 if(tag=='video'){ var className = mag_vue_getAttrValue(tag,'class',html); if(className && className.match(/(^| )mag_shipin( |$)/g)){ var src = mag_vue_getAttrValue(tag,'src',html); if(src && src.trim()!='' && !src.trim().startsWith('http://') && !src.trim().startsWith('https://')){ var newSrc = qikanUrl+'/'+magDir+"/"+src; html = html.replace(src,newSrc); } var poster = mag_vue_getAttrValue(tag,'poster',html); if(poster && poster.trim()!='' && !poster.trim().startsWith('http://') && !poster.trim().startsWith('https://')){ var newPoster = qikanUrl+'/'+magDir+"/"+poster; html = html.replace(poster,newPoster); } } } //文章整合页面的a.mag_body_media_a if(tag=='a'){ var className = mag_vue_getAttrValue(tag,'class',html); if(className && className.match(/(^| )mag_body_media_a( |$)/g)){ var href = mag_vue_getAttrValue(tag,'href',html); if(href && href.trim()!='' && !href.trim().startsWith('http://') && !href.trim().startsWith('https://')){ var newHref = qikanUrl+'/'+magDir+"/"+href; html = html.replace(href,newHref); } } } } var whiteList1 = {}; if(tag.toLowerCase()=='script' || tag.toLowerCase()=='svg'){ return; }else{ eval('whiteList1 = {\''+tag.replace("'","\\'")+'\':[]}'); } var options1 = { whiteList:whiteList1, onTag:function(tag1,html1,options1){ // }, onTagAttr:function(tag, name, value, isWhiteAttr) { if(tag.toLowerCase()=='iframe'){ if(name.toLowerCase()=='src' && value && (!value.trim().toLowerCase().startsWith('http://') && !value.trim().toLowerCase().startsWith('https://'))){ //去掉 return ''; } } if(tag.toLowerCase()=='a'){ if(name.toLowerCase()=='href' && value && (!value.trim().toLowerCase().startsWith('http://') && !value.trim().toLowerCase().startsWith('https://'))){ //去掉 return 'href="javascript:;"'; } } if(tag.toLowerCase()=='img'){ if(name.toLowerCase()=='src' && value && (!value.trim().toLowerCase().startsWith('http://') && !value.trim().toLowerCase().startsWith('https://'))){ //去掉 return ''; } } if(name && name.toLowerCase().startsWith('on')){ //去掉 return ''; }else{ //保留 return name+'="'+value.replace("\"",""").replace("'", "'")+'"'; } } } return filterXSS(html,options1); } }; var ht = filterXSS(html,options); return ht; } function mag_vue_getAttrValue(tagName,attrName,tagHtml){ var attrValue=null; var whiteList = {}; eval('whiteList = {\''+tagName.replace("'","\\'")+'\':[]}'); var options = { whiteList:whiteList, onTag:function(tag,html){ // }, onTagAttr:function(tag, name, value){ if(name==attrName){ attrValue = value; } } }; filterXSS(tagHtml,options); return attrValue; }