Progress listeners: Difference between revisions

From MozillaZine Knowledge Base
Jump to navigationJump to search
m (categories)
No edit summary
 
(22 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|Progress Listeners]] [[Category:Example code|Progress Listeners]]

Latest revision as of 17:57, 30 January 2007

Moved to MDC.