26

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

似乎一般的解决方案是创建一个隐藏的 iframe 并将字符串的内容放入其中。一直在谈论更新DOMParser以支持 text/html,但从 Firefox 3.0.1 开始,NS_ERROR_NOT_IMPLEMENTED如果你尝试,你仍然会得到一个。

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

是我为什么要寻找 iframe hack 以外的解决方案的一个示例,如果我必须编写所有代码才能获得强大的解决方案,那么我宁愿继续寻找其他东西。

4

5 回答 5

10

Ajaxian 实际上今天有一篇关于从 iframe 插入/检索 html的帖子。您可能可以使用他们在那里发布的 js 片段。

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

于 2008-08-06T20:37:32.260 回答
6

试试这个:

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“完成”。

于 2008-08-06T19:13:13.930 回答
2

尝试创建一个 div

document.createElement( 'div' );

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

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

于 2008-08-06T19:59:50.997 回答
1

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

于 2008-08-06T20:22:10.543 回答
1

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

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

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

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

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

于 2008-08-12T18:56:54.637 回答