In order inform the user of possible conflicts, I'd like to have my add-on check if another add-on is installed and enabled. If so, I can disable either it or my own at the user's bequest:
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;
});
}
}
But I first, of course have to check if a certain other add-on is installed. Presently, I do this as follows:
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);
}
});
})
}
The code for Firefox 4 (the else
-statement) works fine. For older versions of Firefox (3.5 and older), I can't for the life of me figure out how to determine if the extension is in fact installed.
Does anybody know how to do this?