Getting the directory where your add-on is located
If you need to determine the directory in which your add-on is installed, code like the following will do the trick. Simply replace YOUREXTENSIONID with your add-on's ID.
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID("YOUREXTENSIONID", function(addon) {
var addonLocation = addon.getResourceURI("").QueryInterface(Components.interfaces.nsIFileURL).file.path;
});
Accessing file and version information
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID("my-addon@foo.com", function(addon) {
alert("My extension's version is " + addon.version);
alert("Did I remember to include that file.txt file in my XPI? " +
addon.hasResource("file.txt") ? "YES!" : "No");
alert("Let's pretend I did, it's available from the URL " + addon.getResourceURI("file.txt").spec);
});
Uninstall an add-on
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID("youraddon@youraddon.com", function(addon) {
addon.uninstall();
});
Disable an add-on
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID("youraddon@youraddon.com", function(addon) {
if (addon.isActive) addon.userDisabled = addon.isActive;
});
Listening for add-on uninstall
This example sets a variable beingUninstalled that you can check when you get a profile-before-change message to do cleanup for your add-on on uninstall.
var beingUninstalled;
let listener = {
onUninstalling: function(addon) {
if (addon.id == "youraddon@youraddon.com") {
beingUninstalled = true;
}
},
onOperationCancelled: function(addon) {
if (addon.id == "youraddon@youraddon.com") {
beingUninstalled = (addon.pendingOperations & AddonManager.PENDING_UNINSTALL) != 0;
}
}
}
try {
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.addAddonListener(listener);
} catch (ex) {}
