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

Canvas-Verbesserungen

  • Der 2D-Zeichnungskontext des <canvas> unterstützt jetzt die Angabe eines ImageData-Objekts als Eingabe für die Methode createImageData(). Dies erstellt ein neues ImageData-Objekt mit denselben Abmessungen wie das angegebene Objekt, aber immer noch mit allen Pixeln, die auf transparentes Schwarz voreingestellt sind. Dies war bereits dokumentiert, aber nicht implementiert.
  • Das Angeben von nicht-endlichen Werten beim Hinzufügen von Farbverläufen über einen Aufruf der addColorStop()-Methode von CanvasGradient wirft jetzt korrekt INDEX_SIZE_ERR anstelle von SYNTAX_ERR.
  • Die Methode toDataURL() des HTMLCanvasElement verwendet nun korrekt Kleinbuchstaben für den angegebenen MIME-Typ, bevor ein Vergleich erfolgt.
  • getImageData() akzeptiert nun korrekt Rechtecke, die über die Grenzen der Leinwand hinausgehen; Pixel außerhalb der Leinwand werden als transparentes Schwarz zurückgegeben.
  • drawImage() und createImageData() handhaben negative Argumente nun gemäß der Spezifikation, indem sie das Rechteck um die entsprechende Achse spiegeln. Wir benötigen einen Artikel über CSS-Größen und wie dies funktioniert.
  • Bei der Angabe von nicht-endlichen Werten beim Aufrufen von createImageData() wird nun korrekt eine NOT_SUPPORTED_ERR-Ausnahme geworfen.
  • createImageData() und getImageData() geben nun korrekt mindestens ein Pixel Bilddaten zurück, wenn ein kleineres Rechteck als ein Pixel angegeben wird.
  • Wird ein negativer Radius beim Aufruf von createRadialGradient() angegeben, wird nun korrekt INDEX_SIZE_ERR geworfen.
  • Das Angeben eines null oder undefined Bildes beim Aufruf von createPattern() oder drawImage() führt nun korrekt zu einer TYPE_MISMATCH_ERR-Ausnahme.
  • Ungültige Werte für globalAlpha werfen keine SYNTAX_ERR-Ausnahme mehr; diese werden nun korrekt stillschweigend ignoriert.
  • Ungültige Werte beim Aufruf von translate(), transform(), rect(), clearRect(), fillRect(), strokeRect(), lineTo(), moveTo(), quadraticCurveTo() oder arc() werfen keine Ausnahme mehr; diese Aufrufe werden nun korrekt stillschweigend ignoriert.
  • Die Einstellung eines ungültigen Wertes für shadowOffsetX, shadowOffsetY oder shadowBlur wird nun stillschweigend ignoriert.
  • Die Einstellung eines ungültigen Wertes für rotate oder scale wird jetzt stillschweigend ignoriert.

CSS

CSS-Animationen

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

DOM

  • Die Methode modify() des Selection-Objekts wurde geändert, sodass die Granularität der "Wort"-Auswahl keine nachfolgenden Leerzeichen mehr einschließt; dies macht sie konsistenter über verschiedene Plattformen hinweg und entspricht dem Verhalten der WebKit-Implementierung.
  • Die Methoden setTimeout() und setTimeout() sind jetzt so begrenzt, dass sie nicht mehr als ein Timeout pro Sekunde in inaktiven Tabs senden. Zusätzlich wird nun verschachtelten Timeouts der kleinste von der HTML5-Spezifikation erlaubte Wert von 4 ms auferlegt (anstelle der früheren 10 ms).
  • Ähnlich dazu wird die Methode Window.setInterval() und WorkerGlobalScope.setInterval() ebenfalls auf nicht mehr als ein Intervall pro Sekunde in inaktiven Tabs begrenzt.
  • XMLHttpRequest unterstützt jetzt das loadend-Event für Fortschritts-Listener. Dieses wird gesendet, nachdem ein Transfer beendet ist (d.h. nach dem abort-, error- oder load-Ereignis). Sie können dies verwenden, um alle Vorgänge zu behandeln, die unabhängig vom Erfolg oder Misserfolg eines Transfers durchgeführt werden müssen.
  • Die slice()-Methode der Blob- und damit der File-Objekte wurde entfernt und durch eine neue, vorgeschlagene Syntax ersetzt, die es konsistenter mit den Methoden Array.slice() und String.slice() in JavaScript macht. Diese Methode heißt jetzt mozSlice().
  • Der Wert von Navigator.language wird nun ermittelt, indem der Wert des Accept-Language HTTP-Headers betrachtet wird.
  • Die Eigenschaft Element.prefix ist nun schreibgeschützt, wie es von der DOM-Spezifikation gefordert wird.
  • Das HTMLVideoElement unterstützt nun experimentelle Eigenschaften, um Informationen über Videostatistiken wie Bildraten zu erhalten.

