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

相關問題