2009-07-06 14 views
11

¿Cómo obtengo programáticamente mi número de versión de la extensión de Firefox con Javascript?¿Cómo puede una extensión de Firefox obtener su propio número de versión mediante programación?

Mi extensión tiene un archivo install.rdf que contiene el número de versión similar al siguiente. Quiero extraer el contenido de la etiqueta <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> 

Respuesta

8

yo no tengo la respuesta completa, pero me di the Extended extension y tenía un vistazo al código fuente ya que parecía un buen punto de partida, y de buscar en Google algunos de los métodos en los que he encontrado this snippet on MDC. La barba de la llave de código que parece ser la siguiente:

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

que tendría que sustituir [email protected] por el identificador adecuado para su extensión.

Firefox 4 requiere un código diferente, consulte la otra respuesta.

+0

Excelente. Esa es una respuesta completa! Tuve que inicializar mi propio objeto gExtensionManager. – Mat

+0

Bueno, no fue una respuesta completa porque no estaba realmente seguro de que funcionaría :) – robertc

+1

No conozco ninguna ventaja para hacerlo de una forma u otra, pero esto es aún más breve: 'let version = Application. extensions.get ('extensión @ id'). versión; '(de http://stackoverflow.com/questions/1965310/detecting-firefox-extension-version) – MatrixFrog

12

En Firefox 4 (Gecko 2) la API ha cambiado, así que si necesitas a puerto para Firefox 4, este es el código (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

El gran cambio es que la API de Firefox 4 está sincronizada, mientras que la API de Firefox 3 está sincronizada. Si necesita bloqueo, coloque el código dependiente en la devolución de llamada. –

+0

@Crend King: eso es cierto y una solución imperfecta es guardar el número de versión en algún lugar dentro de la extensión cuando la extensión se inicia y recuperar de manera sincronizada cuando la necesite. Las llamadas asincrónicas son realmente contagiosas. –

+0

La versión debería funcionar bien con su enfoque, ya que es una propiedad de la extensión. Sin embargo, cuando intenta obtener información relacionada con el usuario, como la ubicación instalada de la extensión, no puede pasar por alto AddonManager ("ProfD/extensions/" no siempre es correcto). –

1

Con Add-on SDK de su simple como :

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

0

En extensiones web utilizar lo siguiente:

browser.runtime.getManifest().version 
Cuestiones relacionadas