从Android扩展解析Firefox的XMLHttpRequest响应
问题描述:
我在将某些代码迁移到适用于Android扩展的Firefox时出现问题。我需要从请求中提取一些信息,例如this fiddle,但是在移动设备中(为了从WebPage中重现相似的特性,我将响应放在var中,因为它们的起源策略相同)。从Android扩展解析Firefox的XMLHttpRequest响应
我知道代码工作正常,因为小提琴的作品。但是,当迁移到Android版Firefox时,它不起作用。
var parser = Cc["@mozilla.org/xmlextras/domparser;1"].createInstance(Ci.nsIDOMParser);
//ERROR IN NEXT STEP (DOESN'T THROW ANY MESSAGE - CONTROL FLOW JUST DISSAPPEARS)
var parsedXml = parser.parseFromString(response, "text/xml");
var xpathExpression = "//td[contains(.,'Raw text')]/../td[2]/pre";
var res = document.evaluate(xpathExpression, parsedXml, null, window.XPathResult.STRING_TYPE , null);
我调试了扩展,但没有错误消息,既没有例外。所以我在第一行(var parser = ...)中放置了一个断点,我可以看到正在创建的解析器,但是在下一步中,流控制消失了,并且以下所有代码都不会被执行。一切都在try-catch语句中,所以没有理由消失。
我真的不明白发生了什么事。你可以帮我吗?
adb logcat说:JavaScript错误:“WrongDocumentError:节点不能用于创建它的文档以外的文档”{file:“resource://gre/modules/addons/XPIProvider.jsm
答
解决方法是用parsedXml替换文档:
var res = parsedXml.evaluate(xpathExpression, parsedXml, null, window.XPathResult.STRING_TYPE , null);