Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Firefox 4 für Entwickler

Firefox 4, veröffentlicht am 22. März 2011, verbessert die Leistung, bietet mehr Unterstützung für HTML5 und andere sich entwickelnde Webtechnologien und verbessert die Sicherheit weiter. Dieser Artikel bietet Informationen über diese Version und welche Funktionen sowohl für Webentwickler, Add-on-Entwickler als auch Entwickler der Gecko-Plattform zur Verfügung stehen.

Funktionen für Webentwickler

Gecko verwendet jetzt den HTML5-Parser, der Fehler behebt, die Interoperabilität verbessert und die Leistung steigert. Er ermöglicht es auch, SVG und MathML direkt in das HTML-Markup einzubetten.

HTML

Webformulare

Ein Blick auf die Verbesserungen der Webformulare. Zu diesen Änderungen gehören neue Eingabetypen im <input>-Element, Datenvalidierung und mehr.

HTML5-Abschnitte

Gecko unterstützt jetzt die neuen HTML5-Elemente, die sich auf Abschnitte in einem Dokument beziehen: <article>, <section>, <nav>, <aside>, <hgroup>, <header> und <footer>.

HTML5 hidden-Attribut

Dieses Attribut, das allen Elementen gemeinsam ist, wird verwendet, um Inhalte auf einer Webseite zu verbergen, die derzeit für den Benutzer nicht relevant sind.

Andere HTML5-Elemente

Gecko unterstützt jetzt auch die folgenden neuen HTML5-Elemente: <mark>, <figure>, und <figcaption>.

WebSockets

Ein Leitfaden zur Verwendung der neuen WebSockets-API für die Echtzeitkommunikation zwischen einer Webanwendung und einem Server. Beachten Sie, dass WebSockets, wie in Firefox 4 implementiert, nicht mit dem endgültigen Standard kompatibel sind und im Allgemeinen nicht verwendet werden sollten.

Canvas-Verbesserungen

Die folgenden Änderungen wurden am CanvasRenderingContext2D-Interface vorgenommen, um unsere <canvas>-Implementierung näher an die Spezifikation heranzuführen:

  • Wenn ein negativer Radius beim Aufruf von arc() angegeben wird, wird nun korrekt eine INDEX_SIZE_ERR-Ausnahme ausgelöst.
  • Bei Angabe nicht-endlicher Werte beim Aufruf von createLinearGradient() und createRadialGradient() wird nun NOT_SUPPORTED_ERR statt SYNTAX_ERR ausgelöst.
  • Wenn miterLimit auf einen negativen Wert gesetzt wird, wird nun keine Ausnahme mehr ausgelöst, sondern nicht-positive Werte werden ordnungsgemäß ignoriert.
  • Wenn lineWidth auf einen negativen Wert gesetzt wird, wird keine Ausnahme mehr ausgelöst, sondern nicht-positive Werte werden ordnungsgemäß ignoriert.
  • Die putImageData()-Methode unterstützt jetzt die optionalen Parameter dirtyX, dirtyY, dirtyWidth und dirtyHeight.

Verschiedene HTML-Änderungen

  • <textarea>-Elemente sind jetzt standardmäßig größenveränderbar; Sie können die resize-CSS-Eigenschaft verwenden, um dies zu deaktivieren.
  • canvas.getContext und canvas.toDataURL werfen keine Ausnahme mehr, wenn sie mit nicht erkannten Argumenten aufgerufen werden.
  • Das <canvas>-Element unterstützt jetzt die Mozilla-spezifische mozGetAsFile()-Methode, mit der Sie eine speicherbasierte Datei erhalten können, die ein Bild des Inhalts der Leinwand enthält. Siehe HTMLCanvasElement für weitere Details.
  • Canvas2DContext.lineCap und Canvas2DContext.lineJoin werfen keine Ausnahme mehr, wenn sie auf einen nicht erkannten Wert gesetzt werden.
  • Canvas2DContext.globalCompositeOperation wirft keine Ausnahme mehr, wenn es auf einen nicht erkannten Wert gesetzt wird, und unterstützt den nicht-standardmäßigen Wert darker nicht mehr.
  • Die Unterstützung für das veraltete <spacer>-Element, das in allen anderen Browsern nicht vorhanden war, wurde entfernt.
  • Das <isindex>-Element, das durch den Aufruf von Document.createElement() erstellt wird, wird jetzt als einfaches Element ohne Eigenschaften oder Methoden erstellt.
  • Gecko unterstützt jetzt das Aufrufen von click() auf <input>-Elementen, um den Dateiauswahldialog zu öffnen. Siehe das Beispiel im Artikel Verwendung von Dateien aus Webanwendungen.
  • Das <input>-Element unterstützt ein neues mozactionhint-Attribut, mit dem Sie das Label für die Eingabetaste auf virtuellen Tastaturen festlegen können.
  • <script>-Elemente innerhalb von <iframe>, <noembed> und <noframes> werden jetzt ausgeführt, was in früheren Versionen von Firefox nicht der Fall war. Dies entspricht der Spezifikation und gleicht das Verhalten anderer Browser an.

CSS

CSS-Übergänge

Neue Unterstützung für CSS-Übergänge ist in Firefox 4 verfügbar.

Berechnete Werte in CSS

Unterstützung für -moz-calc wurde hinzugefügt. Damit können Sie <length>-Werte als mathematische Ausdrücke angeben.

Selektorgruppierung

Unterstützung für :-moz-any, um Selektoren zu gruppieren und Kombinatoren zu faktorisieren.

Unterstützung von Hintergrundbildunterrechtecken

