Firefox 8 für Entwickler

Firefox 8 wurde am 8. November 2011 veröffentlicht. Dieser Artikel bietet Informationen sowohl für Webentwickler als auch für Add-on- und Mozilla-Projektentwickler, um die Funktionen dieser Version voll auszunutzen.

Änderungen für Webentwickler

HTML

  • Die crossOrigin-Eigenschaft des HTMLImageElement wurde hinzugefügt und das crossorigin-Attribut wurde dem <img>-Element hinzugefügt. (siehe Firefox-Bug 664299)
  • Die Methode HTMLSelectElement.add() unterstützt jetzt entweder ein Element oder den Index eines Elements, vor dem das neue Element eingefügt werden soll. Zuvor wurde nur ein Element unterstützt. (siehe Firefox-Bug 666200)
  • Der HTMLIsIndexElement-Konstruktor wurde entfernt. Kein Element hat diese Schnittstelle seit vor Firefox 4 implementiert.
  • Das HTML5-Feature "Kontextmenü" (contextmenu-Attribut), das es Ihnen ermöglicht, benutzerdefinierte, elementspezifische Elemente zum nativen Kontextmenü hinzuzufügen, wird jetzt unterstützt (die Implementierung ist noch experimentell und wartet auf Änderungen in der Spezifikation; siehe Firefox-Bug 617528).
  • Unterstützung für das HTMLElement.accessKeyLabel-Attribut wurde allen Elementen hinzugefügt.
  • Die <input>- und <textarea>-Elemente unterstützen jetzt das selectionDirection-Attribut, und ihre setSelectionRange()-Methoden wurden aktualisiert, um optional eine Richtung angeben zu können.
  • Die meisten Elemente erhalten jetzt einen Fokus-Ring, wenn sie durch das tabindex-Attribut fokussierbar gemacht wurden und der Benutzer das Element dann fokussiert.
  • In einer Gruppe von verschachtelten <label>-Elementen lösen Klickereignisse nicht mehr mehrere <label>-Elemente aus, was früher dazu führte, dass Firefox nicht mehr reagierte (siehe Firefox-Bug 646157).

DOM

  • Die Methode insertAdjacentHTML wurde implementiert.
  • BlobBuilder hat jetzt eine getFile()-Methode, die den Inhalt des Blobs als Datei zurückgibt.
  • Die Schnittstelle FileReaderSync (Teil der FileAPI) wurde implementiert.
  • Ereignisbehandlung in verschachtelten <label>s wurde behoben.
  • Sie können jetzt window.postMessage() verwenden, um File- und FileList-Objekte zwischen Fenstern zu übertragen.
  • Beim Bearbeiten von contenteditable-Bereichen kehrt das Verlassen einer Überschrift durch Drücken der Eingabetaste oder das Verlassen des Listenbearbeitungsmodus durch zweimaliges Drücken der Eingabetaste jetzt zum Absatzmodus (das heißt Absätze innerhalb von <p> Blöcken) zurück, anstatt Zeilen durch <br>-Elemente zu trennen.
  • Ein Fehler wurde behoben, der verhinderte, dass die Ausrichtung korrekt wirkte, wenn sie auf die erste Zeile in einem contenteditable-Bereich angewendet wurde.
  • Ein Fehler wurde behoben, der dazu führte, dass das Drücken von Löschen oder Rücktaste am Anfang eines contenteditable-Bereichs den vorherigen contenteditable Block betraf, wenn einer vorhanden ist.
  • Document.getSelection() gibt jetzt dasselbe Selection-Objekt zurück wie window.getSelection(), anstatt es zu stringifizieren.
  • Das HTML5 selectionDirection-Attribut ermöglicht es, die Richtung der Auswahl in einem bearbeitbaren Text zu definieren.
  • HTMLMediaElement hat jetzt eine seekable-Eigenschaft, die ein TimeRanges-Objekt zurückgibt.
  • Das Attribut HTMLMediaElement.preload spiegelt jetzt korrekt als aufzählbarer Wert wider.
  • Die crossOrigin-Eigenschaft hat standardmäßig den Wert "Anonymous", wenn ein ungültiger Wert verwendet wird.
  • navigator.cookieEnabled gibt jetzt korrekte Informationen zurück, wenn die Standardeinstellung für Cookies standortbezogen überschrieben wird.

JavaScript

  • RegExp.exec() und RegExp.test() ohne Argumente aufgerufen, vergleichen sich jetzt mit dem String "undefined".
  • String.search() und String.match() ohne Argumente oder mit undefined rufen jetzt den leeren String ab und vergleichen somit jeden String.
  • Unterstützung für Beobachtungslisten wurde mit den neuen (nicht standardisierten) Methoden watch() und unwatch() implementiert.

