Para informar al usuario de posibles conflictos, me gustaría tener mi complemento de verificación si hay otro complemento instalado y habilitado. Si es así, puedo desactivar cualquiera o la mía en el legado del usuario:Comprueba si un complemento de Firefox 3.5 está habilitado
function disableExtension(id) {
var man = Components.classes["@mozilla.org/extensions/manager;1"];
if (man) {
man = man.getService(Components.interfaces.nsIExtensionManager);
}
if (man) {
man.disableItem(id);
} else {
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID(id, function(addon) {
addon.userDisabled = true;
});
}
}
Pero primero, por supuesto, tiene que comprobar si se ha instalado un cierto otro complemento. Actualmente, hago esto de la siguiente manera:
if (Application.extensions) {
// Gecko 1.9.2 and older
ext = Application.extensions.get(id);
if (ext) {
// TODO check if extension is also enabled
disableExtension(id);
}
} else {
// Gecko 2.0.0 and newer
Application.getExtensions(function(extensions) {
ext = extensions.get(id);
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID(id, function(addon) {
if (!addon.userDisabled) {
disableExtension(id);
}
});
})
}
El código para Firefox 4 (el else
-statement) funciona bien. Para las versiones anteriores de Firefox (3.5 y anteriores), no puedo por la vida de averiguar cómo determinar si la extensión está instalada de hecho.
¿Alguien sabe cómo hacer esto?
Lo único que se me ocurre es ejecutar 'extensions.ini' y buscar' getInstallLocation() 'en la extensión, pero no me gusta ese enfoque. –