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 optimal nutzen zu können.

Änderungen für Webentwickler

HTML

  • Die HTMLImageElement crossOrigin Eigenschaft wurde hinzugefügt und das crossorigin Attribut wurde dem <img> Element hinzugefügt. (siehe Firefox Fehler 664299)
  • Die HTMLSelectElement.add() Methode unterstützt nun entweder ein Element oder den Index eines Elements, vor dem das neue Element eingefügt werden soll. Zuvor unterstützte sie nur ein Element. (siehe Firefox Fehler 666200)
  • Der HTMLIsIndexElement Konstruktor wurde entfernt. Kein Element hat diese Schnittstelle seit vor Firefox 4 implementiert.
  • Die HTML5 „Kontextmenü“-Funktion (contextmenu Attribut), die es ermöglicht, benutzerdefinierte, element-spezifische Elemente zu einem nativen Kontextmenü hinzuzufügen, wird nun unterstützt (die Implementierung ist noch experimentell und wartet auf Änderungen in der Spezifikation; siehe Firefox Fehler 617528).
  • Unterstützung für das HTMLElement.accessKeyLabel Attribut wurde zu allen Elementen hinzugefügt.
  • Die <input> und <textarea> Elemente unterstützen nun das selectionDirection Attribut, und ihre setSelectionRange() Methoden wurden aktualisiert, um optional eine Richtung anzugeben.
  • Den meisten Elementen wird nun ein Fokus-Ring gezeichnet, wenn sie durch das tabindex Attribut fokussierbar gemacht wurden und der Benutzer das Element dann fokussiert.
  • In einem Satz von verschachtelten <label> Elementen lösen Klickereignisse keine mehrfachen <label> Elemente mehr aus, was in der Vergangenheit dazu führte, dass Firefox nicht mehr reagierte (siehe Firefox Fehler 646157).

DOM

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

JavaScript

  • RegExp.exec() und RegExp.test(), die ohne Argumente aufgerufen werden, stimmen jetzt mit dem String "undefined" überein.
  • String.search() und String.match(), die ohne Argumente oder undefined aufgerufen werden, stimmen jetzt mit dem leeren String überein und treffen daher auf jeden String zu.
  • Unterstützung für Watchlists wurde mit den neuen (nicht-standardmäßigen) Methoden watch() und unwatch() implementiert.

CSS

  • <resolution> akzeptiert jetzt <number>, nicht nur <integer> Werte gemäß der Spezifikation.
  • Hyphenationsregeln wurden für viele neue Sprachen hinzugefügt, wenn hyphens verwendet wird.
  • Die Behandlung von background-size wurde überarbeitet, um der Spezifikation näher zu kommen.
  • In der Vergangenheit hatte text-decoration im Quirks-Modus die Dicke und Position der Linie an den Nachkommen-Text angepasst, um den Nachkommen abzustimmen. Jetzt sind die Darstellungen im Standards- und Quirks-Modus ähnlicher.
  • Die horizontale Positionierung von Elementen wurde in vielen Fällen mehr an die Spezifikation angeglichen. Dokumentation darüber folgt noch, aber für jetzt siehe Firefox Fehler 682780, Kommentar 23 für Details.
  • SVG-Bilder werden nun korrekt skaliert, wenn sie als Hintergrundbilder verwendet werden.

Netzwerk

  • Doppelte Anführungszeichen werden nicht mehr als Trennzeichen für RFC 2231 oder RFC 5987 Kodierung akzeptiert, gemäß diesen RFCs.
  • Der MIME-Header-Feld-Parser (Content-Disposition) erfordert nun "=" in den Parametern.
  • Skripts werden nicht mehr heruntergeladen, wenn JavaScript deaktiviert ist.
  • SSL 2.0 wird nicht mehr unterstützt.

WebSockets

  • Die WebSocket Objekt Methode send() gibt nicht mehr fälschlicherweise einen Booleschen Wert zurück.
  • Die WebSocket Objekt Methode close() stimmt jetzt mit dem aktuellen Entwurf des Standards überein und Schließe-Ereignisse verwenden jetzt korrekt die CloseEvent Schnittstelle.
  • Das WebSocket Objekt Attribut extensions wird nun unterstützt.
  • Der WebSocket-Konstruktor unterstützt nun ein Array von Protokollen sowie einen einzelnen Protokoll-String.
  • Gemischte Inhalte sind bei WebSockets nicht erlaubt; das bedeutet, dass Sie keine Verbindung zu einem unsicheren WebSocket-Server von sicheren Inhalten aus öffnen können.
  • Verbindungsfehler bei WebSockets lösen jetzt den onerror Handler aus.
  • Die WebSocket API wurde auf den neuesten Entwurf der Spezifikation aktualisiert (siehe Firefox Fehler 674890, Firefox Fehler 674527 und Firefox Fehler 674716).
  • Die Deflate-Stream-Erweiterung für WebSockets wurde deaktiviert; sie wurde veraltet und verursachte Kompatibilitätsprobleme mit einigen Seiten.

WebGL

  • Cross-Domain-Texturen können nun mit CORS-Zustimmung erlaubt werden.
  • Cross-Process-Rendering mit Direct2D/Direct3D 10.

MathML

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

Entwickler-Tools

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