Die -moz-image-rect()-Funktion ermöglicht es, Unterrechtecke von Bildern als background-image zu verwenden.

CSS-Toucheigenschaften

Unterstützung für Toucheigenschaften wurde hinzugefügt. Details und reale Artikelnamen folgen später.

Verwendung beliebiger Elemente als CSS-Hintergründe

Sie können die -moz-element-CSS-Funktion und die document.mozSetImageElement()-DOM-Funktion verwenden, um beliebige HTML-Elemente als Hintergrund zu verwenden.

Datenschutz und der :visited-Selektor

Es wurden Änderungen daran vorgenommen, welche Informationen über den Stil besuchter Links mit CSS-Selektoren abgerufen werden können. Dies kann einige Webanwendungen beeinflussen.

Neue CSS-Eigenschaften

Eigenschaft Beschreibung
-moz-font-feature-settings Ermöglicht die Anpassung fortgeschrittener Funktionen von OpenType-Schriftarten.
-moz-tab-size Gibt die Breite in Leerzeichenzeichen eines Tabzeichens (U+0009) beim Rendern von Text an.
resize Ermöglicht es, die Dimensionen zu steuern, in denen ein Element skalierbar ist.

Neue CSS-Pseudoklassen

Pseudoklasse Beschreibung
:-moz-handler-crashed Wird verwendet, um Elemente zu stylen, deren Plugins abgestürzt sind.
:-moz-placeholder Wird auf Platzhaltertext in Formularfeldern angewendet.
:-moz-submit-invalid Wird auf den Senden-Button in Formularen angewendet, wenn eines oder mehrere Felder des Formulars nicht gültig sind.
:-moz-window-inactive Wird auf Elemente in inaktiven Fenstern angewendet.
:invalid Wird automatisch auf <input>-Felder angewendet, wenn deren Inhalt ungültig ist.
:optional Wird automatisch auf <input>-Felder angewendet, die nicht das required-Attribut spezifizieren.
:required Wird automatisch auf <input>-Felder angewendet, die das required-Attribut spezifizieren.
:valid Wird automatisch auf <input>-Felder angewendet, wenn deren Inhalt erfolgreich validiert wird.

Neue CSS-Pseudoselektoren

Pseudoselektor Beschreibung
:-moz-focusring Ermöglicht es Ihnen, das Erscheinungsbild eines Elements anzugeben, wenn Gecko der Auffassung ist, dass eine Fokusanzeige gerendert werden sollte.

Neue CSS-Funktionen

Funktion Beschreibung
:-moz-any Ermöglicht es, Selektoren zu gruppieren und Kombinatoren zu faktorisieren.
-moz-calc Ermöglicht es, <length>-Werte als mathematische Ausdrücke anzugeben.
-moz-element Ermöglicht es, ein beliebiges Element als Hintergrund für background-image und background zu verwenden.
-moz-image-rect Ermöglicht es, ein Unterrechteck eines Bildes als background-image oder background zu verwenden.

Umbenannte CSS-Eigenschaften

Alter Name Neuer Name Anmerkungen
-moz-background-size background-size Der Name -moz-background-size wird nicht mehr unterstützt.
-moz-border-radius border-radius Der alte Name wird für eine begrenzte Zeit unterstützt, um Ihnen Zeit zu geben, Ihre Webseiten zu aktualisieren. Änderungen beim Rendern wurden ebenfalls vorgenommen, um der neuesten Version der Spezifikation zu entsprechen.
-moz-box-shadow box-shadow

Verschiedene CSS-Änderungen

  • Die text-shadow-Eigenschaft begrenzt jetzt den Unschärferadius aus Gründen der Vernunft und Leistung auf 300px.
  • Die overflow-Eigenschaft wird nicht mehr auf Tabellengrupenelemente (<thead>, <tbody>, und <tfoot>) angewendet.
  • Die -moz-appearance-Eigenschaft unterstützt jetzt den Wert -moz-win-borderless-glass, der einem Element ein rahmenloses Aero-Glas-Aussehen verleiht.
  • Die -moz-device-pixel-ratio-Medienfunktion wurde hinzugefügt, sodass das Verhältnis von Gerätepixeln pro CSS-Pixel in Medienabfragen verwendet werden kann.
  • Geckos Verarbeitung von CSS-<length>-Einheiten wurde überarbeitet, um besser mit anderen Browsern übereinzustimmen und absolute Längen genauer in Bildschirmpixelanzahlen basierend auf der DPI des Geräts zu übersetzen.

Grafik und Video

WebGL

Der sich entwickelnde WebGL-Standard wird jetzt von Firefox unterstützt.

Unterstützung für WebM-Video

Das neue offene WebM-Videoformat wird von Gecko 2.0 unterstützt.

SVG-Animation mit SMIL

Unterstützung für SMIL-Animation von SVG ist jetzt verfügbar.

Verwendung von SVG als Bilder und als CSS-Hintergründe

Sie können jetzt SVG mit dem <img>-Element sowie als CSS-background-image verwenden.

Unterstützung des Medien-Attributs buffered

Das buffered-Attribut auf <video>- und <audio>-Elementen wird jetzt unterstützt, sodass Sie feststellen können, welche Bereiche einer Mediendatei gepuffert wurden. Das TimeRanges-DOM-Interface wurde implementiert, um dies zu unterstützen.

Medien-Attribut preload

Das preload-Attribut aus der HTML5-Spezifikation wurde implementiert und ersetzt das vorher implementierte (und nicht mehr unterstützte) autobuffer-Attribut. Dies betrifft die <video>- und <audio>-Elemente sowie das nsIDOMHTMLMediaElement-Interface.

