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

这是给错误代码的工作,它给:document.evaluate不会从内容脚本

Uncaught Error: TYPE_ERR: DOM XPath Exception 52 

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

+0

'imgSrc'的值是什么? – Prusse

+0

这是一条路。出于测试目的,我们假设它是'http:// localhost/logo.png'。我最终为此使用了jQuery,但我仍然希望得到这个答案,因为jQuery不是很轻量级的。 – Bogdacutu

回答

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秒后更改边界,使用调用来评估您的问题并以正确的方式遍历元素。

+0

嗯,我需要它,因为我需要能够访问原始对象属性。 – Bogdacutu

+0

您始终可以对返回的节点执行深层复制(https://developer.mozilla.org/En/DOM/Node.cloneNode)并将副本存储在数组中。 – Prusse

+0

这是否允许我更改原始对象属性? – Bogdacutu