Progress listeners: Difference between revisions

From MozillaZine Knowledge Base
Jump to navigationJump to search
(fix some typos, code and markup; add a link to On Tab Load)
No edit summary
 
(24 intermediate revisions by 10 users not shown)
Line 1: Line 1:
==Progress Listeners==
Moved to [http://developer.mozilla.org/en/docs/Code_snippets:Progress_Listeners MDC].
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]].
[[Category:Redirects]]
 
==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]].

Latest revision as of 17:57, 30 January 2007

Moved to MDC.