2013-06-02 33 views
3

我工作的Chrome扩展程序和独立的要素资源负载我有以下问题:如何防止在Chrome

var myDiv = document.createElement('div'); 
myDiv.innerHTML = '<img src="a.png">'; 

现在会发生什么事是,Chrome会加载“a.png”资源,即使我不附加“div”元素到文档。有没有办法阻止它?

_在扩展中,我需要从一个不提供任何API的站点获取数据,所以我必须解析整个HTML以获取必要的数据。编写我自己的简单HTML解析器可能会非常棘手,所以我宁愿使用本机HTML解析器。但是,在Chrome中,当我将整个源代码放到一些临时的非附加元素上时(这样它会被解析并且我可以过滤必要的数据),所以图像(以及其他可能的资源)也开始加载,导致更高流量或(在相对路径的情况下)控制台中出现很多错误。 _

回答

2

为防止资源被加载,您需要在全新的#document中创建您的节点。您可以使用document.implementation.createHTMLDocument

var dom = document.implementation.createHTMLDocument(); // make new #document 
// now use this to.. 
var myDiv = dom.createElement('div'); // ..create a <div> 
myDiv.innerHTML = '<img src="a.png">'; // ..parse HTML 
0

您可以通过将其存储在非标准的属性,然后将其分配给innerHTML的延迟解析/加载HTML,“到时候”:

myDiv.setAttribute('deferredHtml', '<img src="http://upload.wikimedia.org/wikipedia/commons/4/4e/Single_apple.png">'); 

global.loadDeferredImage = function() { 
    if(myDiv.hasAttribute('deferredHtml')) { 
     myDiv.innerHTML = myDiv.getAttribute('deferredHtml'); 
     myDiv.removeAttribute('deferredHtml'); 
    } 
}; 

... onclick="loadDeferredImage()" 

我创建的jsfiddle说明这个道理:

http://jsfiddle.net/akhikhl/CbCst/3/