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 ответ
У меня нет точного ответа, но я могу угадать и дать обходной путь.
Сначала обойти: изменить UNORDERED_NODE_SNAPSHOT_TYPE
к типу, который не создает снимок (если вам это не нужно) и возвращает несколько узлов, например UNORDERED_NODE_ITERATOR_TYPE
(или же ANY_TYPE
).
И мое предположение: после прочтения спецификации он скажет для этой функции 'TYPE_ERR: повышается, если результат не может быть преобразован для возврата указанного типа.' Это может быть случай, когда он не может выделить ресурсы для создания моментального снимка или что-то вроде этого (обходной путь предполагает это).
Редактировать:
Реальная проблема, скорее всего, не в призыве document.evaluate
это в вашем коде вы делаете allTags.iterateNext
и этот звонок ожидает allTags
быть *_NODE_ITERATOR_TYPE, а не *_NODE_SNAPSHOT_TYPE, используя allTags.snapshotItem
не вызывать ошибку. Я написал пример в jsfiddle, он меняет границы через 2 секунды, используя вызов для оценки вашего вопроса и правильного перебора элементов.