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.snapshotItem 그렇지 사용 allTags는 *의 _NODE_ITERATOR_TYPE 아니라 *의 _NODE_SNAPSHOT_TYPE 것으로 기대하는 오류가 발생할 수 있습니다. 내가 jsfiddle에 샘플을 썼다면, 질문을 평가하기위한 호출을 사용하여 2 초 후에 테두리를 변경하고 적절한 방법으로 요소를 반복합니다.

+0

원래 개체 속성에 액세스 할 수 있어야하므로 필요합니다. – Bogdacutu

+0

반환 된 노드의 전체 복사본 (https://developer.mozilla.org/En/DOM/Node.cloneNode)을 항상 수행하여 배열에 복사본을 저장할 수 있습니다. – Prusse

+0

원래 개체 속성을 변경할 수 있습니까? – Bogdacutu