recursal/MDN huggingface dataset:
Firefox 94 for developers
=========================

This article provides information about the changes in Firefox 94 that will affect developers. Firefox 94 was released on November 2nd, 2021

Changes for web developers
--------------------------

### HTML

No notable changes

### CSS

No notable changes

### JavaScript

No notable changes

### APIs

* The `structuredClone()` global function is now supported for copying complex JavaScript objects (Firefox bug 1722576).

#### DOM

* Developers can now provide a hint for the enter key label/icon used on virtual keyboards, using either `HTMLElement.enterkeyhint` or the global attribute `enterkeyhint` (Firefox bug 1648332).
* The `HTMLScriptElement.supports()` static method is now supported. This provides a simple and unified method for feature checking whether a browser supports particular types of scripts, such as JavaScript modules or classic scripts (Firefox bug 1729239).
* The `ShadowRoot.delegatesFocus` property is now supported, allowing code to check whether the `delegatesFocus` property was set when the shadow DOM was attached (Firefox bug 1413836).
### WebDriver conformance (Marionette)

* `WebDriver:GetWindowHandle` and `WebDriver:GetWindowHandles` now return handles for browser windows instead of tabs, when chrome scope is enabled (Firefox bug 1729291)
### HTTP

* The `cache` directive of the `Clear-Site-Data` response header has been disabled by default.
 It can be enabled using the preference `privacy.clearsitedata.cache.enabled` (Firefox bug 1729291).
Changes for add-on developers
-----------------------------

* Support for `partitionKey`, the first-party URL of a cookie when it's in storage that is partitioned by top-level site, is added to `cookies.get`, `cookies.getAll`, `cookies.set`, `cookies.remove`, and `cookies.cookie`. (Firefox bug 1669716)
* When a context menu is activated, `menus.OnClickData.srcUrl` returns the raw value of the `src` attribute of the clicked element, instead of the current URL (after redirects). (Firefox bug 1659155)
Older versions
--------------

* Firefox 93 for developers
* Firefox 92 for developers
* Firefox 91 for developers
* Firefox 90 for developers
* Firefox 89 for developers
* Firefox 88 for developers
* Firefox 87 for developers
* Firefox 86 for developers
* Firefox 85 for developers
* Firefox 84 for developers
* Firefox 83 for developers
* Firefox 82 for developers
* Firefox 81 for developers
* Firefox 80 for developers
* Firefox 79 for developers
* Firefox 78 for developers
* Firefox 77 for developers
* Firefox 76 for developers
* Firefox 75 for developers
* Firefox 74 for developers
* Firefox 73 for developers
* Firefox 72 for developers
* Firefox 71 for developers
* Firefox 70 for developers
* Firefox 69 for developers
* Firefox 68 for developers
* Firefox 67 for developers
* Firefox 66 for developers
* Firefox 65 for developers
* Firefox 64 for developers
* Firefox 63 for developers
Firefox 99 for developers
=========================

This article provides information about the changes in Firefox 99 that will affect developers. Firefox 99 was released on April 5, 2022.

Changes for web developers
--------------------------

### HTML

No notable changes.

### CSS

No notable changes.

### JavaScript

No notable changes.

### APIs

* `navigator.pdfViewerEnabled` is now enabled, and is the recommended way to determine whether a browser supports inline display of PDF files when navigating to them.
 Sites that use the deprecated properties `navigator.plugins` and `navigator.mimeTypes` to infer PDF viewer support should now use the new property, even though these now return hard-coded mock values that match the signal provided by `pdfViewerEnabled` (Firefox bug 1720353).

#### Media, WebRTC, and Web Audio

* The `RTCPeerConnection.setConfiguration()` method is now supported.
 Among other things, this allows sites to adjust the configuration to changing network conditions (Firefox bug 1253706).

#### Removals

* The Network Information API was previously enabled on Android (only), but is now disabled by default on all platforms.
 This API is on the path for removal because it exposes a significant amount of user information that might be used for fingerprinting.
 (Firefox bug 1637922).
### WebDriver conformance (Marionette)

* Fixed a bug where the Shift key was not handled properly when part of a key sequence of the `WebDriver:ElementSendKeys` command (Firefox bug 1757636).
Changes for add-on developers
-----------------------------

Older versions
--------------

