我正在使用XMLHttpRequest下载一个网页(标签汤HTML),我想获取输出并将其转换为DOM对象,然后我可以运行XPATH查询。如何从字符串转换为DOM对象?
似乎一般的解决方案是创建一个隐藏的iframe并将字符串的内容抛入其中。已经talk更新DOMParser来支持text / html但是从Firefox 3.0.1开始,如果你尝试的话,你仍会获得NS_ERROR_NOT_IMPLEMENTED
。
除了使用隐藏的iframe技巧之外还有其他选择吗?如果没有,那么做iframe技巧的最佳方法是什么,以便你的代码在任何当前打开的选项卡的上下文之外工作(这样关闭选项卡不会搞砸代码等)?
This是一个例子,说明为什么我要寻找iframe黑客以外的解决方案,如果我必须编写所有代码以获得强大的解决方案,那么我' d而是继续寻找其他东西。
答案 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解析器)。