mozilla

Revision 469853 of Site Compatibility for Firefox 25

  • Revision slug: Mozilla/Firefox/Releases/25/Site_Compatibility
  • Revision title: Site Compatibility for Firefox 25
  • Revision id: 469853
  • Created:
  • Creator: kohei.yoshino
  • Is current revision? No
  • Comment

Revision Content

{{ draft() }}

Firefox 25 Aurora (pre-Beta) 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:

This list may be updated until the release of the final version on , so please check back later. Follow @FxSiteCompat on Twitter for further updates.

CSS

Regression: background images specified with -moz-element are not updated

CSS background images specified with the {{ cssxref("-moz-element") }} function are not updated when the {{ cssxref("background-image") }} of the source element is dynamically changed. This is a regression since Firefox 19, which will be fixed with Firefox 26.

DOM

DocumentTouch has been removed

The {{ domxref("DocumentTouch") }} interface has been removed due to the removal from the spec. The {{ domxref("DocumentTouch.createTouch", "createTouch") }} and {{ domxref("DocumentTouch.createTouchList", "createTouchList") }} methods have been moved to the {{ domxref("Document") }} interface.

GlobalObjectConstructor has been removed

The non-standard GlobalObjectConstructor interface has been removed.

The non-standard ImageDocument interface, as well as the BoxObject, TreeColumn, TreeColumns, TreeContentView, TreeSelection, XULControllers, XULTemplateBuilder and XULTreeBuilder interfaces are no longer available from Web content.

Various interfaces are no longer available on window

The following interfaces, including some non-standard XUL-related classes, are no longer exposed on the {{ domxref("window") }} object: {{ domxref("Contact") }}, {{ domxref("ContactManager") }}, {{ domxref("Counter") }}, {{ domxref("CryptoDialogs") }}, {{ domxref("CSSUnknownRule") }}, {{ domxref("DataErrorEvent") }}, {{ domxref("DocumentXBL") }}, {{ domxref("ElementCSSInlineStyle") }}, {{ domxref("EventListener") }}, {{ domxref("FontFace") }}, {{ domxref("FontFaceList") }}, {{ domxref("GeoGeolocation") }}, {{ domxref("GeoPosition") }}, {{ domxref("GeoPositionCallback") }}, {{ domxref("GeoPositionCoords") }}, {{ domxref("GeoPositionErrorCallback") }}, {{ domxref("GetUserMediaErrorCallback") }}, {{ domxref("GetUserMediaSuccessCallback") }}, {{ domxref("GlobalPropertyInitializer") }}, {{ domxref("HTMLByteRanges") }}, {{ domxref("JSWindow") }}, {{ domxref("LinkStyle") }}, {{ domxref("MediaQueryListListener") }}, {{ domxref("MozAlarmsManager") }}, {{ domxref("MozBrowserFrame") }}, {{ domxref("MozWakeLockListener") }}, {{ domxref("NSEditableElement") }}, {{ domxref("NSEvent") }}, {{ domxref("NSXPathExpression") }}, {{ domxref("Parser") }}, {{ domxref("PermissionSettings") }}, {{ domxref("Pkcs11") }}, {{ domxref("PushManager") }}, {{ domxref("RequestService") }}, {{ domxref("Serializer") }}, {{ domxref("StorageIndexedDB") }}, {{ domxref("StorageManager") }}, {{ domxref("ToString") }}, {{ domxref("WindowCollection") }}, {{ domxref("WindowInternal") }}, {{ domxref("WindowPerformance") }}, XULContainerElement, XULContainerItemElement, XULDescriptionElement, XULImageElement, XULLabelElement, XULMenuListElement, XULMultiSelectControlElement, XULRelatedElement, XULSelectControlElement, XULSelectControlItemElement, XULTextBoxElement and XULTreeElement.

Events in workers have been prefixed with Worker

In order to make normal DOM events work in Web workers, the current events in workers including {{ domxref("Event") }}, {{ domxref("MessageEvent") }}, {{ domxref("ErrorEvent") }} and {{ domxref("ProgressEvent") }} have been renamed to WorkerEvent, WorkerMessageEvent, WorkerErrorEvent and WorkerProgressEvent. This change is temporary. Once the Firefox back-end implementation is fixed, those events will be unprefixed again.

The geolocation property of the navigator object is now absent if the API is disabled

