--- title: JavaScript APIs slug: Mozilla/Add-ons/WebExtensions/API tags: - NeedsTranslation - TopicStub - WebExtensions translation_of: Mozilla/Add-ons/WebExtensions/API ---
The WebExtension JavaScript APIs can be used inside the add-on's background scripts and in any other documents bundled with the add-on, including browser action or page action popups, sidebars, options pages, or new tab pages. A few of these APIs can also be accessed by an add-on's content scripts (see the list in the content script guide).
To use the more powerful APIs you need to request permission in your add-on's manifest.json.
You can access the APIs using the browser
namespace:
function logTabs(tabs) {
console.log(tabs);
}
browser.tabs.query({currentWindow: true}, logTabs);
Many of the APIs are asynchronous, returning a Promise
:
function logCookie(c) {
console.log(c);
}
function logError(e) {
console.error(e);
}
var setCookie = browser.cookies.set(
{url: "https://developer.mozilla.org/"}
);
setCookie.then(logCookie, logError);
Note that this is different from Google Chrome's extension system, which uses the chrome
namespace instead of browser
, and which uses callbacks instead of promises for asynchronous functions. As a porting aid, the Firefox implementation of WebExtensions supports chrome
and callbacks as well as browser
and promises. Mozilla has also written a polyfill which enables code that uses browser
and promises to work unchanged in Chrome: https://github.com/mozilla/webextension-polyfill.
Microsoft Edge uses the browser
namespace, but doesn't yet support promise-based asynchronous APIs. In Edge, for the time being, asynchronous APIs must use callbacks.
Not all browsers support all the APIs: for the details, see Browser support for JavaScript APIs.