Verbesserungen der SVG-Textpositionierung

Sie können jetzt Listen für die Werte der Eigenschaften x, y, dx und dy auf SVG-<text>- und <tspan>-Elementen festlegen. Dies ermöglicht es, die Positionierung jedes Zeichens in einer Zeichenfolge individuell zu steuern.

DOM

JavaScript-Typed Arrays

Unterstützung für JavaScript-Typed Arrays wurde hinzugefügt; dies ermöglicht die Manipulation von Puffern, die Rohdaten enthalten, unter Verwendung nativer Datentypen. Mehrere APIs nutzen dies, darunter die File API, WebGL und WebSockets.

Ermittlung von Begrenzungsrechtecken für Bereiche

Das Range-Objekt hat jetzt die Methoden range.getClientRects() und range.getBoundingClientRect().

Erfassen von Mausereignissen auf beliebigen Elementen

Unterstützung für die von Internet Explorer stammenden setCapture()- und releaseCapture()-APIs wurde hinzugefügt. Siehe Firefox-Bug 503943.

Manipulation des Browserverlaufs

Das vorhandene Dokumentverlauf-Objekt, das über das window.history-Objekt verfügbar ist, unterstützt jetzt die neuen HTML5-Methoden pushState() und replaceState().

Animationen unter Verwendung von MozBeforePaint

Ein neues Ereignis wurde hinzugefügt, das in Verbindung mit der window.mozRequestAnimationFrame()-Methode und der window.mozAnimationStartTime-Eigenschaft eine Möglichkeit bietet, Animationen zu erstellen, die aufeinander abgestimmt sind.

Touch- und Multi-Touch-Ereignisse

Unterstützung für Touch- und Multi-Touch-Ereignisse wurde hinzugefügt.

DOM-Schnittstellen von HTML-Elementen haben sich geändert

Mehrere HTML-Elemente haben ihre DOM-Schnittstellen auf die in der HTML5-Spezifikation geforderten geändert, wie unten gezeigt.

Schnittstelle in Firefox 3.6 Schnittstelle in Firefox 4 HTML-Element
HTMLSpanElement HTMLElement <abbr>, <acronym>, <address>, <b>, <bdo>, <big>, <blink>, <center>, <cite>, <code>, <dd>, <dfn>, <dt>, <em>, <i>, <kbd>, <listing>, <nobr>, <plaintext>, <s>, <samp>, <small>, <strike>, <strong>, <sub>, <sup>, <tt>, <u>, <var>, <xmp>
HTMLDivElement HTMLElement <noembed>, <noframes>, <noscript>
HTMLWBRElement HTMLElement <wbr>

Verschiedene DOM-Änderungen

  • Das Umbruchverhalten eines <textarea>-Elements kann jetzt über das DOM gesteuert werden, über das wrap-DOM-Attribut. Firefox-Bug 41464
  • <script>-Elemente, die mit Document.createElement() erstellt und in ein Dokument eingefügt werden, verhalten sich nun standardmäßig gemäß der HTML5-Spezifikation. Skripte mit dem src-Attribut werden ausgeführt, sobald sie verfügbar sind (ohne Reihenfolge beizubehalten), und Skripte ohne das src-Attribut werden synchron ausgeführt. Um sicherzustellen, dass eingefügte Skripte mit dem src-Attribut in der Einfügereihenfolge ausgeführt werden, setzen Sie .async=false auf ihnen.
  • DOM File-Objekte bieten jetzt eine url-Eigenschaft.
  • FormData-Unterstützung für XMLHttpRequest.
  • Die HTMLElement.isContentEditable-Eigenschaft wurde implementiert.
  • Die Document.currentScript-Eigenschaft lässt Sie bestimmen, welches <script>-Elementscript derzeit ausgeführt wird. Die neuen beforescriptexecute und afterscriptexecute-Ereignisse werden vor und nach der Ausführung eines Skriptelements ausgelöst.
  • Die mozSourceNode-Eigenschaft wurde dem DataTransfer-Objekt hinzugefügt.
  • Die Selection.modify()-Methode wurde dem Selection-Objekt hinzugefügt; dies ermöglicht es Ihnen, die aktuelle Textauswahl oder die Cursorposition in einem Browserfenster einfach zu ändern.
  • Unterstützung für das window.directories-Objekt und das directories-Feature für window.open, die in keinem anderen Browser unterstützt werden, wurde entfernt. Verwenden Sie stattdessen personalbar. Firefox-Bug 474058
  • Die MouseEvent.mozInputSource-Eigenschaft wurde zu DOM-Benutzerschnittstellenereignissen hinzugefügt; diese nicht-standardmäßige Eigenschaft lässt Sie die Art des Geräts bestimmen, das ein Ereignis generiert hat.
  • Das Document-readystatechange-Ereignis wurde implementiert.
  • Die Document.createElement()-Methode akzeptiert in Quirks-Modus keine < und > um den Tag-Namen mehr.
  • Die Element.setCapture()- und Document.releaseCapture()-Methoden wurden hinzugefügt, sodass Elemente auch weiterhin Mausereignisse verfolgen, selbst wenn sich die Maus nach einem mousedown-Ereignis außerhalb ihres normalen Verfolgungsbereichs befindet.
  • Die window.mozPaintCount-Eigenschaft wurde hinzugefügt; sie gibt an, wie oft ein Dokument gerendert wurde. Dies kann nützlich sein, wenn Sie die Leistung Ihrer Webanwendung testen.
  • Der Sprach-Token wurde von Navigator.appVersion und Navigator.userAgent entfernt. Verwenden Sie stattdessen Navigator.language oder den Accept-Language-Header. Firefox-Bug 572656
  • Das XMLHttpRequest-Objekt gibt jetzt die Antwort sowohl als JavaScript-Typed Array als auch als String aus, unter Verwendung der Gecko-spezifischen mozResponseArrayBuffer-Eigenschaft.
  • Mausereignisse enthalten jetzt eine mozPressure-Eigenschaft, die den Druck auf unterstützten druckempfindlichen Eingabegeräten angibt.
  • Die URL.createObjectURL()- und URL.revokeObjectURL()-Methoden lassen Sie Objektulrs erstellen, die auf lokale Dateien verweisen.
  • Die DOMImplementation.createHTMLDocument()-Methode lässt Sie ein neues HTML-Dokument erstellen.
  • Node.mozMatchesSelector() wirft jetzt eine SYNTAX_ERR-Ausnahme aus, wenn der angegebene Selektorzeichenfolgen ungültig ist, anstelle falsch false zurückzugeben.
  • Sie können jetzt die SVG-Eigenschaftswerte eines Elements mit der gleichen Kurzsyntax wie bei CSS festlegen. Zum Beispiel: element.style.fill = 'lime'. Siehe style für Details.
  • Das Dokumentwurzel hat jetzt ein „privatebrowsingmode“-Attribut, das den Zustand des privaten Modus beschreibt, einschließlich eines Hinweises darauf, ob der private Modus für die Sitzung vorübergehend oder dauerhaft ist.
  • Der zweite Parameter der window.getComputedStyle()-Methode ist jetzt optional, genau wie in jedem anderen großen Browser.
  • Das DOM-Objekt StorageEvent entspricht jetzt der neuesten Version der Spezifikation.
  • Die minimal zulässige Verzögerung für die setTimeout()- und setTimeout()-Methoden ist jetzt eine Präferenz, dom.min_timeout_value.
  • Das MozAfterPaint-Ereignis wird standardmäßig nicht mehr gesendet, aufgrund eines möglichen Sicherheitsproblems. Es kann durch Setzen einer Präferenz wieder aktiviert werden.

