Site Compatibility for Firefox 29

by 2 contributors:

Firefox 29 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.

HTML

<input type="number"> has been implemented

The <input> element now supports the number type introduced with HTML5. At least 2 regressions from this change have been found, due to the addition of a spinner control. Page authors can hide the spinner using CSS -moz-appearance: textfield if needed. It's not part of any spec but works along with -webkit-appearance: none for Chrome.

Obsolete features have been dropped from <pre>

The cols and width attributes of the <pre> element are no longer supported in Firefox. The former attribute was a non-standard extension derived from Netscape Navigator, the latter was in the HTML4 spec but removed from HTML5.

CSS

box-sizing has been unprefixed

The box-sizing property has been unprefixed. While -moz-box-sizing will be left for a reasonable period of time, developers are encouraged to use the unprefixed property instead.

Incorrect padding implementation on <textarea> has been fixed

Firefox's incorrect implementation of padding on the <textarea> element has been fixed to resolve a longstanding browser compatibility issue, as this screenshot shows. Now padding spaces are added inside the scrollbar and resizer controls, instead of outside, to match with the CSS spec and other browsers' behavior.

The padding will be included in the clientWidth, clientHeight, scrollWidth and scrollHeight properties of the element. A side effect of this change has been found on eBay where the height of a message textarea is programmatically expanded while typing.

DOM

cloneNode and importNode has defaulted to shallow clones

The Node.cloneNode and document.importNode methods take the boolean deep argument. It was optional in the DOM4 specification, and if omitted, these methods acted as if the value of deep was true. But this behavior has been changed in the latest spec, and if omitted, the methods will act as if the value was false. The implementation has been changed in Firefox 29, and a shallow clone is now default instead of a deep clone. Firefox 28 warned developers in console not to omit the argument both for the backward and forward compatibility.

HTMLIFrameElement.sandbox now returns DOMSettableTokenList

Previously, the sandbox property of the HTMLIFrameElement interface (the <iframe> element) returned a string value like allow-same-origin. This type has been changed to DOMSettableTokenList to meet the latest spec. sandbox.value returns a string notation as before.

KeyboardEvent.key values have been changed

The KeyboardEvent.key implementation has been updated for the latest DOM3 Events spec, and key values have been changed accordingly. For example, "Spacebar" becomes " " while "Add" becomes "+". Also, printable, generic keys now return the actual characters instead of "MozPrintableKey". Read the document for details.

Note that the legacy KeyboardEvent.charCode, KeyboardEvent.keyCode and KeyboardEvent.which properties are deprecated, and developers should consider using KeyboardEvent.key once the spec and implementation become stable.

window._content, controllers, pkcs11 and LoadStatus have been removed

As part of the ongoing effort to standardize global objects, some properties have been removed from window. The _content property is no longer available from Web content in favor of window.content. The window.pkcs11 property has returned null since Firefox 3.0.14 for security reasons. The non-standard controllers property and LoadStatus interface are also no longer available on window.

Update: Apps using Eclipse Remote Application Platform (RAP) have to update the code since the framework was using the removed window.controllers property to detect Firefox. Since window.controllers is still widely used for the same user agent detection purpose, the property has been added back to Firefox 30.

Enter key on <select> no longer fires the keypress event (regression)

The <select> element without the multiple attribute no longer fires the keypress event when the Enter key is pressed, to avoid an unintentional form submission. This issue has been fixed with Firefox 30. Developers can instead observe the keydown event to do the same thing.

ProgressEvent.lengthComputable returns false during a file upload (regression)

The ProgressEvent.lengthComputable property used to monitor XMLHttpRequest progress events returns false while uploading a local file on Firefox 29, even when it should return true. This regression, found on eBay Picture Uploader, has been fixed with Firefox 30.

JavaScript

Generator now returns IteratorResult instead of throwing

The ECMAScript 6 compliant syntax for Generators (yield) has been introduced with Firefox 26. The implementation has been updated for the latest spec, and a completed generator function now returns an IteratorResult object like { value: undefined, done: true } instead of throwing a TypeError. This behavior matches the iterator of the Array, Map and Set interfaces, that the implementation has been updated with Firefox 27.