CSS

  • <resolution> akzeptiert jetzt <number>, nicht nur <integer>-Werte gemäß der Spezifikation.
  • Silbentrennregeln wurden für viele neue Sprachen hinzugefügt, wenn hyphens verwendet wird.
  • Die Behandlung von background-size wurde überarbeitet, um näher an der Spezifikation zu liegen.
  • In der Vergangenheit hatte text-decoration im Quirks-Modus die Linienstärke und -position für untergeordnete Texte angepasst, um dem Nachkommen zu entsprechen. Jetzt sind Render-Modus und Quirks-Modus ähnlicher.
  • Die horizontale Positionierung von Elementen wurde in vielen Fällen mehr an die Spezifikation angepasst. Die Dokumentation dazu folgt, aber bis dahin siehe Firefox-Bug 682780, Kommentar 23 für Details.
  • SVG-Bilder werden jetzt korrekt skaliert wenn sie als Hintergrundbilder verwendet werden.

Netzwerk

  • Doppelte Anführungszeichen werden nicht länger als Trennzeichen für RFC 2231 oder RFC 5987 Kodierungen akzeptiert, gemäß diesen RFCs.
  • Der MIME-Header-Feldparser (Content-Disposition) erfordert jetzt ein "=" in Parametern.
  • Skripte werden nicht mehr heruntergeladen, wenn JavaScript deaktiviert ist.
  • SSL 2.0 wird nicht mehr unterstützt.

WebSockets

  • Die Methode send() des WebSocket-Objekts gibt nicht mehr fälschlicherweise einen Boolean-Wert zurück.
  • Die Methode close() des WebSocket-Objekts entspricht jetzt dem aktuellen Entwurf des Standards und Abschlussereignisse verwenden jetzt die CloseEvent-Schnittstelle korrekt.
  • Das extensions-Attribut des WebSocket-Objekts wird jetzt unterstützt.
  • Der WebSocket-Konstruktor unterstützt jetzt ein Array von Protokollen sowie einen einzelnen Protokollstring.
  • Mischinhalte sind mit WebSockets nicht erlaubt; das heißt, Sie können keine Verbindung zu einem nicht sicheren WebSocket-Server von sicheren Inhalten aus öffnen.
  • Verbindungsfehler mit WebSockets lösen jetzt den onerror-Handler aus.
  • Die WebSocket-API wurde auf den neuesten Entwurf der Spezifikation aktualisiert (siehe Firefox-Bug 674890, Firefox-Bug 674527 und Firefox-Bug 674716).
  • Die Deflate-Stream-Erweiterung für WebSockets wurde deaktiviert; sie wurde veraltet und beeinträchtigte die Kompatibilität mit einigen Seiten.

WebGL

  • Cross-Domain-Texturen können jetzt mit CORS-Zulassung erlaubt werden.
  • Cross-Prozess-Rendering mit Direct2D/Direct3D 10.

MathML

  • Unterstützung für das displaystyle-Attribut auf dem obersten <math>-Element wurde hinzugefügt.
  • Die Interpretation negativer Zeilennummern für das align-Attribut auf <mtable> wurde korrigiert.

Entwicklerwerkzeuge

  • Das console Objekt hat eine neue Methode dir(), die eine interaktive Liste der Eigenschaften eines angegebenen Objekts anzeigt.

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

Siehe Aktualisieren von Add-ons für Firefox 8 für einen Leitfaden zu den Änderungen, die wahrscheinlich erforderlich sind, um Ihre Add-ons mit Firefox 8 kompatibel zu machen.

Hinweis: Firefox 8 erfordert eine Neukompilierung von Binärkomponenten, wie alle Hauptversionen von Firefox.

XPCOM

Components.utils

Die neuen Methoden Components.utils.createObjectIn() und Components.utils.makeObjectPropsNormal() wurden erstellt, um das Erstellen von Objekten in bestimmten Umgebungen zu erleichtern.

Weitere XPCOM-bezogene Änderungen

  • Sie können jetzt DOM File-Objekte vom Komponentencode aus instanziieren, indem Sie "new File" verwenden, anstatt ein nsIDOMFile direkt zu instanziieren.
  • Der Array-Typ nsTPtrArray wurde entfernt. Seine Funktionalität ist jetzt vollständig auf nsTArray verfügbar, das jetzt die Methode SafeElementAt() bietet, wenn es mit einem Zeigertyp instanziiert wird.

Workers

Es ist nicht mehr möglich, auf XPCOM-Objekte von ChromeWorkers aus zuzugreifen. XPConnect wurde in Worker-Kontexten seit Firefox-Bug 649537 deaktiviert.

XUL

  • Ein Fehler in document.execCommand(), der auftrat, wenn es auf den Wert von contentDocument angewendet wurde, wurde behoben. Seit Firefox 3 hat dies zu Fehlern geführt, anstatt korrekt zu funktionieren.
  • Bootstrap-Add-ons können jetzt Chrome mit einer chrome.manifest-Datei laden.
  • XUL-Bilder verkleinern sich jetzt mit demselben Verhältniss in beide Richtungen, wenn maximale Größen angegeben werden.

