Site Compatibility for Firefox 20

by 2 contributors:

Firefox 20 was released on . While it has been developed to maintain compatibility as much as possible, the new version includes some changes affecting backward compatibility aimed at improving interoperability with the other browsers or following the latest Web standards. Here's the list of such changes — Hope this helps whenever you test your sites or applications.

This article only explains the changes that may affect backward compatibility for Websites. For the other new features and changes, please read the following documents:

Follow @FxSiteCompat on Twitter for further updates.


The CSS3 Flexible Box has been enabled by default, but still disabled on the Release channel

The new Flexible Box (flexbox) implemented in Firefox 18 is now available without having to edit a hidden preference. Note that it's not compatible with the traditional prefixed implementation such as -moz-box-flex.

Although developers can now test the flexbox with Aurora or Beta, this feature will be keep disabled on the Release channel until it's ready for production.

The CSSRule.MOZ_KEYFRAME_RULE(S) constants have been unprefixed

The MOZ_KEYFRAME_RULE and MOZ_KEYFRAMES_RULE constants of CSSRule have been unprefixed. While those prefixed constants will remain for the meantime, use the unprefixed ones instead from now on.


HTMLElement members are no more available on the whole inheritage chain

Where we used to have all members of the entire inheritance chain (e.g. HTMLDivElementHTMLElementElementNodeEventTarget) on the interface prototype object of the leaf class (e.g. HTMLDivElement.prototype === document.createElement("div").__proto), we now put the members of HTMLElement just on HTMLElement.prototype (=== HTMLDivElement.prototype.__proto__).

It turns out that at least one important library, Optimizely, relied on this erroneous behavior. They quickly fixed it on their side, but it is important that any Web site using their tool upgrade to the latest versions.

Methods taking DOMString now convert null as "null" instead of the empty string

Passing null to a method that takes a DOMString argument will stringify to "null" instead of the empty string. For example, element.setAttribute("foo", null) will result in an output like <div foo="null"> instead of <div foo="">.

The parseFromStream and parseFromBuffer methods of DOMParser as well as the serializeToStream method of XMLSerializer are now deprecated and no longer available on content. Those still work on chrome (or extension code).

XHR multipart support is now deprecated

Support for the multipart property and multipart/x-mixed-replace responses in XMLHttpRequest has been deprecated. This was a Firefox-only feature that was never standardized, therefore it will be removed from Firefox 22. Server-Sent Events, Web Sockets or inspecting responseText from progress events can be used instead.


The for loop has been virtually removed

While E4X has been deprecated and disabled from Firefox 17, the for statement, standardized as a part of that, has been left for backward compatibility. In Firefox 20, a change has been made to disable the statement unless Web developers explicitly specify JavaScript 1.6 and later like <script type="text/javascript;version=1.6">. You are recommended to replace with the for...of statement that are standardizing in ECMAScript 6.


The contentStyleType and contentScriptType properties have been removed

The implementation of the contentScriptType and contentStyleType properties has been removed from SVGSVGElement along with the removal from SVG2.

Document Tags and Contributors

Contributors to this page: teoli, kohei.yoshino
Last updated by: teoli,