Firefox 5 für Entwickler

Firefox 5, basierend auf Gecko 5.0, wurde am 21. Juni 2011 veröffentlicht. Dieser Artikel bietet Links zu Informationen über die Änderungen, die Entwickler in dieser Version betreffen.

Änderungen für Webentwickler

HTML

Verbesserungen der Canvas

  • Der 2D-Zeichenkontext der <canvas> unterstützt jetzt die Angabe eines ImageData-Objekts als Eingabe für die Methode createImageData(); dies erzeugt ein neues ImageData-Objekt, das mit denselben Dimensionen wie das angegebene Objekt initialisiert ist, wobei alle Pixel jedoch weiterhin auf transparentes Schwarz voreingestellt sind. Dies war bereits als implementiert dokumentiert, aber nicht umgesetzt.
  • Die Angabe von nicht-finiten Werten beim Hinzufügen von Farbverläufen durch einen Aufruf der addColorStop()-Methode des CanvasGradient löst jetzt korrekt INDEX_SIZE_ERR anstelle von SYNTAX_ERR aus.
  • Die Methode toDataURL() der HTMLCanvasElement wandelt den angegebenen MIME-Typ jetzt korrekt in Kleinbuchstaben um, bevor er abgeglichen wird.
  • getImageData() akzeptiert jetzt korrekt Rechtecke, die über die Grenzen der Canvas hinausreichen; Pixel außerhalb der Canvas werden als transparentes Schwarz zurückgegeben.
  • drawImage() und createImageData() gehen jetzt mit negativen Argumenten gemäß der Spezifikation um, indem das Rechteck um die entsprechende Achse gespiegelt wird. Wir benötigen einen Artikel über CSS-Größenanpassung und wie dies funktioniert.
  • Die Angabe von nicht-finiten Werten beim Aufrufen von createImageData() löst jetzt ordnungsgemäß eine NOT_SUPPORTED_ERR-Ausnahme aus.
  • createImageData() und getImageData() geben jetzt korrekt mindestens ein Pixel Bilddaten zurück, wenn ein Rechteck kleiner als ein Pixel angegeben ist.
  • Die Angabe eines negativen Radius beim Aufrufen von createRadialGradient() löst jetzt korrekt INDEX_SIZE_ERR aus.
  • Die Angabe eines null- oder undefined-Bildes beim Aufrufen von createPattern() oder drawImage() löst jetzt korrekt eine TYPE_MISMATCH_ERR-Ausnahme aus.
  • Die Angabe ungültiger Werte für globalAlpha löst keine SYNTAX_ERR-Ausnahme mehr aus; diese werden jetzt korrekt stillschweigend ignoriert.
  • Die Angabe ungültiger Werte beim Aufrufen von translate(), transform(), rect(), clearRect(), fillRect(), strokeRect(), lineTo(), moveTo(), quadraticCurveTo() oder arc() löst keine Ausnahme mehr aus; diese Aufrufe werden jetzt korrekt stillschweigend ignoriert.
  • Das Setzen des Wertes von shadowOffsetX, shadowOffsetY oder shadowBlur auf einen ungültigen Wert wird jetzt stillschweigend ignoriert.
  • Das Setzen des Wertes von rotate oder scale auf einen ungültigen Wert wird jetzt stillschweigend ignoriert.

CSS

CSS-Animationen

Unterstützung für CSS-Animationen wurde hinzugefügt, vorerst mit dem -moz- Präfix.

DOM

  • Die Methode modify() des Selection-Objekts wurde so geändert, dass die "word"-Granularität der Auswahl keine nachgestellten Leerzeichen mehr einschließt; dies macht es plattformübergreifend konsistenter und entspricht dem Verhalten der WebKit-Implementierung.
  • Die Methoden setTimeout() und setTimeout() sind jetzt so angepasst, dass sie in inaktiven Tabs nicht mehr als ein Timeout pro Sekunde senden. Außerdem werden verschachtelte Timeouts jetzt auf den kleinsten Wert eingeklammert, der von der HTML5-Spezifikation erlaubt ist: 4 ms (anstatt der bisher verwendeten 10 ms).
  • Ebenso werden die Methoden Window.setInterval() und WorkerGlobalScope.setInterval() in inaktiven Tabs auf nicht mehr als ein Intervall pro Sekunde eingeklammert.
  • XMLHttpRequest unterstützt jetzt das loadend Ereignis für Fortschritts-Listener. Dieses wird gesendet, nachdem ein Transfer abgeschlossen ist (d.h. nach dem abort, error oder load Ereignis). Sie können dies verwenden, um Aufgaben zu behandeln, die unabhängig vom Erfolg oder Misserfolg eines Transfers durchgeführt werden müssen.
  • Die slice()-Methode der Blob und, in der Erweiterung, der File-Objekte wurde entfernt und durch eine neue, vorgeschlagene Syntax ersetzt, die sie konsistenter mit den Array.slice() und String.slice()-Methoden in JavaScript macht. Diese Methode heißt vorerst mozSlice().
  • Der Wert von Navigator.language wird jetzt bestimmt, indem der Wert des Accept-Language HTTP-Headers betrachtet wird.
  • Die Eigenschaft Element.prefix ist jetzt schreibgeschützt, wie von der DOM-Spezifikation gefordert.
  • Das HTMLVideoElement unterstützt jetzt experimentelle Eigenschaften, um Informationen über Video-Wiedergabe-Statistiken wie Bildraten zu erhalten.

