Attention : Le contenu de ces pages n'a pas été mis à jour depuis longtemps. Il est probablement obsolète pour Firefox 4.0/Gecko 4.0 et supérieur. Pour du contenu plus récent, allez consulter developer.mozilla.org.

Maj extensions

Voici un exemple simple d'un script permettant de lancer une mise à jour d'extensions. Ce code utilise le composant XPCom : "@mozilla.org/extensions/manager;1"

Le code

 /*
 ** pour plus d'infos
 ** cf. extensions.js qui se trouve dans  chrome/toolkit.jar!/content/mozapps/extensions
 */
 function UpdateCheckListener() {
    this._addons = [];
 }
 UpdateCheckListener.prototype = {
    _addons: [],
    onUpdateStarted: function() { },
    onUpdateEnded: function() {
     if (this._addons.length > 0)
       em.addDownloads(this._addons, this._addons.length, true);
    },
    onAddonUpdateStarted: function(addon) { },
    onAddonUpdateEnded: function(addon, status) {
     switch (status)
     {
     // cf [[[http://xulplanet.com/references/xpcomref/ifaces/nsIAddonUpdateCheckListener.html]]]
     case Components.interfaces.nsIAddonUpdateCheckListener.STATUS_UPDATE:
       this._addons.push(addon);
       break;
     case Components.interfaces.nsIAddonUpdateCheckListener.STATUS_FAILURE:
       // ouch :)
       break;
     default :
       break;
     }
    },
    QueryInterface: function(iid) {
     if (!iid.equals(Components.interfaces.nsIAddonUpdateCheckListener) &&
        !iid.equals(Components.interfaces.nsISupports)) {
         throw gComponents.results.NS_ERROR_NO_INTERFACE;
       }
     return this;
    }
 };
 // on instancie un composant type extension manager
 var em = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
 // on l'utilise pour recuperer la liste des extensions
 var items = em.getItemList(Components.interfaces.nsIUpdateItem.TYPE_ADDON, { });
 // on instancie le listener tel que décrit dans le code ci dessus.
 var listener = new UpdateCheckListener();
 // on update les extensions grace au composant
 em.update(items, items.length, false, listener);

Explications

Grâce au composant XPCom de gestion d'extensions "@mozilla.org/extensions/manager;1", on appelle la méthode getItemList() pour récupèrer la liste des extensions.

Ensuite, on lance la mise a jour de ces extensions avec la méthode update().

Cette mise à jour consiste au téléchargement du fichier update.rdf présent à l'URL décrite dans votre install.rdf (dans le tag <em:updateURL>), et suivant l'information de version présente dans ce fichier, au téléchargement et à l'installation d'un XPI.

Afin d'être tenu au courant de l'état de la mise à jour, on passe au composant gestionnaire d'extensions un objet appelé UpdateCheckListener. Cet objet fourni le statut de la mise à jour (ex : pas de mise à jour, mises à jours, erreur, ... cf. l'interface nsIAddonUpdateCheckListener).

Le code ci-dessus va donc updater toutes les extensions, il suffit donc de reduire la liste des items pour n'updater que la votre / ou celles de votre choix.

Nota Bene

  • *Attention**, certaines fonctions ont leurs implémentations qui diffèrent de la documentation. Par exemple getItemList ne prend pas 3 paramètres et ne retourne pas void ;)

%%%

Grâce à ce composant, vous pouvez obtenir différentes informations suplémentaires.

Dans l'exemple, items est un tableau qui contient :

 items[0].id       // ex: monapplication@chezmoi.com
 items[0].name     // ex: monapplication
 items[0].version  // ex: 1.0.1

Ce code fonctionne sur firefox 1.5.x, testé sur 1.5.0.2 à 1.5.0.4

Attention de bien placer ce code après le chargement de la page ( dans votre onload par exemple).


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.