Sicherheit

Content Security Policy (CSP)

Die Content Security Policy (CSP) ist ein Vorschlag von Mozilla, mit dem Webdesigner und Serveradministratoren festlegen können, wie Inhalte auf ihren Websites interagieren. Ziel ist es, Angriffe wie Cross-Site-Scripting und Dateninjektionsangriffe zu erkennen und zu mildern.

HTTP Strict Transport Security

HTTP Strict Transport Security ist eine Sicherheitsfunktion, die es einer Website ermöglicht, Browser mitzuteilen, dass sie nur über HTTPS und nicht über HTTP kommunizieren sollte.

Der X-FRAME-OPTIONS-Response-Header

Der von Internet Explorer 8 eingeführte X-FRAME-OPTIONS-HTTP-Response-Header wird jetzt von Firefox unterstützt. Damit können Webseiten angeben, ob ihre Seiten in Frames verwendet werden können und, falls ja, ob dies auf denselben Ursprung beschränkt werden soll.

User-Agent-String-Änderungen

Um die Menge an Daten und Entropie zu reduzieren, die in HTTP-Anfragen gesendet werden (siehe Firefox-Bug 572650), wurden die Kryptostärke- und Sprach-Token aus dem User-Agent-String entfernt.

JavaScript

Für einen Überblick über die in JavaScript 1.8.5 implementierten Änderungen siehe Neues in JavaScript 1.8.5. JavaScript in Firefox 4 wird zusätzliche Konformität mit dem ECMAScript 5-Standard besitzen.

Entwicklertools

Verwendung der Webkonsole

Das Tool Webkonsole ist eine nützliche Debug-Hilfe sowohl für Webentwickler als auch für Erweiterungsentwickler.

Hinweis: Die Fehlerkonsole ist ab Gecko 2.0 standardmäßig deaktiviert. Sie können sie wieder aktivieren, indem Sie die devtools.errorconsole.enabled-Einstellung auf true ändern und den Browser neu starten.

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

Für hilfreiche Tipps zum Aktualisieren bestehender Erweiterungen für Firefox 4 siehe Aktualisieren von Erweiterungen für Firefox 4. Es gibt mehrere wichtige Änderungen, die die Kompatibilität mit vorhandenen Add-ons brechen, achten Sie also darauf, diesen Artikel zu lesen.

Wenn Sie ein Theme-Entwickler sind, sollten Sie Änderungen an Themes in Firefox 4 lesen, um einige kritische Änderungen zu verstehen, die Sie beachten müssen.

JavaScript-Code-Module

Services.jsm

Das Services.jsm-Code-Modul bietet Getter, die es einfach machen, Referenzen auf häufig verwendete Dienste zu erhalten, wie z. B. den Voreinstellungsdienst oder den Fenstervermittler, unter anderem.

JS-ctypes API

Die JS-ctypes-API ermöglicht es, C-kompatible Bibliotheksfunktionen ohne Verwendung von XPCOM aufzurufen.

Add-ons-Manager

Der neue Add-ons-Manager bietet Informationen über installierte Add-ons, Unterstützung für deren Verwaltung und Möglichkeiten, Add-ons zu installieren und zu entfernen.

PopupNotifications.jsm

Das neue Popup-Benachrichtigungsmodul macht es einfach, attraktive, nicht-modale Benachrichtigungen an den Benutzer zu präsentieren. Sie können sehen, wie diese API verwendet wird in Verwendung von Popup-Benachrichtigungen.