JavaScript

  • Reguläre Ausdrücke sind nicht länger aufrufbar, als wären sie Funktionen; diese Änderung wurde in Zusammenarbeit mit dem WebKit-Team vorgenommen, um die Kompatibilität zu gewährleisten (siehe WebKit bug 28285). Dieser Feature existierte schon lange, war aber nie dokumentiert (zumindest nicht hier auf MDC).
  • Die Methode Function.prototype.isGenerator() wird jetzt unterstützt; damit können Sie feststellen, ob eine Funktion ein Generator ist.
  • Die folgenden reservierten Wörter wurden zuvor nur als reserviert behandelt, wenn sie im Strict-Modus verwendet wurden; jetzt werden sie immer als reserviert behandelt: class, enum, export, extends, import, und super.
  • DOM-Dokumente, die im Chrome-Code erstellt wurden, können möglicherweise nicht mehr an sandboxed Scripts weitergegeben werden.
  • Der JSON-Parser wurde für verbesserte Geschwindigkeit und Konformität neu geschrieben. Dies schließt eine Behebung für Firefox Bug 572279 ein.

SVG

  • Das class SVG-Attribut kann jetzt animiert werden.
  • Die folgenden SVG-bezogenen DOM-Interfaces, die Listen von Objekten darstellen, sind jetzt indizierbar und können wie Arrays zugegriffen werden; zusätzlich haben sie eine length-Eigenschaft, die die Anzahl der Elemente in den Listen angibt: SVGLengthList, SVGNumberList, SVGPathSegList und SVGPointList.

HTTP

  • Firefox sendet den Keep-Alive HTTP-Header nicht mehr; wir haben ihn nicht korrekt formatiert, und er war überflüssig, da wir auch den Connection oder Proxy-Connection Header mit dem Wert "keep-alive" gesendet haben.
  • Das HTTP-Transaktionsmodell wurde aktualisiert, um intelligenter bei der Wiederverwendung von Verbindungen im persistenten Verbindungspool zu sein; anstatt den Pool als FIFO-Warteschlange zu behandeln, versucht Necko jetzt den Pool mit Verbindungen mit dem größten Stau-Fenster (CWND) zuerst zu sortieren. Dies kann die Round-Trip-Zeit (RTT) von HTTP-Transaktionen reduzieren, indem es in vielen Fällen das Wachstum der Verbindungen-Fenster vermeidet.
  • Firefox verarbeitet jetzt den Content-Disposition HTTP-Response-Header effektiver, wenn sowohl die filename als auch die filename* Parameter bereitgestellt werden; es werden alle bereitgestellten Namen durchgesehen und der filename* Parameter verwendet, wenn einer verfügbar ist, selbst wenn ein filename Parameter zuerst enthalten ist. Zuvor wurde der erste übereinstimmende Parameter verwendet, was verhinderte, dass ein geeignetere Name verwendet werden konnte. Siehe Firefox Bug 588781.

MathML

Entwicklerwerkzeuge

  • Das Webkonsole Console-Objekt hat jetzt eine debug()-Methode, die ein Alias für die log()-Methode ist; dies verbessert die Kompatibilität mit bestimmten bestehenden Webseiten.

Änderungen für Mozilla- und Add-on-Entwickler

Für einen Leitfaden zur Aktualisierung Ihres Add-ons für Firefox 5, siehe Aktualisierung von Add-ons für Firefox 5.

Hinweis: Firefox 5 erfordert, dass binäre Komponenten neu kompiliert werden, wie es bei allen Hauptversionen von Firefox der Fall ist. Siehe Binäre Schnittstellen für Details.

Änderungen an JavaScript-Code-Modulen

Neue JavaScript-Code-Module

  • Das Code-Modul Dict.jsm wurde hinzugefügt; es bietet eine API für Wörterbücher von Schlüssel/Wert-Paaren.

NetUtil.jsm

  • Die asyncFetch()-Methode unterstützt jetzt die Angabe der Eingabequelle als nsIInputStream.

Schnittstellenänderungen

  • Die Schnittstelle nsIHttpChannelInternal hat neue Attribute, die Zugang zu Informationen über die Adressen und Ports der Endpunkte der Kanäle gewähren. Diese Informationen werden hauptsächlich für Debugging-Zwecke bereitgestellt.
  • Die Attribute width und height des <canvas>-Elements werden jetzt im IDL als unsigned Integers anstelle von signed Integers reflektiert (siehe HTMLCanvasElement).
  • Die Schnittstellen nsIAppStartup2 und nsIAppStartup_MOZILLA_2_0 wurden in die nsIAppStartup-Schnittstelle zusammengeführt.
  • Die Schnittstelle nsIDocShell_MOZILLA_2_0_BRANCH wurde in die nsIDocShell-Schnittstelle zusammengeführt.
  • Die Schnittstelle nsIFocusManager_MOZILLA_2_0_BRANCH wurde in die nsIFocusManager-Schnittstelle zusammengeführt.
  • Die Schnittstelle nsIHTMLEditor_MOZILLA_2_0_BRANCH wurde in die nsIHTMLEditor-Schnittstelle zusammengeführt.

Neue Schnittstellen

Entfernte Schnittstellen

Die folgenden Schnittstellen waren Implementierungsdetails, die nicht mehr benötigt werden:

Debugging-Hilfen

  • Der neue DebugOnly<T> Helfer ermöglicht es, Variablen nur für DEBUG-Builds zu deklarieren.

JavaScript-API (SpiderMonkey)

Änderungen im Build-System

  • Sie können Firefox jetzt ohne eine mozconfig-Datei bauen; die --enable-application-Einstellung ist jetzt standardmäßig auf "browser" gesetzt. Nach dem Herunterladen oder Klonen des Codes können Sie configure && make (oder make -f client.mk) verwenden, um Firefox zu bauen.

Siehe auch