La balise <tabbrowser>, utilisée dans Firefox pour afficher les onglets, peut informer de tout un tas d'évènement : changement d'url, page en cours de chargement etc..
Pour cela, il faut lui donner un listener qui doit implémenter l'interface nsIWebProgress.
Ici nous allons développer la fonction onLocationChange pour pouvoir intercepter la soumission d'une nouvelle url dans le champ URL du navigateur et lancer un code précis. OnLocationChange est appelé chaque fois que l'utilisateur charge une nouvelle page (suite à un click sur un lien, ou aprés avoir tapé l'url dans la barre d'adresse), mais aussi quand l'utilisateur change d'onglet.
Dans cet exemple, au changement d'url, la fonction onLocationChange est appelée et le code qui suit est exécuté : si l'url soumise correspond à un critère précis, on redirige vers une autre page.
var urlChangeListener =
{
// fonction appelée à chaque changement de page ou d'onglet
onLocationC[[hange:function(aWebProgress]], aRequest, aLocation)
{
if (aLocation) // on verifie qu'il y a une url indiquée
{
// aLocation.spec permet de récuperer l'url à charger
var url = aLocation.spec;
// Petit test pour voir si url == "http://www.google.fr/"
if (url == "http://www.google.fr/")
{
// Si le test est vrai, alors on change la valeur "location"
// du navigateur ce qui correspond a une redirection en interne
window._content.document.location = "http://xulfr.org";
}
}
},
// on définit les autres fonctions de l'interface, même si on n'y fait rien
// sinon cela provoque des erreurs javascript
onProgressChange :function ( webProgress, request, curSelfProgress,
maxSelfProgress, curTotalProgress, maxTotalProgress ){ },
onSecurityChange: function ( webProgress, request, state ){ },
onStateChange: function ( webProgress, request, stateFlags, status){ },
onStatusChange: function( webProgress,request , status, message ){ },
QueryInterface : function (iid) {
if(!iid.equals(Components.interfaces.nsISupports) &&
!iid.equals(Components.interfaces.nsIWebProgressListener))
throw Components.results.NS_ERROR_NO_INTERFACE;
return this;
}
};
// Ici on déclare maintenant notre listener auprés du tabbrowser de firefox
window.getBrowser().addProgressListener( urlChangeListener , Components.interfaces.nsIWebProgress.NOTIFY_STATE_DOCUMENT);
Comme vous le voyez, il y a d'autres méthodes qui nous permettent d'être informés sur d'autres évènements.
Encore une chose, dans le onLocationChange, vous pouvez faire un test comme ceci pour déterminer si il s'agit d'un nouveau document en cours de chargement, ou si il s'agit juste d'un changement d'onglet :
if(aWebProgress.isLoadingDocument){
// nouveau document
}else{
// l'utilisateur a juste sélectionné un nouvel onglet
}
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.