* Firefox 98 for developers
* Firefox 97 for developers
* Firefox 96 for developers
* Firefox 95 for developers
* Firefox 94 for developers
* Firefox 93 for developers
* Firefox 92 for developers
* Firefox 91 for developers
* Firefox 90 for developers
* Firefox 89 for developers
* Firefox 88 for developers
* Firefox 87 for developers
* Firefox 86 for developers
* Firefox 85 for developers
* Firefox 84 for developers
* Firefox 83 for developers
* Firefox 82 for developers
* Firefox 81 for developers
* Firefox 80 for developers
* Firefox 79 for developers
* Firefox 78 for developers
* Firefox 77 for developers
* Firefox 76 for developers
* Firefox 75 for developers
* Firefox 74 for developers
* Firefox 73 for developers
* Firefox 72 for developers
* Firefox 71 for developers
* Firefox 70 for developers
* Firefox 69 for developers
* Firefox 68 for developers
Firefox 83 for developers
=========================

This article provides information about the changes in Firefox 83 that will affect developers. Firefox 83 was released on November 17, 2020.

**Note:** See also Firefox 83 is upon us on Mozilla hacks

Changes for web developers
--------------------------

### Developer Tools

* When using the `:screenshot` helper command in the Web Console, the `--dpr` parameter is no longer ignored when taking a fullscreen screenshot using `--fullpage` (Firefox bug 1645284).
* Developers can use the `scroll` badge in the Page Inspector to Debug scrollable overflow. Selecting the badge highlights elements that are *causing* overflow and marks them with the `overflow` badge (Firefox bug 1669129).
### HTML/XML

* The `crossorigin` attribute is now supported for `<link rel=icon>` (Firefox bug 1661075).
* The `displaystyle` attribute is now implemented for all MathML elements (Firefox bug 1666075).
### CSS

* The vendor prefixed `:-moz-any()` is now aliased to the standard `:is()` CSS pseudo-class function (Firefox bug 1666086).
* We've added support for CSS Conic Gradients (Firefox bug 1632351) and (Firefox bug 1175958).
### JavaScript

* `Intl[@@toStringTag]` has been added, returning a default value of `Intl` (recent addition to the ECMA spec). (Firefox bug 1670053)
### HTTP

*No changes.*

### APIs

*No changes.*

### WebDriver conformance (Marionette)

* We've removed preliminary support for `WebDriver:SwitchToShadowRoot`, which hasn't been added to the WebDriver specification yet (Firefox bug 1662468).
* We fixed a bug in `WebDriver:Back` and `WebDriver:Forward` that caused Marionette to hang when the navigation was triggered from within an `<iframe>` that gets removed (Firefox bug 1672758).
Changes for add-on developers
-----------------------------

*No changes.*

Older versions
--------------

* Firefox 82 for developers
* Firefox 81 for developers
* Firefox 80 for developers
* Firefox 79 for developers
* Firefox 78 for developers
* Firefox 77 for developers
* Firefox 76 for developers
* Firefox 75 for developers
* Firefox 74 for developers
* Firefox 73 for developers
* Firefox 72 for developers
* Firefox 71 for developers
* Firefox 70 for developers
* Firefox 69 for developers
* Firefox 68 for developers
* Firefox 67 for developers
* Firefox 66 for developers
* Firefox 65 for developers
* Firefox 64 for developers
* Firefox 63 for developers
* Firefox 62 for developers
* Firefox 61 for developers
* Firefox 60 for developers
* Firefox 59 for developers
* Firefox 58 for developers
* Firefox 57 for developers
* Firefox 56 for developers
* Firefox 55 for developers
* Firefox 54 for developers
* Firefox 53 for developers
* Firefox 52 for developers
Firefox 100 for developers
==========================

This article provides information about the changes in Firefox 100 that will affect developers. Firefox 100 was released on May 3, 2022.

Changes for web developers
--------------------------

### HTML

No notable changes.

### CSS

* CSS media features for `dynamic-range` and `video-dynamic-range` are now supported. You can now test whether a user agent or an output device supports the combination of brightness, contrast ratio, and color depth by using `dynamic-range` and in the video plane by using `video-dynamic-range` (Firefox bug 1751217).
### JavaScript

No notable changes.

### HTTP

#### Removals

* The non-standard `Large-Allocation` HTTP header has been removed (Firefox bug 1598759).
### APIs

