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"
/*
** 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);
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.
%%%
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.