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) {}