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 секунды, используя вызов для оценки вашего вопроса и правильного перебора элементов.

Другие вопросы по тегам