如何在Firefox扩展中将HTML字符串转换为DOM对象?

时间:2008-08-06 19:08:19

标签: javascript firefox dom

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

似乎一般的解决方案是创建一个隐藏的iframe并将字符串的内容抛入其中。已经talk更新DOMParser来支持text / html但是从Firefox 3.0.1开始,如果你尝试的话,你仍会获得NS_ERROR_NOT_IMPLEMENTED

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

This是一个例子,说明为什么我要寻找iframe黑客以外的解决方案,如果我必须编写所有代码以获得强大的解决方案,那么我' d而是继续寻找其他东西。

5 个答案:

答案 0 :(得分:7)

Ajaxian今天实际上有一个post on inserting / retrieving html from an iframe。您可以使用他们在那里发布的js片段。

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

答案 1 :(得分:4)

试试这个:

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已完成'。

答案 2 :(得分:1)

尝试创建div

document.createElement( 'div' );

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

  

innerHTML属性采用字符串   指定有效的组合   文字和元素。当innerHTML   属性设置,给定的字符串   完全取代现有的   对象的内容。如果是字符串   包含HTML标记,字符串是   在放置时进行解析和格式化   进入文件。

答案 3 :(得分:1)

所以你想使用javascript将网页下载为XML对象,但是你不想使用网页?由于您无法控制用户将执行的操作(关闭选项卡或窗口或诸如此类),因此您需要在OSX Dashboard小部件或某个单独的应用程序中执行此操作。除非您不得不担心用户关闭浏览器,否则Firefox扩展程序也可以使用。

答案 4 :(得分:1)

  

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

不幸的是,不,不是现在。否则,您指向的微观代码将改为使用它。

  

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

您引用的代码使用最近的浏览器窗口,因此关闭选项卡不会影响解析。关闭该浏览器窗口将中止您的负载,但您可以处理它(检测到负载被中止并在另一个窗口中重新启动它),并且它不会经常发生。

你需要一个DOM窗口让iframe正常工作,所以目前还没有干净的解决方案(如果你热衷于使用mozilla解析器)。