Add-ons using the techniques described in this document are considered a legacy technology in Firefox. Don't use these techniques to develop new add-ons. Use WebExtensions instead. If you maintain an add-on which uses the techniques described here, consider migrating it to use WebExtensions.
From Firefox 53 onwards, no new legacy add-ons will be accepted on addons.mozilla.org (AMO).
From Firefox 57 onwards, WebExtensions will be the only supported extension type, and Firefox will not load other types.
Even before Firefox 57, changes coming up in the Firefox platform will break many legacy extensions. These changes include multiprocess Firefox (e10s), sandboxing, and multiple content processes. Legacy extensions that are affected by these changes should migrate to WebExtensions if they can. See the "Compatibility Milestones" document for more.
A wiki page containing resources, migration paths, office hours, and more, is available to help developers transition to the new technologies.
Unstable
Query the add-on's environment and access arguments passed to it.
Usage
Querying Your Environment
Using the system
module you can access environment variables (such as PATH
), find out which operating system your add-on is running on and get information about the host application (for example, Firefox or Fennec), such as its version.
var system = require("sdk/system"); // PATH environment variable console.log(system.env.PATH); // operating system console.log("platform = " + system.platform); // processor architecture console.log("architecture = " + system.architecture); // compiler used to build host application console.log("compiler = " + system.compiler); // host application build identifier console.log("build = " + system.build); // host application UUID console.log("id = " + system.id); // host application name console.log("name = " + system.name); // host application version console.log("version = " + system.version); // host application vendor console.log("vendor = " + system.vendor); // host application profile directory console.log("profile directory = " + system.pathFor("ProfD"));
Quit the host application
To quit the host application, use the exit()
function.
var system = require("sdk/system"); system.exit();
Globals
Functions
exit(code)
Quits the host application with the specified code
. If code
is omitted, exit()
uses the success code 0
. To exit with failure use 1
.
var system = require("sdk/system"); system.exit();
Parameters
code : integer
To exit with failure, set this to 1
. To exit with success, omit this argument.
pathFor(id)
Firefox enables you to get the path to certain "special" directories, such as the desktop or the profile directory. This function exposes that functionality to add-on authors.
For the full list of "special" directories and their IDs, see "Getting_files in special directories".
For example:
// get Firefox profile path var profilePath = require('sdk/system').pathFor('ProfD'); // get OS temp files directory (/tmp) var temps = require('sdk/system').pathFor('TmpD'); // get OS desktop path for an active user (~/Desktop on linux // or C:\Documents and Settings\username\Desktop on windows). var desktopPath = require('sdk/system').pathFor('Desk');
Parameters
id : String
The ID of the special directory.
Returns
String : The path to the directory.
Properties
env
This object provides access to environment variables.
You can get the value of an environment variable by accessing the property with that name:
var system = require("sdk/system"); console.log(system.env.PATH);
You can test whether a variable exists by checking whether a property with that name exists:
var system = require("sdk/system"); if ('PATH' in system.env) { console.log("PATH is set"); }
You can set a variable by setting the property:
var system = require("sdk/system"); system.env.FOO = "bar"; console.log(system.env.FOO);
You can unset a variable by deleting the property:
var system = require("sdk/system"); delete system.env.FOO;
You can't enumerate environment variables.
platform
The type of operating system you're running on. This will be one of the values listed as OS_TARGET, converted to lower case.
var system = require("sdk/system"); console.log("platform = " + system.platform);
architecture
The type of processor architecture you're running on. This will be one of: "arm"``,
"ia32", or
"x64"`.
var system = require("sdk/system"); console.log("architecture = " + system.architecture);
compiler
The type of compiler used to build the host application. For example: "msvc"
, "n32"
, "gcc2"
, "gcc3"
, "sunc"
, "ibmc"
var system = require("sdk/system"); console.log("compiler = " + system.compiler);
build
An identifier for the specific build, derived from the build date. This is useful if you're trying to target individual nightly builds. See nsIXULAppInfo's appBuildID
.
var system = require("sdk/system"); console.log("build = " + system.build);
id
The UUID for the host application. For example, "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
for Firefox. This has traditionally been in the form "{AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE}"
but for some applications it may be in the form "appname@vendor.tld"
.
See nsIXULAppInfo's ID
.
var system = require("sdk/system"); console.log("id = " + system.id);
name
The human-readable name for the host application. For example, "Firefox".
var system = require("sdk/system"); console.log("name = " + system.name);
version
The version of the host application.
var system = require("sdk/system"); console.log("version = " + system.version);
platformVersion
The version of XULRunner that underlies the host application.
See nsIXULAppInfo's platformVersion
.
var system = require("sdk/system"); console.log("XULRunner version = " + system.platformVersion);
vendor
The name of the host application's vendor, for example: "Mozilla"
.
var system = require("sdk/system"); console.log("vendor = " + system.vendor);