The Geolocation API implementation has been updated to comply with the spec. If the feature is not available, {{ domxref("window.navigator.geolocation") }} will return undefined instead of null, and "geolocation" in navigator will be false instead of true previously.

The following constants on the {{ domxref("IDBRequest") }}, {{ domxref("IDBTransaction") }} and {{ domxref("IDBCursor") }} interfaces have been removed due to the removal from the spec: IDBRequest.LOADING, IDBRequest.DONE, IDBTransaction.READ_ONLY, IDBTransaction.READ_WRITE, IDBTransaction.VERSION_CHANGE, IDBCursor.NEXT, IDBCursor.NEXT_NO_DUPLICATE, IDBCursor.PREV and IDBCursor.PREV_NO_DUPLICATE.

JavaScript

ES6 array methods have been added

As part of ECMAScript 6 support, the Array.find, Array.findIndex and Array.of methods have been added. Array.from will also be added soon. This may break some JavaScript libraries which are extending Array.prototype with their own methods. For now, at least one library, Sugar, is known to be affected. Sugar users should update to the latest version to avoid this conflict.

Proxy has been changed to be a function

The Proxy interface has been changed from an object to a function, and now it's callable without the new operator. You may have to care about this if you are using the typeof operator for a feature detection, as typeof Proxy returns "function".

yield without a value has been deprecated

The yield operator now cannot be used without an operand (its value). This change has been made to comply with the ECMAScript 6 spec, and you'll see a warning in the Web Console if no value is specified in your code.

Regression: proxyfied arrays without the get trap don't work properly

The Proxy object allows developers to proxyfy an object. All traps in the handler are optional, but starting with Firefox 21, proxyfied arrays without the get trap are not working properly. If the get trap not defined, Array.length returns 0 and the set trap doesn't get called. A workaround is to add the get trap even if it's not necessary in your code. This issue will be fixed with Firefox 26.

Regression: document.watch() throws a TypeError

Since Firefox 23, the non-standard watch method, which allows developers to observe changes made to object properties, throws a TypeError if the object is {{ domxref("Document") }}. A workaround is to use a Proxy. Note that watch and unwatch may be removed in the future, and you should avoid using those Firefox-specific methods.

Event Handling

preventDefault on keydown now cancels keypress

Previously, calling {{ domxref("event.preventDefault", "preventDefault") }} on a {{ event("keydown") }} event didn't cancel the following {{ event("keypress") }} event. It has been fixed to match the DOM Level 3 Events (D3E) spec as well as the behavior of other browsers.

Video/Audio

HTMLVideoElement.videoPlaybackQuality has been changed to a method

The videoPlaybackQuality attribute on the {{ domxref("HTMLVideoElement") }} interface has been changed to the getVideoPlaybackQuality method to follow the latest spec.

Revision Source

<p>{{ draft() }}</p>
<p>Firefox&nbsp;25 <a href="http://www.mozilla.org/en-US/firefox/aurora/">Aurora</a> (pre-Beta) was released on <time datetime="2013-08-09">August&nbsp;9, 2013</time>. 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.</p>
<p><strong>This article only explains the changes that may affect backward compatibility for Websites</strong>. For the other new features and changes, please read the following documents:</p>
<ul>
  <li><a href="http://www.mozilla.org/en-US/firefox/25.0a2/auroranotes/">Firefox&nbsp;25 Aurora Release Notes</a></li>
  <li><a href="/en-US/docs/Mozilla/Firefox/Releases/25">Firefox&nbsp;25 for developers</a></li>
</ul>
<p>This list may be updated until the release of the final version on <time datetime="2013-10-29">October&nbsp;29, 2013</time>, so please check back later. Follow <a href="https://twitter.com/FxSiteCompat">@FxSiteCompat</a> on Twitter for further updates.</p>
<section>
  <h2>CSS</h2>
  <section>
    <h3>Regression: background images specified with <code>-moz-element</code> are not updated</h3>
    <ul>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=909157">Bug&nbsp;909157 &ndash; -moz-element background fails to update after image reloads</a></li>
    </ul>
    <p>CSS background images specified with the {{ cssxref("-moz-element") }} function are not updated when the {{ cssxref("background-image") }} of the source element is dynamically changed. This is a regression since Firefox&nbsp;19, which will be fixed with Firefox&nbsp;26.</p>
  </section>
