浏览器为jQuery解析HTML而不加载资源

时间:2011-05-02 19:01:54

标签: jquery html xml parsing browser

是否可以通过JavaScript将HTML传递给浏览器并使用jQuery解析它,但不能加载外部资源? (脚本,图像,flash,任何东西)

如果这是我能做的最好的话,我将使用XML解析器,但如果可能的话,我想允许松散的HTML。

它必须与Chrome,Firefox,最新的IE兼容。

1 个答案:

答案 0 :(得分:1)

var html = someHTML; //passed in html, maybe $('textarea#id').val();? I don't understand what you mean by 'passed in html'
var container = document.createElement('div');
container.innerHTML = html;
$(container).find('img,embed,head,script,style').remove();
//or
$(container).find('[src]').remove();

var target = someTarget; //place to put parsed html
$(container).appendTo($(target));

修改

经过测试的工作

removeExt = function(cleanMe) {
    var toScrutinize = $(cleanMe).find('*'); //get ALL elements
    $.each(toScrutinize, function() {
      var attr = $(this)[0].attributes; //get all the attributes
      var that = $(this); 
      $.each(attr, function(){
          if ($(that).attr(this.nodeName).match(/^http/)) {//if the attribute value links externally
           $(that).remove(); //...take it out  
          } 
      })
    })
    $('script').remove(); //also take out any inline scripts
}

var html = someHTML;
var container = document.createElement('div');
container.innerHTML = html;
removeExt($(container));
var target = someTarget;
$(container).appendTo($(target));

这将匹配src,href,link,data-foo,等等......无法外部链接。 http和https都匹配。内联脚本被杀死。如果它仍然是一个安全问题,那么也许这应该在服务器端完成,或者混淆你的JS。