document.evaluate将无法使用内容脚本

时间:2011-12-01 10:27:47

标签: javascript google-chrome xpath google-chrome-extension document.evaluate

var allTags = document.evaluate("//*[contains(@src,'"+imgSrc+"')]", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

这是给出错误的代码,它给出了:

Uncaught Error: TYPE_ERR: DOM XPath Exception 52

有人能告诉我这是什么问题吗?

1 个答案:

答案 0 :(得分:1)

我没有准确的答案,但我可以猜测并给出解决方法。

首先解决方法:将UNORDERED_NODE_SNAPSHOT_TYPE更改为不创建快照的类型(除非您需要这样做)并返回多个节点,如UNORDERED_NODE_ITERATOR_TYPE(或ANY_TYPE

我的猜测:在阅读spec之后,它说这个函数'TYPE_ERR:如果结果无法转换为返回指定的类型,则引发。'。可能是它无法分配资源来创建快照或类似的东西(解决方法假设)。

编辑:

真正的问题很可能不是对document.evaluate的调用,而是在您的代码中调用allTags.iterateNext并且此调用期望allTags为* _NODE_ITERATOR_TYPE而不是* _NODE_SNAPSHOT_TYPE,使用allTags.snapshotItem不会导致抛出错误。我在jsfiddle写了一个样本,它在2秒后使用调用来改变边框,在你的问题中进行评估并以正确的方式迭代元素。