Javascript 如何在Firefox扩展中将HTML字符串转换为DOM对象?
我正在下载一个带有XMLHttpRequest的网页(tag-soup HTML),我想将输出转换为DOM对象,然后在其上运行XPATH查询。如何将字符串转换为DOM对象 一般的解决方案似乎是创建一个隐藏的iframe,并将字符串的内容放入其中。已经有很多更新来支持text/html,但是从Firefox 3.0.1开始,如果您尝试,仍然会出现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技巧,从而使您的代码在任何当前打开
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和响应xmlreadyState==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仍在运行)。