WebExtensions are designed to be compatible with Chrome and Opera extensions: as far as possible, extensions written for those browsers should run on Firefox with minimal changes.
However, Firefox currently has support for only a limited set of the features and APIs supported by Chrome and Opera. We're working on adding more support, but many features are not yet supported, and we may never support some.
This article lists all features and APIs that are fully or partially supported in Firefox. Where a feature is partially supported, we've indicated what the gaps are.
It's safe to assume that features and APIs not listed here at all are not yet supported.
manifest.json features
Fully supported keys
applicationsdefault_localedescriptionbrowser_actionmanifest_versionnameversionweb_accessible_resources
Partially supported keys
background
Firefox does not support the "persistent" property. Background scripts stay loaded all the time.
content_scripts
Firefox does not currently support:
include_globsexclude_globsmatch_about_blank
permissions
Firefox does not yet support the following permissions:
activeTabbackgroundclipboardReadclipboardWritegeolocationnativeMessagingunlimitedStorage
Obviously, it also don't yet support permissions for APIs that are themselves not supported.
JavaScript APIs
Fully supported APIs
alarms- cookies
- onChanged events might be subtely different
- Creating session cookies with
setmight fail
Partially supported APIs
browserAction
- Firefox does not support:
enable()ordisable().
extension
- Firefox only supports
:getBackgroundPage()getURL()inIncognitoContextin content scripts
i18n
- In the JavaScript API, Firefox only supports
getMessage(). - Firefox only supports the
@@extension_idand@@ui_localepredefined messages. - Firefox does not localize CSS files.
- Strings to be localized must consist entirely of
__MSG_foo__in order for a substitution to be made.
notifications
- The only supported notification options are:
iconUrltitlemessage.
- The only supported methods are:
create()clear()getAll().
- The only supported event is
onClosed. - Firefox doesn't provide
byUserdata.
runtime
- Firefox only supports:
onStartup()getManifest()idsendMessage()onMessageonConnect
storage
- The only storage area Firefox supports is
local. - Firefox does not support
getBytesInUse()orclear().
tabs
- Firefox does not support:
getCurrent()sendRequest()getSelected()duplicate()highlight()move()detectLanguage()captureVisibleTab()getZoom()setZoom()getZoomSettings()setZoomSettings()
Firefox treats highlighted and active as the same since Firefox cannot select multiple tabs.
Firefox doesn't yet support the callback argument to executeScript().
webNavigation
- Firefox does not support:
getFrame()getAllFrames()onCreatedNavigationTargetonHistoryStateUpdated- transition types and qualifiers
- Filtering
onReferenceFragmentUpdated also triggers for pushState.
webRequest
- Firefox does not support:
handlerBehaviorChanged()onAuthRequiredonBeforeRedirectonErrorOccurred
- Requests can be:
- canceled only in
onBeforeRequest - modified/redirected only in
onBeforeSendHeaders
- canceled only in
- Responses can be modified only in
onHeadersReceived. - Filtering by
windowIdandtabIdis not supported. - The
"requestBody"instruction inopt_extraInfoSpecis not supported. - Redirection is not allowed in
onBeforeRequestoronHeadersReceived, but is allowed inonBeforeSendHeaders. requestIdis not included in the argument passed to the listener.
windows
onFocusChangedwill trigger multiple times for a given focus change.create()does not support thefocused,type, orstateoptions.update()only supports thefocusedoption.
Planned APIs
We don't yet support the following APIs, but plan to, soon:
- bookmarks
- commands
- contextMenus
- Devtools (mostly panels)
- downloads
- history
- idle
- omnibox
- pageAction
- permissions
- Native messaging (runtime.connectNative)
Miscellaneous incompatibilities
- Chrome allows any optional arguments to be omitted, even if followed by other arguments. Firefox currently supports this only under specific circumetances. We recommend only omitting optional arguments at the end of the arguments list, and using
nullfor all other cases.