|
|
(17 intermediate revisions by 8 users not shown) |
Line 1: |
Line 1: |
| {{extdev}}
| | Moved to [http://developer.mozilla.org/en/docs/Code_snippets:Progress_Listeners MDC]. |
|
| |
|
| ==Progress Listeners==
| | [[Category:Redirects]] |
| Progress listeners allow extensions to be notified of events associated with documents loading in the browser and with tab switching events. Progress listeners implement the <code>[http://www.xulplanet.com/references/xpcomref/ifaces/nsIWebProgressListener.html nsIWebProgressListener]</code> interface.
| |
| | |
| Note that if you just want to execute your code each time a page loads, you can use an [[Dev : Extensions : Example Code : On Tab Load|an easier method]].
| |
| | |
| ==Example==
| |
| <ol><li>Create an object which implements <code>nsIWebProgressListener</code>:
| |
| <pre>const STATE_START = Components.interfaces.nsIWebProgressListener.STATE_START;
| |
| const STATE_STOP = Components.interfaces.nsIWebProgressListener.STATE_STOP;
| |
| var myListener =
| |
| {
| |
| QueryInterface: function(aIID)
| |
| {
| |
| if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
| |
| aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
| |
| aIID.equals(Components.interfaces.nsISupports))
| |
| return this;
| |
| throw Components.results.NS_NOINTERFACE;
| |
| },
| |
| | |
| onStateChange: function(aProgress, aRequest, aFlag, aStatus)
| |
| {
| |
| if(aFlag & STATE_START)
| |
| {
| |
| // This fires when the load event is initiated
| |
| }
| |
| if(aFlag & STATE_STOP)
| |
| {
| |
| // This fires when the load finishes
| |
| }
| |
| return 0;
| |
| },
| |
| | |
| onLocationChange: function(aProgress, aRequest, aURI)
| |
| {
| |
| // This fires when the location bar changes i.e load event is confirmed
| |
| // or when the user switches tabs
| |
| return 0;
| |
| },
| |
| | |
| // For definitions of the remaining functions see XulPlanet.com
| |
| onProgressChange: function() {return 0;},
| |
| onStatusChange: function() {return 0;},
| |
| onSecurityChange: function() {return 0;},
| |
| onLinkIconAvailable: function() {return 0;}
| |
| }</pre>
| |
| </li>
| |
| | |
| <li>Attach the progress listener to a <browser> or a <tabbrowser> element, e.g. for Firefox put the following code in a <code>load</code> listener of a main window:
| |
| <pre>gBrowser.addProgressListener(myListener,
| |
| Components.interfaces.nsIWebProgress.NOTIFY_STATE_DOCUMENT);</pre>
| |
| | |
| The second argument is a [http://www.xulplanet.com/references/xpcomref/comps/c_appshellcomponentbrowserstatusfilter1.html status filter] which determines the type of events that will be recieved.
| |
| </li>
| |
| </ol>
| |
| | |
| Remember to change <code>myListener</code> to an [[JavaScript coding guidelines|unique identifier]].
| |
| | |
| [[Category:Example code]] [[Category:XPCOM example code]] [[Category:JavaScript example code]]
| |