2009-07-06 7 views
11

Comment obtenir par programmation le numéro de version de mon propre extension Firefox avec Javascript?Comment une extension Firefox peut-elle obtenir son propre numéro de version par programmation?

Mon extension a un fichier install.rdf contenant le numéro de version similaire à ci-dessous. Je veux extraire le contenu de la balise <em:version>.

<?xml version="1.0" encoding="UTF-8"?> 
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:em="http://www.mozilla.org/2004/em-rdf#"> 
    <Description about="urn:mozilla:install-manifest"> 
    ... 
    <em:version>1.0</em:version> 
    ... 
    </Description> 
</RDF> 

Répondre

8

Je n'ai pas obtenu la réponse complète, mais je l'ai trouvé the Extended extension et avait un regard sur le code source comme il semblait être un bon point de départ et de googler quelques-unes des méthodes que je trouve this snippet on MDC. La clé peu de code semble être ceci:

var gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"] 
         .getService(Components.interfaces.nsIExtensionManager); 
var current = gExtensionManager.getItemForID("[email protected]").version; 

vous devez remplacer [email protected] par le numéro approprié pour votre poste.

Firefox 4 requiert un code différent, voir l'autre réponse.

+0

Excellent. C'est une réponse complète! J'ai dû initialiser mon propre objet gExtensionManager. – Mat

+0

Eh bien ce n'était pas une réponse complète parce que je n'étais pas sûr que ça marcherait :) – robertc

+1

Je ne connais aucun avantage à le faire dans un sens ou dans l'autre mais c'est encore plus court: 'let version = Application. extensions.get ('extension @ id'). version; '(à partir de http://stackoverflow.com/questions/1965310/detecting-firefox-extension-version) – MatrixFrog

12

Dans Firefox 4 (Gecko 2) l'API a changé, donc si vous devez port à Firefox 4, c'est le code (de here):

try { 
    // Firefox 4 and later; Mozilla 2 and later 
    Components.utils.import("resource://gre/modules/AddonManager.jsm"); 
    AddonManager.getAddonByID("[email protected]", function(addon) { 
     alert("My extension's version is " + addon.version); 
    }); 
} 
catch (ex) { 
    // Firefox 3.6 and before; Mozilla 1.9.2 and before 
    var em = Components.classes["@mozilla.org/extensions/manager;1"] 
      .getService(Components.interfaces.nsIExtensionManager); 
    var addon = em.getItemForID("[email protected]"); 
    alert("My extension's version is " + addon.version); 
} 
+0

Le grand changement est que l'API Firefox 4 est asynchronisée, tandis que l'API Firefox 3 est synchronisée. Si vous avez besoin d'un blocage, placez du code dépendant dans le rappel. –

+0

@ King King: c'est vrai et une solution de contournement imparfaite consiste à enregistrer le numéro de version quelque part dans l'extension lorsque l'extension démarre et récupérer de manière synchrone lorsque vous en avez besoin. Les appels asynchrones sont vraiment contagieux. –

+0

La version devrait fonctionner correctement avec votre approche, puisque c'est une propriété de l'extension. Toutefois, lorsque vous essayez d'obtenir des informations relatives à l'utilisateur, telles que l'emplacement d'installation de l'extension, vous ne pouvez pas ignorer AddonManager ("ProfD/extensions/" n'est pas toujours correct). –

1

Avec Add-on SDK sa simple :

var version = require("sdk/self").version;

0

Dans Extensions Web utiliser les éléments suivants:

browser.runtime.getManifest().version 
Questions connexes