Laden von Code-Modulen von chrome:-URLs

Sie können jetzt JavaScript-Code-Module mit chrome:-URLs laden, sogar in JAR-Dateien.

DownloadLastDir.jsm

Das DownloadLastDir.jsm-Code Modul bietet die globale Variable gDownloadLastDir, die einen Zeichenfolgen enthält, den Sie verwenden können, um den Pfad des Verzeichnisses zu erfahren, in das der letzte Download stattgefunden hat. Dieses Modul kümmert sich um private Browser-Probleme für Sie.

Messung der Leistung mit dem PerfMeasurement.jsm-Code-Modul

Das PerfMeasurement.jsm-Code-Modul bietet eine API, um CPU-Leistungsdaten in JavaScript-code zu messen.

Verschiedene Änderungen an Code-Modulen

  • Das NetUtil.jsm-Code-Modul bietet jetzt die Methode readInputStreamToString(), die es Ihnen ermöglicht, beliebige Bytes aus einem Stream in eine Zeichenfolge zu lesen, auch wenn der Stream Nullen enthält.
  • Das XPCOMUtils.jsm-Code-Modul bietet jetzt IterSimpleEnumerator()- und IterStringEnumerator()-Hilfsmittel zum Iterieren über XPCOM-Aufzählungen.
  • Sie können jetzt Arbeiter in JavaScript-Code-Modulen verwenden.

DOM-Änderungen

ChromeWorker

Ein neuer Arbeitertyp für privilegierten Code; dies erlaubt die Verwendung von Dingen wie js-ctypes von Arbeitern in Erweiterungen und Anwendungs-Code.

Touch-Ereignisse

Unterstützung für (nicht standardisierte) Touch-Ereignisse wurde hinzugefügt; diese ermöglichen es, mehrere Finger zu verfolgen, die gleichzeitig auf einem Touchscreen bewegt werden.

Weitere DOM-Änderungen

XUL

Änderungen am Tabbrowser-Element

Mehrere Änderungen wurden am <xul:tabbrowser>-Element vorgenommen, die Auswirkungen auf Erweiterungen haben, die mit Tabs interagieren. Neben der Unterstützung von App-Tabs werden durch diese Änderungen auch die Tab-Leiste in eine Standard-Toolbar umgewandelt, sodass der Benutzer Toolbar-Schaltflächen hineinziehen kann.

  • Die TabClose-, TabSelect- und TabOpen-Ereignisse steigen nicht mehr bis zum <xul:tabbrowser>-Element (gBrowser) auf. Ereignislistener für diese Ereignisse sollten zum gBrowser.tabContainer und nicht direkt zum gBrowser hinzugefügt werden.
  • Das Tab-Kontextmenü ist kein anonymes Kind des <xul:tabbrowser> mehr. Es kann daher direkt mit XUL-Overlays überlagert werden. Es kann auch direkter in JavaScript über gBrowser.tabContextMenu zugegriffen werden. Weitere Details finden Sie in diesem Blogartikel.
  • Die neue visibleTabs-Eigenschaft wurde hinzugefügt, um ein Array der derzeit sichtbaren Tabs zu erhalten; dies ermöglicht es Ihnen zu bestimmen, welche Tabs im aktuellen Tab-Set sichtbar sind. Dies wird zum Beispiel von Firefox Panorama verwendet.
  • Die neue Methode showOnlyTheseTabs wurde hinzugefügt; diese wird von Firefox Panorama verwendet.
  • Die neue Methode getIcon wurde hinzugefügt, die es Ihnen ermöglicht, das Favicon eines Tabs zu erhalten, ohne das <xul:browser>-Element zu durchsuchen.
  • Die neue tabbrowser.tabs-Eigenschaft wurde hinzugefügt, die es Ihnen einfach ermöglicht, eine Liste der Tabs in einem <xul:tabbrowser>-Element zu erhalten.
  • Die neuen Methoden pinTab und unpinTab ermöglichen es Ihnen, Tabs zu pinnen und zu entpinnen (d.h. sie zwischen App-Tabs und regulären Tabs umzuschalten).
  • Die Methode getTabModalPromptBox und das Attribut tabModalPromptShowing wurden zum <xul:tabbrowser> hinzugefügt, um tab-modale Alarme zu unterstützen.

Änderungen an Pop-ups

  • Das <xul:popup>-Element wird nicht mehr unterstützt; Sie sollten <xul:menupopup> stattdessen verwenden. (Wenn Sie popup weiterhin verwenden, stoßen Sie auf Fehler, da das Element keine besondere Bedeutung mehr hat. Zum Beispiel kann <xul:menuseparator> transparent erscheinen, wenn es in einem <xul:popup> verwendet wird.)
  • Das <xul:menupopup>-XUL-Element hat jetzt eine triggerNode-Eigenschaft, die das Knoten angibt, auf dem das Ereignis aufgetreten ist, das dazu geführt hat, dass das Pop-up geöffnet wurde. Dies erforderte auch die Hinzufügung eines trigger-Ereignisparameters zur openPopup-Methode. Außerdem wurde die anchorNode-Eigenschaft hinzugefügt; sie gibt den Anker zurück, der beim Erstellen des Pop-ups angegeben wurde.
  • Das <xul:panel>-Element bietet jetzt fade- und flip-Attribute, die verwendet werden, um das Verhalten neuer "Pfeil"-Stil-Benachrichtigungspaneele zu konfigurieren.

Unterstützung für Remote XUL wurde entfernt