* `WritableStream`, `WritableStreamDefaultWriter`, `WritableStreamDefaultController`, and `ReadableStream.pipeTo()` are now supported (Firefox bug 1759597).

#### DOM

* Code can now use the static method `AbortSignal.timeout()`.
 This returns an `AbortSignal` that can be used to automatically abort an operation with `TimeoutError` after a specified time (Firefox bug 1753309).
### WebAssembly

* WebAssembly now supports exceptions that can be thrown and caught in either WebAssembly or JavaScript (or some other runtime), crossing between the environment boundaries if not handled.
 The JavaScript representations of WebAssembly exceptions are WebAssembly.Exception and WebAssembly.Tag (Firefox bug 1759217).
### WebDriver conformance (Marionette)

* Added support for user prompts (e.g. `alert`) on Android (Firefox bug 1708105).
Changes for add-on developers
-----------------------------

* The `color_scheme` and `content_color_scheme` properties are added to theme manifest key and available in the `theme` API. These properties enable a theme to override whether a light or dark color scheme is automatically applied to the chrome or content (Firefox bug 1708105).
* You can now create a muted tab using `tabs.create()` with the new `muted` property in the `createProperties` object (Firefox bug 1372100).
* Support added for `runtime.onSuspend` and `runtime.onSuspendCanceled` improving support for event page features (Firefox bug 1753850).
Older versions
--------------

* Firefox 99 for developers
* Firefox 98 for developers
* Firefox 97 for developers
* Firefox 96 for developers
* Firefox 95 for developers
* Firefox 94 for developers
* Firefox 93 for developers
* Firefox 92 for developers
* Firefox 91 for developers
* Firefox 90 for developers
* Firefox 89 for developers
* Firefox 88 for developers
* Firefox 87 for developers
* Firefox 86 for developers
* Firefox 85 for developers
* Firefox 84 for developers
* Firefox 83 for developers
* Firefox 82 for developers
* Firefox 81 for developers
* Firefox 80 for developers
* Firefox 79 for developers
* Firefox 78 for developers
* Firefox 77 for developers
* Firefox 76 for developers
* Firefox 75 for developers
* Firefox 74 for developers
* Firefox 73 for developers
* Firefox 72 for developers
* Firefox 71 for developers
* Firefox 70 for developers
* Firefox 69 for developers
Adapting XUL Applications for Firefox 1.5
=========================================

This page contains a list of changes in Firefox 1.5, affecting XUL developers.

### Specific Changes

* Tree Widget Changes
* International characters in XUL JavaScript (only affects extensions with JavaScript files containing non-ASCII characters)
* XMLHttpRequest changes
* XUL Changes for Firefox 1.5
* XPCNativeWrappers are on by default, and the behavior changed somewhat compared to 1.0.x
* A simpler method of Chrome Registration deprecates contents.rdf.
* For overlaid context menus: the function `gContextMenu.linkURL()` has been renamed to `gContextMenu.getLinkURL()`, and `linkURL` is now a property. To use it in a backwards-compatible way:
 `url = 'getLinkURL' in gContextMenu ? gContextMenu.getLinkURL() : gContextMenu.linkURL();`
### Other Information

* How to check application's version using nsIXULAppInfo
* MozillaZine
SVG improvements in Firefox 3
=============================

Firefox 3 offers improved Scalable Vector Graphics (SVG) support over prior versions of Firefox. While these features are documented elsewhere, this article serves as a convenient list so you can easily determine which features were added in Firefox 3.

* The `foreignObject` element is now supported (Firefox bug 326966). See the specification or this article for details.
* `pattern` element support (spec)
* `mask` element support (spec)
* Support for all SVG 1.1 filters (spec):
    + `filter`
    + `feDistantLight`
    + `fePointLight`
    + `feSpotLight`
    + `feBlend`
    + `feColorMatrix`
    + `feConvolveMatrix`
    + `feComponentTransfer`, `feFuncR`, `feFuncG`, `feFuncB`, `feFuncA`
    + `feComposite`
    + `feConvolveMatrix`
    + `feDiffuseLighting`
    + `feDisplacementMap`
    + `feDistantLight`
    + `feFlood`
    + `feGaussianBlur`
    + `feImage`
    + `feMerge`, `feMergeNode`
    + `feMorphology`
    + `feOffset`
    + `fePointLight`
    + `feSpecularLighting`
    + `feTurbulence`
    + `feTile`
