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

Javascript 如何在Firefox扩展中将HTML字符串转换为DOM对象?,javascript,firefox,dom,Javascript,Firefox,Dom,我正在下载一个带有XMLHttpRequest的网页(tag-soup HTML),我想将输出转换为DOM对象,然后在其上运行XPATH查询。如何将字符串转换为DOM对象 一般的解决方案似乎是创建一个隐藏的iframe,并将字符串的内容放入其中。已经有很多更新来支持text/html,但是从Firefox 3.0.1开始,如果您尝试,仍然会出现NS\u错误\u未实现 除了使用隐藏的iframe技巧,还有其他选择吗?如果没有,那么最好的方法是什么来执行iframe技巧,从而使您的代码在任何当前打开

我正在下载一个带有XMLHttpRequest的网页(tag-soup HTML),我想将输出转换为DOM对象,然后在其上运行XPATH查询。如何将字符串转换为DOM对象

一般的解决方案似乎是创建一个隐藏的iframe,并将字符串的内容放入其中。已经有很多更新来支持text/html,但是从Firefox 3.0.1开始,如果您尝试,仍然会出现
NS\u错误\u未实现

除了使用隐藏的iframe技巧,还有其他选择吗?如果没有,那么最好的方法是什么来执行iframe技巧,从而使您的代码在任何当前打开的选项卡的上下文之外工作(这样关闭的选项卡不会使代码出错,等等)


这是一个例子,说明了我为什么要寻找iframe之外的解决方案,如果我必须编写所有代码来获得一个健壮的解决方案,那么我宁愿继续寻找其他解决方案。

试试这个:

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;
    }
}
注意覆盖emimetype响应xml
readyState==4已“完成”。

尝试创建一个div

document.createElement( 'div' );
然后将标记souphtml设置为div的innerHTML。浏览器应将其处理为XML,然后您可以对其进行解析

innerHTML属性接受一个字符串 指定以下项的有效组合的 文本和元素。当innerHTML 属性,则指定字符串 完全取代现有的 对象的内容。如果字符串 包含HTML标记,字符串为 在放置时对其进行分析和格式化 输入到文档中


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

Ajaxian今天确实有一个新的浏览器。您可能可以使用他们在那里发布的js代码段

至于处理浏览器/选项卡的关闭,您可以附加到onbeforeunload()事件并执行任何需要执行的操作

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

不幸的是,现在不行。否则,您指向的微摘要代码将使用它

如果没有,那么最好的方法是什么来执行iframe技巧,从而使您的代码在任何当前打开的选项卡的上下文之外工作(以便关闭的选项卡不会破坏代码,等等)

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


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

如果响应一开始不是有效的XML,这就不起作用。如果您告诉Firefox使用XML,它将严格限制解析内容。是的,我使用的是Firefox扩展,但大多数iframe示例在核心过程中使用任意浏览器窗口而不是对象,以抵抗浏览器/选项卡关闭。问题是我需要整个HTML文档,所有这些都会被扔掉。此外,我还尝试不使用现有的窗口/选项卡,因为我的代码在它们的上下文之外运行,我希望能够抵抗用户随机关闭窗口或选项卡导致代码中断(假设Firefox仍在运行)。