Änderungen am Buildsystem

  • Die folgenden Build-Konfigurationsoptionen wurden entfernt:

    • --enable-timeline
    • --disable-storage
    • --necko-disk-cache
  • Beim Kompilieren von IDL-Dateien in Header wird die Header-Datei jspubtd.h automatisch inkludiert, wenn nötig. Manuelle Einbindungen von jspubtd.h und/oder jsapi.h in IDL-Dateien, die jsval oder [implicit_jscontext] verwenden, sind nicht mehr erforderlich.

Chrome-Registrierung

  • Das platformversion-Flag kann in der chrome.manifest verwendet werden, um die Gecko-Version-Kompatibilität anzugeben.

Schnittstellenänderungen

  • Die Methode mozIJSSubScriptLoader.loadSubScript() lädt jetzt Skripte aus dem Start-Cache, wenn möglich.
  • Das Attribut ownerWindow wurde aus der nsIAccessNode-Schnittstelle entfernt.
  • Die nsIDOMStorageWindow-Schnittstelle wurde mit der nsIDOMWindow-Schnittstelle zusammengeführt.
  • Alle Mitglieder der nsIDOMWindowInternal-Schnittstelle wurden in die nsIDOMWindow-Schnittstelle verschoben. Die Schnittstelle selbst (ohne Mitglieder) bleibt für Kompatibilität bis Firefox 9 verfügbar.
  • Um die Leistung zu verbessern, wurde die Callback-Behandlung für asynchrone Aktualisierungen der Places-Datenbank geändert. Siehe die neuen Methoden mozIVisitInfoCallback.handleResult() und mozIVisitInfoCallback.handleError(), die die alte Methode für sowohl Fehler- als auch Erfolgskonditionen ersetzen.
  • Das KIND_MAPPED-Attribut von nsIMemoryReporter wurde zugunsten von KIND_NONHEAP veraltet, neue Einheitstypen UNITS_COUNT_CUMULATIVE und UNITS_PERCENTAGE wurden hinzugefügt.
  • Die nsIMemoryReporterManager-Schnittstelle hat ein neues explicit-Attribut, das die Gesamtgröße expliziter Speicherzuweisungen meldet.
  • Die nsIMemoryReporterManager-Schnittstelle hat ein neues resident-Attribut, das die Menge des verwendeten physischen Speichers meldet.
  • Die nsINetworkLinkService-Schnittstelle hat ein neues Attribut, linkType. Dieses Attribut gibt den Typ der verwendeten Netzwerkverbindung an. Alle Betriebssysteme geben derzeit LINK_TYPE_UNKNOWN zurück. Die Android-Unterstützung wurde aufgrund wahrgenommener Sicherheitsbedenken zurückgezogen.
  • Die nsISelection2-Schnittstelle wurde mit der nsISelectionPrivate-Schnittstelle zusammengeführt.
  • Die nsISelection3-Schnittstelle wurde mit der nsISelection-Schnittstelle zusammengeführt.
  • Das nsISessionStartup-Attribut state ist jetzt ein jsval anstelle eines Strings, aus Leistungsgründen.
  • Das nsIDocShell-Attribut isActive ist jetzt false für minimierte Fenster.
  • Die Methode nsIDownloadHistory.addDownload() speichert jetzt das Ziel, wo der Download auf dem lokalen Dateisystem gespeichert wird.

Entfernte Schnittstellen

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

  • nsITimelineService
  • nsIDOMHTMLIsIndexElement

Die nsIWorkerFactory-Schnittstelle wurde ebenfalls entfernt. Arbeiter können weiterhin mit den Konstruktoren Worker und ChromeWorker erstellt werden.

Weitere Änderungen

  • Wenn ein Fenster minimiert, wiederhergestellt oder zwischen Vollbild und Fenstermodus gewechselt wird, erhält es ein sizemodechange-Ereignis.
  • Sie können jetzt die Präferenz extensions.autoDisableScopes verwenden, um die automatische Installation von Add-ons aus bestimmten Add-on-Installationspfaden zu deaktivieren.
  • Die neue Eigenschaft mozSyntheticDocument auf Document-Objekten ermöglicht es Ihnen zu bestimmen, ob ein Dokument synthetisch ist (das heißt, etwas wie ein eigenständiges Bild, Video oder Audiodatei) anstatt ein vollständiges, standardmäßiges DOM-Dokument. Dies kann nützlich sein, zum Beispiel wenn Sie in dieser Situation eine unterschiedliche Benutzeroberfläche präsentieren möchten (wie das Hinzufügen kontextabhängiger Elemente, abhängig von diesem Fall).
  • Sie können jetzt einen Filter angeben, wenn Sie about:config öffnen; zum Beispiel zeigt about:config?filter=sessionstore nur Sitzungsbezogene Voreinstellungen an.