2011-06-10 5 views
2

Je veux obtenir le répertoire de mon extension dans Firefox.Vérifiez si le module de code existe dans Firefox

Dans Firefox 3, il fonctionne comme ceci:

var file = Components.classes["@mozilla.org/extensions/manager;1"] 
    .getService(Components.interfaces.nsIExtensionManager) 
    .getInstallLocation("{my guid}"); 

Dans Firefox 4, vous devez utiliser le nouveau gestionnaire d'extensions comme ceci:

Components.utils.import("resource://gre/modules/AddonManager.jsm"); 

AddonManager.getAddonByID("{my guid}", function(addon) { 
    addon.getResourceURL("file name")); 
}); 

Depuis que je veux que mon extension est compatible avec Firefox 3.x et Firefox 4.x et supérieur, comment puis-je vérifier si AddonManager.jsm est disponible?

+1

Dans Firefox 3, vous pouvez également faire 'Application.extensions.get (guid) .version', donc vérifier si' Application.extensions' est défini est une bonne façon de procéder. – MatrixFrog

+0

mais comment puis-je vérifier si elle est définie? –

+1

undefined est une valeur falsifiée donc juste si (Application.extensions) {/ * code pour Firefox 3.6 * /} else {/ * code pour Firefox 4 * /} ' – MatrixFrog

Répondre

2

Une façon est de faire

if (Application.extensions) { 
    // code for Firefox 3.6 
} else { 
    // code for Firefox 4+ 
} 

mais il est un peu bizarre car l'API Firefox 4 est asynchrone et l'API Firefox 3 est synchrone.

+4

Pour contourner la différence asynchrone/synchronisation, définissez simplement un gestionnaire pour l'achèvement asynchrone pour FF4 et appelez le gestionnaire explicitement à la fin du code FF3. – Dancrumb