Remote XUL wird nicht mehr unterstützt; dies betrifft XUL-Dokumente, die über HTTP bereitgestellt werden; zudem können XUL-Dokumente nicht mehr über file://-URLs geladen werden, es sei denn, Sie erstellen die Präferenz dom.allow_XUL_XBL_for_file und setzen sie auf true. Es gibt jedoch eine Whitelist-Funktion, mit der bestimmte Domains Remote XUL laden können.

Verschiedene XUL-Änderungen

  • Das readonly-Attribut funktioniert jetzt korrekt für XBL-Felder.
  • Das <xul:resizer>-Element lässt Sie jetzt das element-Attribut verwenden, um ein Element anzugeben, das verkleinert werden soll, anstatt das Fenster zu verkleinern.
  • Das <xul:resizer>-Element hat jetzt ein type-Attribut, das es Ihnen ermöglicht, anzugeben, dass der Resizer für ein Fenster anstelle eines Elements ist, um zu verhindern, dass der Fenster-Resizer zweimal gezeichnet wird.
  • Das "active"-Attribut wird auf aktiven XUL-Fenstern nicht mehr gesetzt. Stattdessen können Sie die neue :-moz-window-inactive-Pseudoklasse verwenden, um verschiedenen Hintergrundfenstern verschiedene Stile zuzuweisen.
  • Das emptytext-Attribut ist jetzt veraltet; Sie sollten stattdessen placeholder verwenden.
  • Das <xul:window>-Element bietet jetzt ein accelerated-Attribut; wenn true, darf der Hardware-Schichtmanager das Fenster beschleunigen.
  • Das <xul:stack>-Element unterstützt jetzt die Attribute bottom und right.
  • Ereignisse werden jetzt während der Anpassung des <xul:toolbox> ausgelöst, sodass Sie Änderungen an Toolbars erkennen können.
  • Das Attribut alternatingbackground für <xul:tree>-Elemente wird nicht mehr unterstützt; Sie können stattdessen die :-moz-tree-row-Pseudoklasse verwenden.
  • Der Überlaufknopf der Lesezeichen-Symbolleiste mit anonid chevronPopup ist nicht mehr anonym; er hat eine ID von "PlacesChevron".
  • Das <xul:tabs>-Element hat jetzt eine tabbox-Eigenschaft, die die alte _tabbox-Eigenschaft ersetzt, die veraltet ist (und nie dokumentiert war).
  • XUL <xul:window>-Elemente haben jetzt das drawintitlebar-Attribut; wenn dies true ist, umfasst der Inhaltsbereich des Fensters die Titelleiste, was das Zeichnen in die Titelleiste ermöglicht.
  • Neue TabPinned- und TabUnpinned-Ereignisse sind verfügbar, die es Ihnen ermöglichen zu erkennen, wann Tabs gepinnt und entpinnt werden.
  • Das neue TabAttrModified-Ereignis wird gesendet, wenn die label-, crop-, busy-, image- oder selected-Attribute eines Tabs geändert werden.
  • <xul:tab>-Elemente haben jetzt ein pinned-Attribut, das es Ihnen ermöglicht zu bestimmen, ob ein Tab derzeit gepinnt ist oder nicht.
  • Die setDirectionIndicator-Klasse auf <xul:tree>-Elementen hat seit einiger Zeit keine Funktion mehr; jetzt wird sie gar nicht mehr verwendet.
  • Das <xul:window>-Element hat jetzt ein chromemargin-Attribut, mit dem Sie den Rand zwischen Chrome und Inhalt an jeder Seite eines Fensters festlegen können; Sie können dies verwenden, um z. B. in die Titelleiste zu zeichnen.
  • Das <xul:window>-Element hat jetzt ein disablechrome-Attribut; dies wird verwendet, um den größten Teil des Chromes in einem Fenster zu verbergen, wenn es verwendet wird, um in-Browser-UI anzuzeigen, wie etwa about:addons.
  • Das <xul:window>-Element hat jetzt ein disablefastfind-Attribut, das es Ihnen ermöglicht, die Suchleiste in einem Fenster zu deaktivieren, wenn der Inhalt diese nicht unterstützt. Dies wird z. B. vom Add-ons-Panel verwendet.
  • Symbolleisten können jetzt extern zu Toolboxes sein, während sie weiterhin als Mitglied der <xul:toolbox> betrachtet werden, indem die toolboxid-Eigenschaft der <xul:toolbar> festgelegt wird. Außerdem hat das <xul:toolbox>-Element jetzt eine externalToolbars-Eigenschaft, die alle Symbolleisten aufführt, die als Mitglieder der Toolbox betrachtet werden.
  • Unterstützung für das Protokollieren von XUL-Vorlagen wurde für Debugging-Zwecke hinzugefügt.

UI-Änderungen, die Entwickler betreffen

Die Add-on-Leiste

Die Statusleiste wurde zugunsten der neuen Add-on-Leiste entfernt. Sie müssen Ihre Erweiterung aktualisieren, um diese zu verwenden, wenn Sie bisher UI in der Statusleiste hinzugefügt haben.

Browser-Chrome verstecken

Sie können jetzt das Browser-Chrome verbergen, wenn es wünschenswert ist; zum Beispiel tut about:addons dies.

Speicher

