Visit Mozilla.org

Extraits de code:Sur un chargement de page

Un article de MDC.


Cet article est dédié aux développeurs XUL/JavaScript qui désirent exécuter un code personnalisé à chaque fois qu'une nouvelle page est chargée dans le navigateur ou courrieleur. Si vous désirez obtenir un contrôle plus précis pour l'exécution du code personnalisé, par exemple lorsque des documents se chargent ou qu'un onglet est sélectionné, consultez les scrutateurs de progression.

Les scrutateurs de progression permettent aux extensions de recevoir la notification des événements associés aux chargements de documents dans le navigateur et aux changements de la sélection d'onglets. Ils implémentent l'interface nsIWebProgressListener.

[modifier] Création d'un overlay

Tout d'abord, vous devez créer un overlay de l'un (ou plus selon quelle application vous ciblez) des documents XUL suivants :

ApplicationURI de l'overlay
Firefoxchrome://browser/content/browser.xul
Thunderbirdchrome://messenger/content/messenger.xul
Navigator de Seamonkeychrome://navigator/content/navigator.xul

[modifier] Attachement d'un script

Attachez un script à votre overlay, et ajoutez un scrutateur d'événement load à l'élément appcontent (navigateurs) ou messagepane (messagerie) grâce au code dans ce script :

window.addEventListener("load", function() { myExtension.init(); }, false);

var myExtension = {
  init: function() {
    var appcontent = document.getElementById("appcontent");   // navigateur
    if(appcontent)
      appcontent.addEventListener("load", this.onPageLoad, true);
    var messagepane = document.getElementById("messagepane"); // messagerie
    if(messagepane)
      messagepane.addEventListener("load", this.onPageLoad, true);
  },

  onPageLoad: function(aEvent) {
    var doc = aEvent.originalTarget; // doc est le document qui a déclenché l'événement "onload"
    // Faire ici quelque chose avec la page chargée.
    // doc.location est un objet Location (voir plus bas pour un lien).
    // Vous pouvez l'utiliser pour n'exécuter votre code que sur certaines pages.
    if(doc.location.href.search("forum") > -1)
      alert("une page de forum est chargée");
  }
}

Les nocturnes actuelles du tronc de Firefox vont également déclencher la fonction onPageLoad pour autre chose que des documents, comme xul:images (favicons dans la barre d'onglets). Si vous voulez seulement gérer des documents, testez aEvent.originalTarget.nodeName == "#document" bug 329514.

[modifier] Références