您最好不要将您从远程服务器收到的 HTML 代码直接插入到您的特权文档中——这是一个安全漏洞。即使您控制服务器并且您绝对确定服务器永远不会被黑客入侵,数据也可能在途中被更改。通过使用 innerHTML,您可以运行与 HTML 代码一起发送的 JavaScript 代码,并且该 JavaScript 代码将以您的扩展程序的权限执行(这意味着它几乎可以做任何事情)。
您应该创建一个<iframe>
替代并确保您的文档和该框架之间存在安全边界(type="content" 这样做)。像这样的东西:
var myHTML = XHR.responseText;
var tempFrame = document.createElement("iframe");
tempFrame.setAttribute("type", "content");
tempFrame.setAttribute("src", "data:text/html;charset=utf-8," + encodeURIComponent());
document.documentElement.appendChild(tempFrame);
tempFrame.contentWindow.addEventListener("load", function()
{
tempFrame.contentDocument.documentElement;
tempFrame.contentDocument.getElementsByTagName('a');
...
tempFrame.parentNode.removeChild(tempFrame);
}, false);
如果您拥有格式良好的 XML,事情当然会更容易。然后解析它只是一个问题:
var doc = new DOMParser().parseFromString(XHR.responseText, "text/xml");
doc.documentElement;
doc.getElementsByTagName('a');
编辑:在我写完这篇文章后情况发生了变化——从 Firefox 10 开始,您也可以将DOMParser()
其用于格式不正确的 HTML 代码。因此,如果您只需要从一段 HTML 代码中提取一些数据,那么您不应该使用框架,而应该使用parseFromString(..., "text/html")
.