Verschiedene Änderungen an der Speicher-API

  • Das mozIStorageBindingParamsArray-Interface hat jetzt ein length-Attribut, das die Anzahl der mozIStorageBindingParams-Objekte in der Reihe angibt.
  • Die Methode mozIStorageStatement.bindParameters() gibt jetzt einen Fehler zurück, wenn das angegebene mozIStorageBindingParamsArray leer ist.
  • Die Methode mozIStorageConnection.clone() wurde hinzugefügt, wodurch Sie eine bestehende Datenbankverbindung klonen können.
  • Die Methode mozIStorageConnection.asyncClose() wurde hinzugefügt, wodurch Sie eine Datenbankverbindung asynchron schließen können; Sie geben einen Callback an, der benachrichtigt wird, wenn der Schließvorgang abgeschlossen ist.
  • Die Methode mozIStorageConnection.setGrowthIncrement() wurde hinzugefügt, mit der Sie angeben können, um wie viel eine Datenbankdatei pro Eintrag wachsen soll, um SQLite dabei zu helfen, die Fragmentierung zu reduzieren.
  • Der Fehler SQLITE_CONSTRAINT wird jetzt als NS_ERROR_STORAGE_CONSTRAINT statt als NS_ERROR_FAILURE gemeldet.

XPCOM

Zusätzlich zu den unten referenzierten spezifischen Änderungen ist es wichtig zu beachten, dass es keine gefrierte Schnittstellen mehr gibt. Alle Schnittstellen sind jetzt ungefroren, unabhängig davon, was die Dokumentation sagt. Wir werden die Dokumentation im Laufe der Zeit aktualisieren.

XPCOM-Änderungen in Gecko 2.0

Details über Änderungen an XPCOM, die die Kompatibilität mit Firefox 4 beeinflussen.

Components.utils.getGlobalForObject()

Diese neue Methode gibt das globale Objekt zurück, mit dem ein Objekt verknüpft ist; dies ersetzt einen häufigen Anwendungsfall des nun entfernten __parent__.

Places

  • Places-Abfrageergebnisse können jetzt von mehreren Beobachtern beobachtet werden, und Abfragen können asynchron ausgeführt werden. Dies bedeutet, dass es einige Änderungen an den nsINavHistoryResult-, nsINavHistoryQueryOptions- und nsINavHistoryContainerResultNode-Schnittstellen gegeben hat. Wesentlich ist, dass die nsINavHistoryResultViewer-Schnittstelle in nsINavHistoryResultObserver umbenannt wurde.
  • Einige neue Benachrichtigungen wurden hinzugefügt, um es dem Browser zu ermöglichen, den Herunterfahrprozess des Places-Dienstes zuverlässiger zu verfolgen. Von diesen sind die meisten nur für den internen Gebrauch, aber die places-connection-closed-Benachrichtigung ist verfügbar, um zu wissen, wann der Places-Dienst seinen Herunterfahrprozess abgeschlossen hat.
  • Der Ausgabearraygröße-Parameter von mehreren Places-Methoden ist jetzt optional.
  • Unterstützung für <menupopup type="places"> wurde entfernt. Stattdessen müssen Sie ein Menü manuell erstellen und mit Places-Informationen befüllen, anstatt dies für Sie erledigen zu lassen. Details finden Sie unter Anzeige von Places-Informationen mithilfe von Ansichten: Menüansicht.

Schnittstellenänderungen

  • Die nsIDocShell- und nsIWebBrowser-Schnittstellen haben jetzt ein neues isActive-Attribut, das zur Optimierung von Codepfaden für Dokumente verwendet wird, die derzeit nicht sichtbar sind.
  • Die nsIMemory-Methode nsIMemory.isLowMemory() ist veraltet. Sie sollten stattdessen "memory-pressure"-Benachrichtigungen verwenden, um auf Speichermangelsituationen zu achten.
  • Die API zur Bearbeitung von Umleitungen auf HTTP-Kanälen wurde geändert, um es zu ermöglichen, sie asynchron zu verarbeiten. Jeglicher Code, der die Umleitungsbearbeitung mit nsIChannelEventSink.onChannelRedirect() implementiert, muss aktualisiert werden, um nsIChannelEventSink.asyncOnChannelRedirect() zu verwenden. Dies akzeptiert einen Callback-Handler, der aufgerufen werden muss, wenn eine Umleitung erfolgreich abgeschlossen ist.
  • Die nsINavHistoryResultObserver.batching()-Methode wurde hinzugefügt, die es ermöglicht, Places-Operationen in Batchs zusammenzufassen, wodurch die Anzahl der empfangenen Update-Benachrichtigungen reduziert werden, was die Leistung verbessern kann, wenn Beobachter relativ umfangreiche Aufgaben (wie das Aktualisieren von Ansichten) durchführen.
  • Das seit langem veraltete nsIPref-Interface wurde schließlich entfernt. Wenn Sie noch nicht auf nsIPrefService umgestiegen sind, ist jetzt der richtige Zeitpunkt dafür.
  • Die nsISessionStore- und nsISessionStartup-Schnittstellen erhielten Änderungen, um die Bedarfswiederherstellung von Sitzungen zu unterstützen. Siehe die nsISessionStore.restoreLastSession()-Methode.
  • Die nsIPrincipal-Methoden nsIPrincipal.subsumes() und nsIPrincipal.checkMayLoad(), sowie deren origin-, csp- und URI-Attribute, sind jetzt aus dem Skript verfügbar; vorher waren sie nur aus dem nativen Code verfügbar.
  • Das nsIPrompt-Interface unterstützt jetzt tab-modale Warnungen; siehe Verwendung von tab-modalen Eingabeaufforderungen für Details.
  • Die nsIEffectiveTLDService.getPublicSuffixFromHost()-Methode lehnt jetzt Hostnamen, die mit einem Punkt (".") beginnen, korrekt ab.
  • Die Methode mozIJSSubScriptLoader.loadSubScript() hat jetzt ein optionales Argument, mit dem Sie die Zeichencodierung des Scripts angeben können; wenn keine angegeben wird, wird ASCII angenommen (wie immer angenommen wurde).
  • Die nsIAccessProxy-Schnittstelle wurde entfernt. Sie war ein Implementierungsdetail, das seine Nützlichkeit überlebt hat.
  • Die nsIContentView- und nsIContentViewManager-Schnittstellen wurden für Firefox Mobile hinzugefügt. Sie stellt eine scrollbaren Inhaltsansicht dar, deren Inhalte tatsächlich von einem separaten Prozess gezeichnet werden.
  • Die nsIDiskCacheStreamInternal-Schnittstelle wurde hinzugefügt.
  • Die nsIExternalURLHandlerService-Schnittstelle wurde hinzugefügt.
  • Die nsISyncJPAKE-Schnittstelle wurde hinzugefügt. Siehe Firefox-Bug 601645.
  • Die nsIINIParserWriter-Schnittstelle wurde in Gecko 1.9.2.4 zum Schreiben in INI-Dateien hinzugefügt.

