2012-10-09 59 views
0

當Mozilla觀察者事件"chrome-document-global-created"被觸發時,我需要獲取DOM。因此,我有以下代碼。但是我怎樣才能從那裏獲得DOM?數據是null(根據文檔),有人可以告訴我我必須使用哪個對象嗎?在「chrome-document-global-created」之後訪問dom

非常感謝!

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

回答

0

如果你看一下documentationsubject是一個窗口。你仍然需要使用QueryInterface()實際得到的nsIDOMWindow接口,但之後事情就變得很明顯:

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只返回「頂級」節點(,)。所以我試圖通過:doc.body.innerHTML獲取body的內容,但這似乎是空的。這是由於該事件,這意味着我無法通過「chrome-document-global-created」獲取頁面內容? –

+0

在解析文檔之前,一旦Window對象被創建,全局創建的通知就會運行。如果你想要完整的DOM,你應該在那個時候添加一個DOMContentLoading事件處理程序,我想。 –

+0

@BorisZbarsky:謝謝,忘了注意 - 我調整了答案。 –