</section>
<section id="sect2">
  <h2 id="DOM">DOM</h2>
  <section id="sect4">
    <h3 id="DocumentTouch_has_been_removed"><code>DocumentTouch</code> has been removed</h3>
    <ul>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=897211">Bug&nbsp;897211 &ndash; Remove nsIDOMDocumentTouch</a></li>
    </ul>
    <p>The {{ domxref("DocumentTouch") }} interface has been removed due to the removal from the spec. The {{ domxref("DocumentTouch.createTouch", "createTouch") }} and {{ domxref("DocumentTouch.createTouchList", "createTouchList") }} methods have been moved to the {{ domxref("Document") }} interface.</p>
  </section>
  <section id="sect7">
    <h3 id="GlobalObjectConstructor_has_been_removed"><code>GlobalObjectConstructor</code> has been removed</h3>
    <ul>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=898136">Bug&nbsp;898136 &ndash; Remove nsIDOMGlobalObjectConstructor</a></li>
    </ul>
    <p>The non-standard <code>GlobalObjectConstructor</code> interface has been removed.</p>
  </section>
  <section id="sect8">
    <h3 id="ImageDocument_and_some_XUL-related_classes_have_been_removed"><code>ImageDocument</code> and some XUL-related classes have been removed</h3>
    <ul>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=885177">Bug&nbsp;885177 &ndash; Make window.ImageDocument ChromeOnly</a></li>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=898687">Bug&nbsp;898687 &ndash; Remove XULTreeBuilder from content</a></li>
    </ul>
    <p>The non-standard <code>ImageDocument</code> interface, as well as the <code>BoxObject</code>, <code>TreeColumn</code>, <code>TreeColumns</code>, <code>TreeContentView</code>, <code>TreeSelection</code>, <code>XULControllers</code>, <code>XULTemplateBuilder</code> and <code>XULTreeBuilder</code> interfaces are no longer available from Web content.</p>
  </section>
  <section id="sect9">
    <h3 id="Various_interfaces_are_no_longer_available_on_window">Various interfaces are no longer available on <code>window</code></h3>
    <ul>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=898817">Bug&nbsp;898817 &ndash; Stop exposing nsIDOM* interfaces on the global automatically</a></li>
    </ul>
    <p>The following interfaces, including some non-standard <a href="/en-US/docs/XUL">XUL</a>-related classes, are no longer exposed on the {{ domxref("window") }} object: {{ domxref("Contact") }}, {{ domxref("ContactManager") }}, {{ domxref("Counter") }}, {{ domxref("CryptoDialogs") }}, {{ domxref("CSSUnknownRule") }}, {{ domxref("DataErrorEvent") }}, {{ domxref("DocumentXBL") }}, {{ domxref("ElementCSSInlineStyle") }}, {{ domxref("EventListener") }}, {{ domxref("FontFace") }}, {{ domxref("FontFaceList") }}, {{ domxref("GeoGeolocation") }}, {{ domxref("GeoPosition") }}, {{ domxref("GeoPositionCallback") }}, {{ domxref("GeoPositionCoords") }}, {{ domxref("GeoPositionErrorCallback") }}, {{ domxref("GetUserMediaErrorCallback") }}, {{ domxref("GetUserMediaSuccessCallback") }}, {{ domxref("GlobalPropertyInitializer") }}, {{ domxref("HTMLByteRanges") }}, {{ domxref("JSWindow") }}, {{ domxref("LinkStyle") }}, {{ domxref("MediaQueryListListener") }}, {{ domxref("MozAlarmsManager") }}, {{ domxref("MozBrowserFrame") }}, {{ domxref("MozWakeLockListener") }}, {{ domxref("NSEditableElement") }}, {{ domxref("NSEvent") }}, {{ domxref("NSXPathExpression") }}, {{ domxref("Parser") }}, {{ domxref("PermissionSettings") }}, {{ domxref("Pkcs11") }}, {{ domxref("PushManager") }}, {{ domxref("RequestService") }}, {{ domxref("Serializer") }}, {{ domxref("StorageIndexedDB") }}, {{ domxref("StorageManager") }}, {{ domxref("ToString") }}, {{ domxref("WindowCollection") }}, {{ domxref("WindowInternal") }}, {{ domxref("WindowPerformance") }}, <code>XULContainerElement</code>, <code>XULContainerItemElement</code>, <code>XULDescriptionElement</code>, <code>XULImageElement</code>, <code>XULLabelElement</code>, <code>XULMenuListElement</code>, <code>XULMultiSelectControlElement</code>, <code>XULRelatedElement</code>, <code>XULSelectControlElement</code>, <code>XULSelectControlItemElement</code>, <code>XULTextBoxElement</code> and <code>XULTreeElement</code>.</p>
  </section>
  <section id="sect10">
    <h3 id="Events_in_workers_have_been_prefixed_with_Worker">Events in workers have been prefixed with <code>Worker</code></h3>
    <ul>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=887236">Bug&nbsp;887236 &ndash; prefix the current events in workers with "Worker"</a></li>
    </ul>
    <p>In order to make <a href="/en-US/docs/Web/Reference/Events">normal DOM events</a> work in <a href="/en-US/docs/Web/Guide/Performance/Using_web_workers">Web workers</a>, the current events in workers including {{ domxref("Event") }}, {{ domxref("MessageEvent") }}, {{ domxref("ErrorEvent") }} and {{ domxref("ProgressEvent") }} have been renamed to <code>WorkerEvent</code>, <code>WorkerMessageEvent</code>, <code>WorkerErrorEvent</code> and <code>WorkerProgressEvent</code>. This change is <strong>temporary</strong>. Once the Firefox back-end implementation is fixed, those events will be unprefixed again.</p>
  </section>
  <section id="sect11">
    <h3 id="The_geolocation_property_of_the_navigator_object_is_now_absent_if_the_API_is_disabled">The <code>geolocation</code> property of the <code>navigator</code> object is now absent if the API is disabled</h3>
    <ul>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=884921">Bug&nbsp;884921 &ndash; Align navigator.geolocation with spec</a></li>
    </ul>
    <p>The <a href="/en-US/docs/WebAPI/Using_geolocation">Geolocation API</a> implementation has been updated to comply with the spec. If the feature is not available, {{ domxref("window.navigator.geolocation") }} will return <code>undefined</code> instead of <code>null</code>, and <code>"geolocation" in navigator</code> will be <code>false</code> instead of <code>true</code> previously.</p>
  </section>
  <section id="sect12">
    <h3 id="Constants_of_some_IndexedDB-related_interfaces_have_been_removed">Constants of some IndexedDB-related interfaces have been removed</h3>
    <ul>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=887524">Bug&nbsp;887524 &ndash; Move IDBRequest to WebIDL</a></li>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=888598">Bug&nbsp;888598 &ndash; Move IDBTransaction to WebIDL</a></li>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=891944">Bug&nbsp;891944 &ndash; Move IDBCursor to WebIDL</a></li>
    </ul>
    <p>The following constants on the {{ domxref("IDBRequest") }}, {{ domxref("IDBTransaction") }} and {{ domxref("IDBCursor") }} interfaces have been removed due to the removal from the spec: <code>IDBRequest.LOADING</code>, <code>IDBRequest.DONE</code>, <code>IDBTransaction.READ_ONLY</code>, <code>IDBTransaction.READ_WRITE</code>, <code>IDBTransaction.VERSION_CHANGE</code>, <code>IDBCursor.NEXT</code>, <code>IDBCursor.NEXT_NO_DUPLICATE</code>, <code>IDBCursor.PREV</code> and <code>IDBCursor.PREV_NO_DUPLICATE</code>.</p>
  </section>
