2012-10-09 26 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:谢谢,忘了注意 - 我调整了答案。 –