ParallelArray has been removed

ParallelArray, an experimental feature introduced with Firefox 17 and disabled with Firefox 22 in the Beta, Release and ESR channels, has been removed in favor of ParallelJS (PJS). PJS is still under developement and currently only available in the Nightly channel.

Regex with 999998+ groups now raises an InternalError (regressions reported)

Starting with Firefox 29, regular expressions with more than 999998 groups will not work, rather raise an InternalError say "an error occurred while executing regular expression". This change aims to improve both performance and security by preventing the counters from being overflowed. See Egor Homakov's blog post for details.

Regressions from this change have been reported that some specific regular expressions wrongly cause an InternalError where the regex previously claimed "no match" even if they should be matched. It has been discovered that the trim function in older versions of jQuery is also affected. This issue has been fixed with Firefox 30.

toLocaleString may return different values than before

Date.toLocaleString, Date.toLocaleDateString, Date.toLocaleTimeString, Number.toLocaleString, String.localeCompare have been reimplemented to support the ECMAScript Internationalization API. Those methods are implementation-dependent if the arguments are omitted, thus results you'll get might be different than the value returned by the previous versions of Firefox.

Formerly Date.toLocaleString, Date.toLocaleDateString and Date.toLocaleTimeString returned the system date and time, but now the format is different depending on the browser locale. Number.toLocaleString will return localized digits specified by the OS, while the previous versions of Firefox returned English digits. String.localeCompare may return 1 or -1 where previously 2 or -2 was returned.

WebGL

moz-webgl context requests are no longer supported

The support for retrieving a WebGL context from a Canvas using the obsolete moz-webgl name has been removed. Use the standard webgl context instead as described in Getting started with WebGL.

texSubImage2D fails on float textures (regression)

The texSubImage2D method on the WebGLRenderingContext interface fails when it is used to update float textures created with the OES_texture_float extension, throwing an error: "format or type doesn't match the existing texture". This issue has been fixed with Firefox 31.

MathML

displaystyle is no longer inherited from the root <math> element

The implementation of the displaystyle attribute has been refactored to adhere to the spec. displaystyle on the <mtable> element is no longer inherited from the root <math> element. If the attribute is not present, it is considered as false, the default value of displaystyle. See the default stylesheet how it works.

Security

Per-domain Configurable Security Policies are no longer available

Configurable Security Policies (CAPS) of Firefox allows users to customize their browser's advanced security settings and have different policies for different sites. Though CAPS has no user interface, advanced or enterprise users can add some hidden preferences to control various capabilities. The per-domain policy of CAPS has been removed from Firefox 29 except the script blocking (the NoScript extension offers the UI).

In order to respond to demands of enterprise users, the localfilelinks policy has been restored with Firefox 30. This allows users to follow links on a Web page (http:// or https://) to the local file system (file:///) especially on corporate internal applications. For the meantime, Firefox Beta or the caps-fileuri extension created by a Mozilla developer can be used to workaround this restriction.

The removal of allowclipboard policy support broke the copy/paste buttons on some rich text editors like CKEditor. The standard Clipboard API's click-to-copy support will be implemented in the near future. The general keyboard shortcuts, Ctrl+C and Ctrl+V, should always work.

Networking

HTTP connections now have a response timeout

Firefox has enabled a timeout to drop HTTP connections, except XMLHttpRequest and SPDY sessions, if the response takes too long. The initial value is 300 seconds or 5 minutes. If your application is processing large data and affected by this change, you can change the value of the network.http.response.timeout preference to a larger number via about:config.

Printing

PDF is printed as a blank page

When you print PDF files using Firefox's built-in PDF viewer called PDF.js, the printer outputs a blank page. This regression has been fixed with Firefox 29.0.1.

Miscellaneous

A minimum width has been set for the browser window

To avoid a potential UI clipping issue with the new Australis theme introduced with Firefox 29, a minimum width has been set for the Firefox desktop browser window. This size is 425px on OS X and 390px on other platforms. If you were resizing the window to test your mobile site, the convenient Responsive Design View can be used instead. The minimum width is not applied to pop-up windows, so this shouldn't affect content display.

Document Tags and Contributors

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