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("[email protected]", 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("[email protected]", function(addon) { addon.uninstall(); });
Disable an add-on
Components.utils.import("resource://gre/modules/AddonManager.jsm"); AddonManager.getAddonByID("[email protected]", 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 == "[email protected]") { beingUninstalled = true; } }, onOperationCancelled: function(addon) { if (addon.id == "[email protected]") { beingUninstalled = (addon.pendingOperations & AddonManager.PENDING_UNINSTALL) != 0; } } } try { Components.utils.import("resource://gre/modules/AddonManager.jsm"); AddonManager.addAddonListener(listener); } catch (ex) {}