* `<a>` element handling in SVG has had several bugs fixed; see Firefox bug 267664, Webkit bug 268135, Webkit bug 316248, Webkit bug 317270 and Webkit bug 320724.
* The SVG DOM Methods `getNumberOfChars()`, `getComputedTextLength()`, `getSubStringLength()`, `getStartPositionOfChar()`, `getEndPositionOfChar()`, `getRotationOfChar()`, and `getCharNumAtPosition()` have been implemented.
* the `xml:space` attribute support (spec)
* fallback `fill`/`stroke` are now supported (spec)
* `em` and `ex` units are now supported for indicating lengths (Firefox bug 305859).
See also
--------

* SVG
* Firefox 3 for developers
DOM improvements in Firefox 3
=============================

Firefox 3 offers a number of improvements to the Document Object Model (DOM), especially in regard to support for extensions to the DOM added by other browsers. This article provides a list of those improvements as well as links to more detailed documentation.

* The Internet Explorer `clientTop` and `clientLeft` DOM extensions are now supported.
* The `window.fullScreen` property is now always accurate no matter where it is read, even in content. Previously it would return `false` inaccurately (Firefox bug 127013).
* The `getClientRects` and `getBoundingClientRect` DOM extensions are now supported (see Firefox bug 174397).
* The Internet Explorer `elementFromPoint` DOM extension is now supported (Firefox bug 199692).
* The Internet Explorer `oncut`, `oncopy`, and `onpaste` DOM extensions are now supported (Firefox bug 280959).
* Added privileged-code-only getters for `Node.nodePrincipal`, `Node.baseURIObject`, and `document.documentURIObject`. Chrome code must not touch (get or set) these properties on an unwrapped content object (e.g. on a `wrappedJSObject` of an `XPCNativeWrapper`), see Firefox bug 324464 for details.
* The Web Applications 1.0 (HTML5) `getElementsByClassName()` DOM method is now supported.
* The Web Applications 1.0 (HTML5) `window.postMessage` DOM method is now supported. This method allows a limited, opt-in form of client-side communication between windows not necessarily on the same domain.
* The `charCode` value of the `keypress` event is changed to an ASCII character if the accelerator key is pressed. Otherwise the `charCode` is the unmodified character (excepting `Shift` state). See Gecko Keypress Event.
### See also

* Firefox 3 for developers
* CSS improvements in Firefox 3
* DOM
Using an external spell checker
===============================

Starting with Firefox 3 (as well as Thunderbird 3 and SeaMonkey 2), you can now install an external spell checker using an extension.

This is *not* for extensions who wants to add a dictionary to the built in Hunspell spell checker.

An example of a spell checker extension can be found as part of the Voikko project.

Implementing spell checker support
----------------------------------

Implementing a spell checker requires the following steps be taken:

1. Implement a class derived from `mozISpellCheckingEngine` that implements the required functionality or accesses an external spell checker.
2. The `mozISpellCheckingEngine` method `mozISpellCheckingEngine.getDictionaryList()` should be implemented to return a list of dictionaries supported by the spell checker.
3. The extension needs to provide a registration callback. The registration callback must use `nsICategoryManager` to install into the category "spell-check-engine" an entry with a name equal to the contract ID of the class implementing the spell check functionality.
4. The extension also needs to provide an unregistration callback, which must remove the category entry.

The value of the category entry may be chosen as desired. You may, for example, choose to use it to record the path to the shared library used by the extension to handle spell checking, to make it easy to locate by other components of the extension.

Spell check dictionary prioritization
-------------------------------------

Dictionaries provided by spell check extensions override built-in dictionaries. If multiple extensions supply dictionaries for the same language, the first one found is used.
Full page zoom
==============

Full page zoom (or just fullZoom) is a new feature in Firefox 3.

### Example (XUL:browser)

The following example demonstrates the use for the current focused browser window. This is the typical usage for a Firefox extension.


```js
var zoom = ZoomManager.getZoomForBrowser(gBrowser.selectedBrowser);
ZoomManager.enlarge();
ZoomManager.setZoomForBrowser(gBrowser.selectedBrowser, ZoomManager.MIN);
```

### Example (XUL:iframe)

Note: This is probably out of date.

You may use the fullZoom feature for a `<XUL:iframe>` as well. However, because an iframe doesn't have a markupDocumentViewer property, we need to get that first:


