如何将一串HTML转换为Firefox扩展中的DOM对象?

id_aut 发布于 2018-03-01 dom 最后更新 2018-03-01 01:01 634 浏览

我正在用XMLHttpRequest下载一个网页(标签汤HTML),我想要输出并将它变成一个DOM对象,然后我可以运行XPATH查询。如何将字符串转换为DOM对象? 看来,一般的解决方案是创建一个隐藏的iframe并将字符串的内容放入该内容中。已经有talk更新DOMParser以支持text/html,但从Firefox 3.0.1开始,如果尝试,仍然会得到NS_ERROR_NOT_IMPLEMENTED。 除了使用隐藏的iframe技巧之外,还有其他选择吗?如果不是,做iframe技巧的最佳方法是什么,以便您的代码在任何当前打开的选项卡的上下文之外工作(以便关闭选项卡不会搞砸代码等)? This是为什么我寻找除iframe hack之外的解决方案的一个例子,如果我必须编写 all 该代码以获得强大的解决方案,那么我宁愿继续寻找别的东西。

已邀请:

jenim

赞同来自:

尝试这个:

var request = new XMLHttpRequest();
request.overrideMimeType( 'text/xml' );
request.onreadystatechange = process;
request.open ( 'GET', url );
request.send( null );
function process() { 
    if ( request.readyState == 4 && request.status == 200 ) {
        var xml = request.responseXML;
    }
}
注意 overrideMimeType responseXML
readyState == 4已'完成'。

jenim

赞同来自:

尝试创建一个div

document.createElement( 'div' );
然后将标记汤HTML设置为div的innerHTML。浏览器应该将其处理成XML,然后解析。
The innerHTML property takes a string that specifies a valid combination of text and elements. When the innerHTML property is set, the given string completely replaces the existing content of the object. If the string contains HTML tags, the string is parsed and formatted as it is placed into the document.

jenim

赞同来自:

所以你想用javascript来下载一个网页作为XML对象,但是你不想使用网页?由于您无法控制用户将执行的操作(关闭标签页或窗口或其他内容),因此您需要像OSX Dashboard小部件或某个单独的应用程序那样执行此操作。 Firefox扩展也可以工作,除非你必须担心用户关闭浏览器。

set

赞同来自:

Ajaxian今天实际上有一个post on inserting/retrieving html from an iframe。你可以使用他们在那里发布的js代码片段。 至于处理关闭浏览器/选项卡,您可以附加onbeforeunload(http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx)事件并执行您需要执行的任何操作。

nquae

赞同来自:

Is there any option besides using the hidden iframe trick?
不幸的是,不,现在。否则,您指向的microsummary代码将使用它。
And if not, what is the best way to do the iframe trick so that your code works outside the context of any currently open tabs (so that closing tabs won't screw up code, etc)?
您引用的代码使用最近的浏览器窗口,因此关闭制表符不会影响解析。关闭浏览器窗口会中止你的负载,但你可以处理它(检测负载是否中止,并在另一个窗口中重新启动它),并且它不会经常发生。 您需要一个DOM窗口才能正常工作,因此目前没有干净的解决方案(如果您想使用mozilla解析器)。