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

Ä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 nun entweder ein Element oder den Index eines Elements, vor dem das neue Element eingefügt werden soll. Früher wurde nur ein Element unterstützt. (siehe Firefox Bug 666200)
  • Der Konstruktor HTMLIsIndexElement wurde entfernt. Keine Elemente haben dieses Interface seit vor Firefox 4 implementiert.
  • Die HTML5 "Kontextmenü"-Funktion (contextmenu-Attribut), die es ermöglicht, benutzerdefinierte elementspezifische Einträge 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 zu allen Elementen hinzugefügt.
  • Die Elemente <input> und <textarea> unterstützen jetzt das selectionDirection-Attribut, und ihre Methoden setSelectionRange() wurden aktualisiert, um optional eine Richtung anzugeben.
  • Die meisten Elemente erhalten nun einen Fokusring, wenn sie durch Verwendung des tabindex-Attributs fokussierbar gemacht werden und der Benutzer dann das Element fokussiert.
  • Bei einer Reihe verschachtelter <label>-Elemente lösen Klickereignisse nicht mehr mehrere <label>-Elemente aus, was in der Vergangenheit dazu führte, dass Firefox nicht mehr reagierte (siehe Firefox Bug 646157).

DOM

  • Die Methode insertAdjacentHTML wurde implementiert.
  • BlobBuilder verfügt nun über eine Methode getFile(), die den Inhalt des Blobs als Datei zurückgibt.
  • Das Interface FileReaderSync (Teil des FileAPI) wurde implementiert.
  • Die Ereignisbehandlung in verschachtelten <label>s wurde behoben.
  • Sie können jetzt window.postMessage() verwenden, um File und FileList-Objekte zwischen Fenstern zu übergeben.
  • Beim Bearbeiten von contenteditable-Bereichen wird beim Verlassen einer Überschrift durch Drücken der Eingabetaste oder beim Verlassen des Listeneditor-Modus durch zweimaliges Drücken der Eingabetaste nun in den Absatzmodus zurückgekehrt (d.h. Absätze innerhalb von <p> Blöcken), anstatt Zeilen durch <br>-Elemente zu trennen.
  • Ein Fehler wurde behoben, durch den die Ausrichtung nicht richtig 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 der Entf- oder Rücktaste am Anfang eines contenteditable-Bereichs den vorherigen contenteditable-Block betraf, falls vorhanden.
  • 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 Text zu definieren.
  • HTMLMediaElement verfügt jetzt über eine seekable-Eigenschaft, die ein TimeRanges-Objekt zurückgibt.
  • Das HTMLMediaElement.preload-Attribut wird nun korrekt als enumerated value reflektiert.
  • Die crossOrigin property hat einen Standardwert "Anonymous", wenn ein ungültiger Wert verwendet wird.
  • navigator.cookieEnabled gibt nun korrekte Informationen zurück, wenn die Standard-Cookie-Einstellung standortweise überschrieben wird.

JavaScript

  • RegExp.exec() und RegExp.test() rufen jetzt ohne Argumente auf den String "undefined" ab.
  • String.search() und String.match() rufen ohne Argumente oder undefined jetzt den leeren String ab und treffen daher auf jeden String.
  • Unterstützung für Beobachtungslisten wurde mit den neuen (nicht standardmäßigen) Methoden watch() und unwatch() implementiert.

CSS

  • <resolution> akzeptiert jetzt <number>, nicht nur <integer>-Werte gemäß der Spezifikation.
  • Für viele neue Sprachen sind Silbentrennungsregeln hinzugefügt worden, wenn hyphens verwendet wird.
  • Die Handhabung von background-size wurde überarbeitet, um die Spezifikation genauer zu entsprechen.
  • In der Vergangenheit hatte text-decoration im Quirks-Modus Linienstärke und -position auf nachfolgender Text angepasst, um mit dem Nachfolger übereinzustimmen. Jetzt ähneln sich die Renderings im Standardmodus und Quirks-Modus mehr.
  • Die horizontale Positionierung für Elemente wurde in vielen Fällen mehr an die Spezifikation angepasst. Dokumentation darüber wird folgen, aber vorerst 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 Kodierung akzeptiert, wie in diesen RFCs angegeben.
  • Der MIME-Header-Feld-Parser (Content-Disposition) erfordert jetzt "=" in Parametern.
  • Skripte werden nicht länger heruntergeladen, wenn JavaScript deaktiviert ist.
  • SSL 2.0 wird nicht länger unterstützt.