```js
var zoom = 1.5;
var iframe = document.getElementById("authorFrame");
var contViewer = iframe.docShell.contentViewer;
var docViewer = contViewer.QueryInterface(
  Components.interfaces.nsIMarkupDocumentViewer,
);
docViewer.fullZoom = zoom;
```

### References

* Page zoom extension by Ted Mielczarek fullpagezoom.xpi for latest Firefox 3.0 nightlies
* The bugzilla bug about fullZoom.
* `nsIMarkupDocumentViewer` Interface documentation.
Notable bugs fixed in Firefox 3
===============================

This article offers a list of important bug fixes offered by Firefox 3 that are not necessarily obvious in the documentation.

* if an error occurs parsing an overlay, the overlay is not applied. Parse errors are logged to the error console. (Firefox bug 335755)
* bug fixed where `<menupopup>` elements can be placed inside a binding when attached to a menu or menu-like element. (Firefox bug 345896)
* the button's `dlgType` property now works properly. (Firefox bug 308591)
* the `canBubble` argument to `event.initEvent` now works properly so that events can be fired which don't bubble. (Firefox bug 330190)
* the `DOMAttrModified` event now handles namespaced attributes properly. (Firefox bug 362391)
* XML processing instructions, such as `<?xml-stylesheet ?>`, are now added to a XUL document's DOM. This means `document.firstChild` isn't guaranteed to be the root element, use `document.documentElement` instead. Also, `<?xml-stylesheet ?>` and `<?xul-overlay ?>` processing instructions now have no effect outside the document prolog. (Firefox bug 319654)
* `getElementsByAttributeNS()` functions have been added to XUL elements and documents. (Firefox bug 239976)
* event listeners are maintained when moving or removing an element from a XUL document. (Firefox bug 286619)
* mutation events are now fired for non-displayed documents. (Firefox bug 201236)
* various issues with elements drawing in the wrong order are fixed. (Firefox bug 317375)
* `getElementsByTagName()` has been fixed to work correctly on subtrees that have elements with namespace prefixes in their tag names (Firefox bug 206053).
* The `DOMNodeInserted` and `DOMNodeRemoved` events now properly apply to the correct nodes (Firefox bug 367164).
* `\d`, one of special characters in regular expressions, has been fixed to match only Basic Latin alphabet digits (equivalent to `[0-9]`). (Firefox bug 378738)
* The image-sniffing-services category allows for image decoders implemented as extensions to correctly decode images sent with incorrect mime-types. (Firefox bug 391667)
* Right-clicks on form controls no longer brings up a context menu by default (Firefox bug 404536. See Offering a context menu for form controls to learn how to enable this on a case-by-case basis.
### See also

* Firefox 3 for developers
Templates in Firefox 3
======================

Templates have been significantly improved in Firefox 3. The key improvement allows the use of custom query processors to handle other types of datasources besides RDF. A new query syntax makes this possible. Built-in support for SQL (mozStorage) and XML datasources is also provided. A full description of the new features available for templates is available. (Firefox bug 285631)

### Other template improvements

* Relational conditions have been added to allow for more precise control over what results match a rule. This allows, for example, matching of results that start or end with certain strings, or that are before or after other values.
* A flag, `dont-recurse`, has been added to prevent recursion from happening such that only one level of results are generated
* APIs have been added to the template builder to retrieve a result object representing an output item.
* The XUL sort service is more robust and sorts both content and non-content trees better. It also allows sorting of non-template built content. (Firefox bug 335122)
### See also

* Firefox 3 for developers
Updating plug-ins for Firefox 3.6
=================================

Several changes were made in Gecko 1.9.2 that may impact plug-in developers in particular. This article provides a list of those changes.

Interface changes
-----------------

The `nsIPluginInstance` method `destroy()` has been removed, since it wasn't doing anything anyway.

Mac OS X specific changes
-------------------------

### CFM plug-ins no longer supported

Starting with Gecko 1.9.2, old-style CFM (Code Fragment Manager) binaries are no longer supported for plug-ins. CFM plug-ins have been deprecated since August, 2008.

### main() no longer a supported entry point

In August, 2008, plug-in developers were informed that `main()` would no longer be supported as an entry point. This change has taken effect in Gecko 1.9.2. Plug-ins need to be updated to use `NPN_GetEntryPoints()` instead.

See also
--------

* Firefox 3.6 for developers