</section>
<section id="sect14">
  <h2 id="JavaScript">JavaScript</h2>
  <section id="sect15">
    <h3 id="ES6_array_methods_have_been_added">ES6 array methods have been added</h3>
    <ul>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=885553">Bug&nbsp;885553 &ndash; Implement ES6 Array.prototype.find and Array.prototype.findIndex</a></li>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=866849">Bug&nbsp;866849 &ndash; Implement ES6 Array.from and Array.of</a></li>
    </ul>
    <p>As part of <a href="/en-US/docs/Web/JavaScript/ECMAScript_6_support_in_Mozilla">ECMAScript&nbsp;6 support</a>, the <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find"><code>Array.find</code></a>, <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex"><code>Array.findIndex</code></a> and <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of"><code>Array.of</code></a> methods have been added. <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from"><code>Array.from</code></a> will also be added soon. This may break some JavaScript libraries which are extending <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype"><code>Array.prototype</code></a> with their own methods. For now, at least one library, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=903755">Sugar</a>, is known to be affected. Sugar users should update to the latest version to avoid this conflict.</p>
  </section>
  <section id="sect17">
    <h3 id="Proxy_has_been_changed_to_be_a_function"><code>Proxy</code> has been changed to be a function</h3>
    <ul>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=788172">Bug&nbsp;788172 &ndash; Proxy is not a function (typeof Proxy should be 'function')</a></li>
    </ul>
    <p>The <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy"><code>Proxy</code></a> interface has been changed from an object to a function, and now it's callable without the <a href="/en-US/docs/Web/JavaScript/Reference/Operators/new"><code>new</code></a> operator. You may have to care about this if you are using the <a href="/en-US/docs/Web/JavaScript/Reference/Operators/typeof"><code>typeof</code></a> operator for a feature detection, as <code>typeof Proxy</code> returns <code>"function"</code>.</p>
  </section>
  <section id="sect18">
    <h3 id="yield_without_a_value_has_been_deprecated"><code>yield</code> without a value has been deprecated</h3>
    <ul>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=885463">Bug&nbsp;885463 &ndash; Warn about 'yield' without operand</a></li>
    </ul>
    <p>The <a href="/en-US/docs/Web/JavaScript/Reference/Operators/yield"><code>yield</code></a> operator now cannot be used without an operand (its value). This change has been made to comply with the <a href="/en-US/docs/JavaScript/ECMAScript_6_support_in_Mozilla">ECMAScript&nbsp;6</a> spec, and you'll see a warning in the <a href="/en-US/docs/Tools/Web_Console">Web Console</a> if no value is specified in your code.</p>
  </section>
  <section>
    <h3>Regression: proxyfied arrays without the <code>get</code> trap don't work properly</h3>
    <ul>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=895223">Bug&nbsp;895223 &ndash; Can't JSON stringify a proxy to an array</a></li>
    </ul>
    <p>The <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy"><code>Proxy</code></a> object allows developers to <em>proxyfy</em> an object. All traps in the handler are optional, but starting with Firefox&nbsp;21, proxyfied arrays without the <code>get</code> trap are not working properly. If the <code>get</code> trap not defined, <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length"><code>Array.length</code></a> returns <code>0</code> and the <code>set</code> trap doesn't get called. A workaround is to add the <code>get</code> trap even if it's not necessary in your code. This issue will be fixed with Firefox&nbsp;26.</p>
  </section>
  <section>
    <h3>Regression: <code>document.watch()</code> throws a <code>TypeError</code></h3>
    <ul>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=903332">Bug&nbsp;903332 &ndash; document.watch() results in "TypeError: can't watch non-native objects of class Proxy"</a></li>
    </ul>
    <p>Since Firefox&nbsp;23, the non-standard <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/watch"><code>watch</code></a> method, which allows developers to observe changes made to object properties, throws a <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError"><code>TypeError</code></a> if the object is {{ domxref("Document") }}. A workaround is to use a <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy"><code>Proxy</code></a>. Note that <code>watch</code> and <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/unwatch"><code>unwatch</code></a> may be removed in the future, and you should avoid using those Firefox-specific methods.</p>
  </section>
