2012-10-09 2 views
0

모질라 옵저버 이벤트 "chrome-document-global-created"이 실행되면 DOM을 가져와야합니다. 따라서 다음 코드가 있습니다. 하지만 거기에서 DOM을 어떻게 얻을 수 있습니까? 데이터는 null (문서에 따르면)입니다. 누군가 내가 사용해야하는 개체를 알려주시겠습니까?"chrome-document-global-created"이후에 dom에 액세스하십시오.

감사합니다. 당신이 documentation 보면

observe: function(subject, topic, data) { 
    which object is it? document? window? cant find anything there about dom... 
} 

답변

0

subject는 창입니다. 당신은 여전히 ​​실제로 nsIDOMWindow 인터페이스를 얻을 수 QueryInterface()를 사용할 필요하지만 상황이 매우 명백 얻을 후 :

var doc = subject.QueryInterface(Components.interfaces.nsIDOMWindow).document; 
dump(doc.documentElement.innerHTML); 

참고이 시점에서 문서에 많이가되지 않습니다 - 그냥 작성되었습니다. 보리스 Zbarsky이 코멘트에 지적으로, 당신은 아마 문서 내용을 사용할 수있게하기 위해 대기하는 DOMContentLoaded 이벤트 리스너를 추가 할 :

var wnd = subject.QueryInterface(Components.interfaces.nsIDOMWindow); 
wnd.addEventListener("DOMContentLoaded", function(event) 
{ 
    dump(wnd.document.documentElement.innerHTML); 
}, false); 
+0

감사합니다, Wladimier을! 그러나 또 하나의 질문 : doc.documentElement.innerHTML은 "최상위"노드 (, )를 반환합니다. 그래서 나는 body.content를 통해 body의 내용을 얻으려고했지만 doc.body.innerHTML은 비어있는 것처럼 보인다. 이것은 이벤트 때문입니다. 즉 "chrome-document-global-created"를 통해 페이지의 콘텐츠를 가져올 수 없습니다. –

+0

문서가 구문 분석되기 전에 Window 개체가 만들어지면 전역으로 생성되는 알림이 실행됩니다. 전체 DOM을 원한다면 그 시점에서 DOMContentLoading 이벤트 처리기를 추가해야한다고 생각합니다. –

+0

@BorisZbarsky : 감사합니다. 그 점을 잊어 버렸습니다. 나는 대답을 조정했습니다. –

관련 문제