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

Translate

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

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

除了使用隐藏的iframe技巧外,还有其他选择吗?如果不是,那么执行iframe技巧的最佳方法是什么,以使您的代码在任何当前打开的标签页之外的环境下工作(以便关闭的标签页不会弄乱代码等)?

这个就是为什么我要寻找除iframe hack以外的其他解决方案的示例(如果我必须编写)所有该代码具有可靠的解决方案,那么我宁愿继续寻找其他东西。

This question and all comments follow the "Attribution Required."

所有的回答

Translate

阿积贤实际上有一个从iframe插入/检索html的帖子今天。您可能可以使用他们在此处发布的js代码段。

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

来源
Translate

尝试这个:

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

来源
Translate

尝试创建一个div

document.createElement( 'div' );

然后将标记汤HTML设置为div的innerHTML。浏览器应将其处理为XML,然后可以对其进行解析。

innerHTML属性采用一个字符串,该字符串指定文本和元素的有效组合。设置innerHTML属性后,给定的字符串将完全替换对象的现有内容。如果该字符串包含HTML标记,则在将其放入文档时将对其进行解析和格式化。

来源
Translate

因此,您想使用javascript将网页下载为XML对象,但又不想使用网页?由于您无法控制用户的操作(关闭选项卡或窗口或其他操作),因此需要像OSX Dashboard小部件或某些单独的应用程序那样进行操作。 Firefox扩展也可以使用,除非您不必担心用户关闭浏览器。

来源
Translate

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

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

如果不是,那么执行iframe技巧的最佳方法是什么,以使您的代码在任何当前打开的选项卡的上下文之外运行(以便关闭的选项卡不会弄乱代码,等等)?

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

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

来源