Re: nsIDocumentObserver bug (maybe).
"Michael A. Borisov" <[email protected]>
| Newsgroups | gmane.comp.mozilla.devel.xpcom |
|---|---|
| Organization | Another Netscape Collabra Server User |
| Message-ID | <[email protected]> |
"Mark Hammond" <[email protected]> wrote in message news:[email protected]... > Michael A. Borisov wrote: > > Hello everybody, > > > > Can anybody help me with DocumentObserver please? I've created a child of > > nsIDocumentObserver than registered it with the nsIDocument::AddObserver > > method. I use BeginLoad and EndLoad methods to determin the start and end of > > document loading. But sometimes EndLoad isn't invoked (for some sites). Is > > it bug or feature? And what is the right way to determin the document > > loading end? > > You probably want nsIWebProgress. Here is code I used to hook document > load. > > // hook a web progress listener so we know when messages have > // finished rendering. > var interfaceRequestor = > document.getElementById('messagepane').docShell.QueryInterface > (Components.interfaces.nsIInterfaceRequestor); > var webProgress = > interfaceRequestor.getInterface( > Components.interfaces.nsIWebProgress); > msgWindowWebProgressListener = new nsMsgWindowWebProgressListener(); > webProgress.addProgressListener(msgWindowWebProgressListener, > Components.interfaces.nsIWebProgress.NOTIFY_STATE_WINDOW); > > And the implementation: > > function nsMsgWindowWebProgressListener() > { > } > nsMsgWindowWebProgressListener.prototype = > { > QueryInterface : function(aIID) { > if (aIID.equals(Components.interfaces.nsIWebProgressListener) || > aIID.equals(Components.interfaces.nsISupportsWeakReference)) > return this; > throw Components.results.NS_NOINTERFACE; > }, > onStateChange : function(aWebProgress, aRequest, aStateFlags, aStatus) { > if ((aStateFlags & ListenerState_Finished) == ListenerState_Finished) { > ... > } > } > > HTH, > > Mark. > Thank you. I feel it will work. But document.getElementById('messagepane') in my Mozilla returns null. How I can get docShell? Thank you again, Michael.