Speicherverwaltung

Unfehlbare Speicherzuweisung

Mozilla bietet jetzt unfehlbare Speicherzuweiser, die garantiert nicht null zurückgeben. Sie sollten diesen Artikel lesen, um zu lernen, wie sie funktionieren und wie man ausdrücklich fallible versus unfehlbare Speicherzuweisung anfordert.

Weitere Änderungen

  • Die meisten der in Firefox enthaltenen Ressourcen wurden zu einem einzigen JAR-Archiv, omni.jar, zusammengefasst, was die Startleistung durch Reduzierung von E/A verbessert. Für Details lesen Sie Über omni.jar.
  • Die Präferenz accessibility.disablecache wird nicht mehr unterstützt; sie wurde nur für Debuggingzwecke ausgestellt und wird nicht mehr verwendet.
  • Add-ons, deren GUID zwischen Versionen wechselt, können jetzt korrekt aktualisiert werden.
  • Als Nebeneffekt der Entfernung von plattformspezifischen Verzeichnissen in Add-on-Bundles können Sie keine unterschiedlichen Standardvoreinstellungen mehr für jede Plattform bereitstellen.
  • Standardmäßig werden Erweiterungen bei der Installation nicht mehr entpackt, sondern direkt aus der XPI-Datei ausgeführt. Add-ons können das unpack-Property im Installationsmanifest verwenden, um das alte Verhalten auszuwählen. Erweiterungen, die Binärkomponenten, DLLs, die mithilfe von js-ctypes geladen werden, Such-Plugins, Wörterbücher und Fenstericons verwenden, müssen spezifizieren, dass sie entpackt werden müssen. Erweiterungen, die SQLite-Datenbanken erstellen, oder Dinge relativ zum Verzeichnis der Erweiterung dateisysteme übertragen, müssen möglicherweise auch ihren Code ändern.
  • Sie können jetzt Erweiterungen einbinden, die automatisch bei der Anwendungserstellung installiert werden in einem angepassten Firefox.

Weitere Änderungen

Es wird nur noch die root chrome.manifest Datei geladen

Es wird nur noch die root chrome.manifest-Datei geladen; wenn Sie sekundäre Manifestdateien laden müssen, können Sie den Befehl manifest in Ihrer root chrome.manifest-Datei verwenden, um sie zu laden.

Entfernte Gopher-Unterstützung

Das Gopher-Protokoll wird nicht mehr nativ unterstützt. Fortgesetzte Unterstützung ist über die OverbiteFF-Erweiterung verfügbar.

Verarbeitung von Ereignissen im Inhaltsprozess

Um das Auslagern von Prozessen und andere Mehrprozess-Funktionen zu unterstützen, wurde eine neue API eingeführt, um das Senden von Nachrichten über Prozesse hinweg zu unterstützen.

Bootstrapping-Erweiterungen

Sie können jetzt Erweiterungen erstellen, die installiert, deinstalliert und upgraded (oder downgraded) werden können, ohne einen Browser-Neustart zu erfordern.

Entferntes Standard-Plugin

Das Standard-Plugin wurde entfernt. Der Anwendungs-Plugins-Ordner wurde standardmäßig ebenfalls entfernt, jedoch besteht weiterhin Unterstützung für die Installation von Plugins über diesen Ordner. Siehe Firefox-Bug 533891.

Erweiterungsmanager ersetzt durch Add-on-Manager

nsIExtensionManager wurde durch den AddonManager ersetzt.

Kind-HWNDs werden nicht mehr verwendet

Firefox erstellt keine Kind-HWNDs mehr für seine interne Verwendung unter Windows. Wenn Sie eine Erweiterung geschrieben haben, die nativen Code verwendet, um diese HWNDs zu manipulieren, funktioniert Ihre Erweiterung nicht mehr auf Firefox 4. Sie müssen entweder die Verwendung von HWNDs einstellen oder Ihren Code, der auf HWNDs angewiesen ist, in einem NPAPI-Plugin verwenden. Das ist eine Menge Arbeit, also wenn Sie die direkte Verwendung von HWNDs vermeiden können, sollten Sie das tun.

Gestenänderungen

Die Drei-Finger-Aufwärts- und Abwärtsstreichgesten auf Touchpads wurden so geändert, dass sie standardmäßig die Firefox Panorama-Ansicht öffnen und schließen. Um diese in die vorherigen Scroll-zum-Top und Scroll-zum-Bottom-Befehle zu ändern, öffnen Sie about:config und setzen browser.gesture.swipe.down auf cmd_scrollBottom und browser.gesture.swipe.up auf cmd_scrollTop.