Änderungen für Entwickler von Mozilla und Add-ons

Siehe Aktualisierung von Add-ons für Firefox 8 für einen Leitfaden zu Änderungen, die Sie wahrscheinlich vornehmen müssen, um Ihre Add-ons mit Firefox 8 kompatibel zu machen.

Hinweis: Firefox 8 erfordert, dass Binärkomponenten neu kompiliert werden, ebenso wie alle Hauptversionen von Firefox.

XPCOM

Components.utils

Die neuen Methoden Components.utils.createObjectIn() und Components.utils.makeObjectPropsNormal() wurden erstellt, um es einfacher zu machen, Objekte in spezifischen Compartments zu erstellen.

Weitere XPCOM-bezogene Änderungen

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

Worker

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

XUL

  • Ein Fehler in document.execCommand(), der auftrat, wenn es auf den Wert von contentDocument angewendet wurde, wurde behoben. Seit Firefox 3 führte dies zu Fehlern, anstatt korrekt zu funktionieren.
  • Bootstrapped Add-ons können jetzt Chrome mit einer chrome.manifest Datei laden.
  • XUL-Bilder schrumpfen jetzt in beiden Richtungen im gleichen Verhältnis, wenn maximale Größen angegeben werden.

Änderungen am Build-System

  • Die folgenden Build-Konfigurationsoptionen wurden entfernt:

    • --enable-timeline
    • --disable-storage
    • --necko-disk-cache
  • Beim Kompilieren von IDL-Dateien zu Headern wird die Header-Datei jspubtd.h automatisch hinzugefügt, wenn nötig. Manuelle Inklusionen 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 im chrome.manifest verwendet werden, um die Gecko-Kompatibilitätsversion anzugeben.

Schnittstellenänderungen

  • Die Methode mozIJSSubScriptLoader.loadSubScript() lädt nun Skripte aus dem Startup-Cache, sofern möglich.
  • Das Attribut ownerWindow wurde aus der nsIAccessNode Schnittstelle entfernt.
  • Die nsIDOMStorageWindow Schnittstelle wurde in die nsIDOMWindow Schnittstelle integriert.
  • Alle Mitglieder der nsIDOMWindowInternal Schnittstelle wurden in die nsIDOMWindow Schnittstelle verschoben. Die Schnittstelle selbst (ohne Mitglieder) bleibt bis Firefox 9 für die Kompatibilität verfügbar.
  • Um die Leistung zu verbessern, wurde die Callback-Behandlung für asynchrone Places-Datenbank-Updates geändert. Siehe die neuen Methoden mozIVisitInfoCallback.handleResult() und mozIVisitInfoCallback.handleError(), die die alte Einzelmethode für sowohl Fehler- als auch Erfolg-Zustandbehandlungen ersetzen.
  • Das KIND_MAPPED Attribut von nsIMemoryReporter wurde zugunsten von KIND_NONHEAP veraltet, neue Einheitentypen UNITS_COUNT_CUMULATIVE und UNITS_PERCENTAGE wurden hinzugefügt.
  • Die nsIMemoryReporterManager Schnittstelle hat ein neues explicit Attribut, das die Gesamtgröße der expliziten 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 Netzwerkverbindung an. Alle Betriebssysteme geben derzeit LINK_TYPE_UNKNOWN zurück. Die Android-Unterstützung wurde aufgrund wahrgenommener Sicherheitsbedenken zurückgesetzt.
  • Die nsISelection2 Schnittstelle wurde in die nsISelectionPrivate Schnittstelle integriert.
  • Die nsISelection3 Schnittstelle wurde in die nsISelection Schnittstelle integriert.
  • Das nsISessionStartup Attribut state ist jetzt ein jsval anstatt eines Strings, aus Leistungsgründen.
  • Das nsIDocShell Attribut isActive ist jetzt false für minimierte Fenster.
  • Die nsIDownloadHistory.addDownload() Methode speichert jetzt das Ziel, wo der Download im 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. Worker können weiterhin mit den Worker und ChromeWorker Konstruktoren erstellt werden.

Sonstige Änderungen

  • Wenn ein Fenster minimiert, wiederhergestellt oder zwischen Vollbild- und Fenstermodus gewechselt wird, erhält es ein sizemodechange Ereignis.
  • Sie können jetzt die extensions.autoDisableScopes Präferenz verwenden, um die automatische Installation von Add-ons von bestimmten Add-on-Installationsorten zu deaktivieren.
  • Die neue mozSyntheticDocument Eigenschaft auf Document Objekten erlaubt Ihnen zu bestimmen, ob ein Dokument synthetisch ist (d.h. etwas wie ein eigenständiges Bild, Video oder Audiodatei), anstatt ein vollständiges, standardmäßiges DOM-Dokument. Dies kann nützlich sein, wenn Sie beispielsweise eine andere Benutzeroberfläche in dieser Situation präsentieren möchten (wie z. B. das Hinzufügen von kontextuellen Elementen je nach diesem Fall anders zu handhaben).
  • Sie können jetzt einen Filter angeben, wenn Sie about:config öffnen; zum Beispiel zeigt "about:config?filter=sessionstore" nur sitzungsspeicherbezogene Präferenzen an.

Siehe auch