</section>
<section id="sect20">
  <h2 id="Event_Handling">Event Handling</h2>
  <section id="sect21">
    <h3 id="preventDefault_on_keydown_now_cancels_keypress"><code>preventDefault</code> on <code>keydown</code> now cancels <code>keypress</code></h3>
    <ul>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=501496">Bug&nbsp;501496 &ndash; preventDefault on keydown does not cancel following keypress</a></li>
    </ul>
    <p>Previously, calling {{ domxref("event.preventDefault", "preventDefault") }} on a {{ event("keydown") }} event didn't cancel the following {{ event("keypress") }} event. It has been fixed to match the DOM Level&nbsp;3 Events (D3E) spec as well as the behavior of other browsers.</p>
  </section>
</section>
<section id="sect22">
  <h2 id="Video.2FAudio">Video/Audio</h2>
  <section id="sect32">
    <h3 id="HTMLVideoElement.videoPlaybackQuality_has_been_changed_to_a_method"><code>HTMLVideoElement.videoPlaybackQuality</code> has been changed to a method</h3>
    <ul>
      <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=889205">Bug&nbsp;889205 &ndash; Make HTMLVideoElement.videoPlaybackQuality a method</a></li>
    </ul>
    <p>The <code>videoPlaybackQuality</code> attribute on the {{ domxref("HTMLVideoElement") }} interface has been changed to the <code>getVideoPlaybackQuality</code> method to follow the latest spec.</p>
  </section>
</section>
Revert to this revision