|
|
(23 intermediate revisions by 10 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 assosiated with documents loading in the browser and with tab switching events. Progress Listeners implement the [http://www.xulplanet.com/references/xpcomref/ifaces/nsIWebProgressListener.html nsIWebProgressListener] 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 nsIWebProgressListener:
| |
| <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 ''load'' listener of a main window:
| |
| <pre>const NOTIFY_STATE_DOCUMENT = Components.interfaces.nsIWebProgress.NOTIFY_STATE_DOCUMENT;
| |
| window.getBrowser().addProgressListener(myListener, 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 ''myListener'' to an [[Dev : Javascript coding guidelines|unique identifier]].
| |
| | |
| [[Category:Development]] | |