WebSockets

  • Die Methode send() des WebSocket-Objekts gibt nicht länger fälschlicherweise einen booleschen Wert zurück.
  • Die Methode close() des WebSocket-Objekts stimmt nun mit dem aktuellen Entwurf des Standards überein, und Schließeereignisse verwenden jetzt korrekt das CloseEvent-Interface.
  • Das extensions-Attribut des WebSocket-Objekts wird jetzt unterstützt.
  • Der WebSocket-Konstruktor unterstützt jetzt sowohl ein Array von Protokollen als auch einen einzelnen Protokollstring.
  • Gemischte Inhalte sind bei WebSockets nicht erlaubt; es kann also keine Verbindung zu einem unsicheren WebSocket-Server von sicheren Inhalten aus geöffnet werden.
  • Verbindungsfehler mit WebSockets lösen nun 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 führte zu Kompatibilitätsproblemen mit einigen Websites.

WebGL

  • Cross-Domain-Texturen können jetzt mit Genehmigung durch CORS zugelassen 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 von negativen Zeilennummern für das align-Attribut bei <mtable> wurde korrigiert.

Entwicklerwerkzeuge

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

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

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

Hinweis: Firefox 8 erfordert, dass binäre Komponenten neu kompiliert werden, 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 Bereichen zu erleichtern.

Weitere XPCOM-bezogene Änderungen

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

Workers

Es ist nicht länger möglich, von ChromeWorkers aus auf XPCOM-Objekte 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 aufgerufen wurde, wurde behoben. Seit Firefox 3 führte dies zu Fehlern, anstatt korrekt zu funktionieren.
  • Gebootstrappte Add-Ons können jetzt Chrome mithilfe einer chrome.manifest-Datei laden.
  • XUL-Bilder schrumpfen jetzt mit demselben Verhältnis in beide Richtungen, 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 Headerdatei jspubtd.h automatisch eingebunden, wenn erforderlich. Manuelle Einbindungen von jspubtd.h und/oder jsapi.h in IDL-Dateien, die jsval oder [implicit_jscontext] verwenden, sind nicht länger nötig.

Chrome-Registrierung

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

Interface-Änderungen

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

Entfernte Interfaces

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

  • nsITimelineService
  • nsIDOMHTMLIsIndexElement

Das Interface nsIWorkerFactory wurde ebenfalls entfernt. Worker können weiterhin mit den Konstruktoren Worker und ChromeWorker erstellt werden.

Weitere Änderungen

  • Wenn ein Fenster minimiert, wiederhergestellt oder zwischen Vollbild- und Fenstermodus umgeschaltet wird, empfängt es ein sizemodechange-Ereignis.
  • Sie können jetzt das extensions.autoDisableScopes-Preference verwenden, um die automatische Installation von Add-Ons aus bestimmten Add-On-Installationsorten zu deaktivieren.
  • Die neue mozSyntheticDocument-Eigenschaft auf Document-Objekten ermöglicht es Ihnen zu bestimmen, ob ein Dokument synthetisch ist (d. h. etwas wie eine eigenständige Bild-, Video- oder Audiodatei) anstatt eines vollständigen, standardmäßigen DOM-Dokuments. Dies kann nützlich sein, wenn Sie in diesem Fall zum Beispiel ein anderes Benutzerinterface präsentieren möchten (wie das Hinzufügen kontextueller Elemente unterschiedlich je nach Fall).
  • Sie können jetzt einen Filter beim Öffnen von about:config angeben; zum Beispiel zeigt "about:config?filter=sessionstore" nur auf die Sitzungspeicherung bezogene Einstellungen.

Siehe auch