2010-07-28 2 views
1

Firefox 확장 프로그램에서 이것을 사용하고 있으며 작동하지 않습니다.왜 document.evaluate가 작동하지 않습니까?

var allLinks = document.evaluate(
         '//a[@href]', 
         window.document, 
         null, 
         XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, 
         null); 
window.alert(allLinks); 

이 경고는 [object XPathResult]입니다. 그러나 다음은 항상 0을 반환합니다. (그리고 페이지에는 확실히 링크가 있습니다.)

window.alert(allLinks.snapshotLength); 
+0

아마도'someXMLDoc.evaluate()'를 시도 할 수도 있습니다. – jerone

답변

0

이것은 효과가 있습니다.

 var allLinks = top.document.getElementById("content").selectedBrowser.contentDocument.evaluate(
          treeView.model[0].xpath, 
          top.document.getElementById("content").selectedBrowser.contentDocument, 
          null, 
          XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, 
          null); 
+0

아마도 '문서'에서 검색하려고했던 웹 페이지가 아닌 브라우저 자체의 문서 (즉, 기본 Firefox 창 'browser.xul')를 검색하고있었습니다. – MatrixFrog

+0

그런데'top.document.getElementById ('content')'대신'gBrowser'를 사용할 수 있습니다. – MatrixFrog

1

파이어 폭스와 관련된 부분이고 새 버전 만 사용한다고 가정 할 경우 .. querySelectorAll을 사용할 수 없습니까?

document.querySelectorAll('a[href]') 

또한 DOM이 완전히로드되면 어떻게됩니까? 그것을 DOMContentLoaded 또는 무엇인가에 묶어 라.

document.addEventListener('DOMContentLoaded', fn, false); 

편집 : 귀하의 XPath는 나를 작동합니다. 기존의로드 된 페이지의 콘솔에서 실행 했습니까? 아무것도 존재하기 전에 쿼리하고 있는지 확인하십시오.

0

당신이 듣고 싶지 않은 답변 - "나를 위해 일합니다".

this example (알리미 3)을 참조하십시오.

테스트 대상 브라우저 및 버전은 무엇입니까?

+0

3.6의 Firefox 확장 기능입니다. – Josh