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

我正在用XMLHttpRequest下载一个网页(标签汤HTML),我想要输出并将它变成一个DOM对象,然后我可以运行XPATH查询。如何将字符串转换为DOM对象?

看来,一般的解决方案是创建一个隐藏的iframe并将字符串的内容放入该内容中。已有谈话更新 DOMParser 支持text / html,但从Firefox 3.0.1开始,你仍然可以得到一个 NS_ERROR_NOT_IMPLEMENTED 如果你尝试。

除了使用隐藏的iframe技巧之外,还有其他选择吗?如果不是,做iframe技巧的最佳方法是什么,以便您的代码在任何当前打开的选项卡的上下文之外工作(以便关闭选项卡不会搞砸代码等)?

This is an example of why I'm looking for a solution other than the iframe hack, if I have to write all that code to have a robust solution, then I'd rather keep looking for something else.

0

5 答案

Ajaxian实际上有一个有关插入/检索html的帖子iframe 今天。你可以使用他们在那里发布的js代码片段。

至于处理关闭浏览器/选项卡,您可以附加到onbeforeunload( http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx )事件,并做任何你需要做的事情。

0
额外

试试这个:

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;
    }
}

注意 overrideMimeTyperesponseXML
readyState == 4 是'completed'。

0
额外
如果响应不是有效的XML,那么这不起作用。如果您告诉Firefox期望XML,它将严格分析它将要解析的内容。
额外 作者 thelsdj,

尝试创建一个div

document.createElement( 'div' );

然后将标记汤HTML设置为div的innerHTML。浏览器应该将其处理成XML,然后解析。

innerHTML属性接受一个字符串   它指定了一个有效的组合   文本和元素。当innerHTML   属性设置为给定的字符串   完全取代现有的   对象的内容。如果字符串   包含HTML标签,字符串是   在放置时进行解析和格式化   进入文档。
0
额外
这个问题是我需要整个HTML文档,<head>以及所有这些都会抛弃掉。此外,我试图不使用现有的窗口/选项卡,因为我的代码在它们的上下文之外运行,并且我想要阻止用户随机关闭窗口或选项卡,从而使我的代码中断(假设Firefox仍在运行)。
额外 作者 thelsdj,

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

0
额外
是的,我正在使用Firefox扩展,但大多数iframe示例在核心流程中使用任意浏览器窗口而不是对象来阻止浏览器/选项卡关闭。
额外 作者 thelsdj,

除了使用隐藏的iframe技巧外,还有其他选择吗?

不幸的是,不,现在。否则,您指向的microsummary代码将使用它。

如果不是,做iframe技巧的最好方法是什么,以便您的代码在任何当前打开的选项卡的上下文之外工作(以便关闭选项卡不会搞砸代码等)?

您引用的代码使用最近的浏览器窗口,因此关闭制表符不会影响解析。关闭浏览器窗口会中止你的负载,但你可以处理它(检测负载是否中止,并在另一个窗口中重新启动它),而且不会经常发生。

您需要一个DOM窗口才能正常工作,因此目前没有干净的解决方案(如果您热衷于使用mozilla解析器)。

0
额外