JavaScript

  • Reguläre Ausdrücke können nicht mehr aufgerufen werden, als ob sie Funktionen wären; diese Änderung wurde in Zusammenarbeit mit dem WebKit-Team durchgeführt, um Kompatibilität zu gewährleisten (siehe WebKit bug 28285). Dieses Feature existierte schon lange, wurde aber nie dokumentiert (zumindest nicht hier auf MDC).
  • Die Methode Function.prototype.isGenerator() wird nun unterstützt; damit können Sie feststellen, ob eine Funktion ein Generator ist.
  • Die folgenden reservierten Wörter wurden zuvor nur im Strict-Modus als reserviert behandelt; jetzt werden sie immer als reserviert behandelt: class, enum, export, extends, import und super.
  • DOM-Dokumente, die im Chrome-Code erstellt werden, dürfen Skripten in einer Sandbox nicht mehr ausgesetzt werden.
  • Der JSON-Parser wurde neu geschrieben, um eine verbesserte Geschwindigkeit und Konformität zu erreichen. Dies umfasst auch eine Verbesserung für Firefox bug 572279.

SVG

  • Das SVG-Attribut class kann nun animiert werden.
  • Die folgenden SVG-bezogenen DOM-Schnittstellen, die Listen von Objekten darstellen, sind jetzt indizierbar und können wie Arrays angesprochen 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 nicht mehr den Keep-Alive HTTP-Header; wir haben ihn nicht korrekt formatiert, und er war redundant, da wir auch den Connection oder Proxy-Connection Header mit dem Wert "keep-alive" gesendet haben.
  • Das HTTP-Transaktionsmodell wurde aktualisiert, um intelligenter beim Wiederverwenden von Verbindungen in der persistenten Verbindungspool zu sein; anstatt den Pool als FIFO-Warteschlange zu behandeln, versucht Necko nun, den Pool so zu sortieren, dass Verbindungen mit dem größten Congestion Window (CWND) zuerst folgen. Dies kann die Rundreisezeit (RTT) von HTTP-Transaktionen verkürzen, indem häufig die Notwendigkeit vermieden wird, Verbindungen zu vergrößern.
  • Firefox behandelt nun die Content-Disposition HTTP-Response-Header effektiver, wenn sowohl die Parameter filename als auch filename* bereitgestellt werden; es werden alle bereitgestellten Namen durchgesehen, wobei der filename*-Parameter verwendet wird, falls einer verfügbar ist, selbst wenn zuerst ein filename-Parameter enthalten ist. Zuvor wurde der erste übereinstimmende Parameter verwendet, wodurch ein geeigneterer Name möglicherweise nicht verwendet wurde. Siehe Firefox bug 588781.

MathML

Entwicklerwerkzeuge

  • Das Web-Konsolen-Objekt Console hat nun eine debug()-Methode, die ein Alias für seine log()-Methode ist; dies verbessert die Kompatibilität mit bestimmten bestehenden Websites.

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

Für einen Leitfaden zur Aktualisierung Ihres Add-ons für Firefox 5 lesen Sie bitte Aktualisierung von Add-ons für Firefox 5.

Hinweis: Firefox 5 erfordert, dass binäre Komponenten neu kompiliert werden, ebenso wie alle größeren Firefox-Versionen. Siehe Binärkomponenten für Details.

Änderungen an JavaScript-Code-Modulen

Neue JavaScript-Code-Module

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

NetUtil.jsm

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

Schnittstellenänderungen

  • Die nsIHttpChannelInternal-Schnittstelle hat neue Attribute, die den Zugriff auf Informationen über die Adressen und Ports der Endpunkte der Kanäle ermöglichen. Diese Informationen werden hauptsächlich zu Debugging-Zwecken bereitgestellt.
  • Die Attribute width und height des <canvas>-Elements werden jetzt in IDL als vorzeichenlose Ganzzahlen anstelle von signierten Ganzzahlen 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 jetzt Firefox ohne eine mozconfig-Datei bauen; die --enable-application Einstellung hat jetzt standardmäßig den Wert "browser". Nach dem Herunterladen oder Klonen des Codes können Sie configure && make (oder make -f client.mk) ausführen, um Firefox zu bauen.

Siehe auch