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 Entwickler von Add-ons und Mozilla-Projekten, um die Funktionen dieser Version optimal zu nutzen.

Änderungen für Webentwickler

HTML

  • Die Eigenschaft HTMLImageElement crossOrigin wurde hinzugefügt und das Attribut crossorigin wurde zum <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. Zuvor wurde nur ein Element unterstützt. (siehe Firefox Bug 666200)
  • Der HTMLIsIndexElement-Konstruktor wurde entfernt. Keine Elemente haben diese Schnittstelle seit vor Firefox 4 implementiert.
  • Das HTML5-Feature "Kontextmenü" (Attribut contextmenu), das es ermöglicht, 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 Bug 617528).
  • Unterstützung für das Attribut HTMLElement.accessKeyLabel wurde zu allen Elementen hinzugefügt.
  • Die <input>- und <textarea>-Elemente unterstützen jetzt das Attribut selectionDirection, und ihre setSelectionRange()-Methoden wurden aktualisiert, um optional eine Richtung anzugeben.
  • Die meisten Elemente erhalten nun einen Fokusrahmen, wenn sie durch das Attribut tabindex fokussierbar gemacht wurden und der Benutzer dann das Element fokussiert.
  • In einem Satz 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 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 übergeben.
  • 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 nun in den Paragrafeingabemodus 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 Ausrichtung beim ersten Zeileninhalt in einem contenteditable-Bereich korrekt wirksam wird.
  • Ein Fehler wurde behoben, der dazu führte, dass das Drücken von Löschen oder Zurück im Anfang eines contenteditable-Bereichs den vorherigen contenteditable-Block beeinflusste, falls vorhanden.
  • Document.getSelection() gibt jetzt das gleiche Selection-Objekt zurück wie window.getSelection(), anstatt es zu "stringifizieren".
  • Die HTML5-Eigenschaft selectionDirection 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 reflektiert jetzt korrekt als enumerierter Wert.
  • Die crossOrigin-Eigenschaft hat als Standardwert "Anonymous", wenn ein ungültiger Wert verwendet wird.
  • navigator.cookieEnabled gibt jetzt korrekte Informationen zurück, wenn die Standardeinstellung für Cookies für einzelne Seiten ü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 mit undefined aufgerufen werden, stimmen jetzt mit dem leeren String überein und stimmen somit mit jedem String überein.
  • Unterstützung für Überwachungslisten wurde mit den neuen (nicht-standardisierten) Methoden watch() und unwatch() implementiert.

CSS

  • <resolution> akzeptiert jetzt <number>, nicht nur <integer>-Werte gemäß der Spezifikation.
  • Silbentrennungsregeln 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 nachgeordneten Text angepasst. Jetzt sind die Darstellungen im Standards- und Quirks-Modus ähnlicher.
  • Die horizontale Positionierung für Elemente wurde in vielen Fällen mehr an die Spezifikation angepasst. Dokumentation dazu folgt noch, aber für den Moment siehe Firefox Bug 682780, Kommentar 23 für Details.
  • SVG-Bilder werden jetzt korrekt skaliert, wenn sie als Hintergrundbilder verwendet werden.

Netzwerk

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

WebSockets

  • Die Methode send() des Objekts WebSocket gibt nicht mehr fälschlicherweise einen Boolean-Wert zurück.
  • Die Methode close() des Objekts WebSocket entspricht jetzt dem aktuellen Entwurf des Standards, und Schließereignisse verwenden nun korrekt die CloseEvent-Schnittstelle.
  • Das Attribut extensions des Objekts WebSocket wird jetzt unterstützt.
  • Der WebSocket-Konstruktor unterstützt jetzt ein Array von Protokollen sowie eine einzelne Protokollzeichenfolge.
  • Gemischter Inhalt ist bei WebSockets nicht erlaubt; das bedeutet, dass Sie keine Verbindung zu einem unsicheren WebSocket-Server von sicherem Inhalt aus öffnen können.
  • Verbindungsfehler bei WebSockets lösen jetzt den onerror-Handler aus.
  • WebSocket-API wurde auf den neuesten Entwurf der Spezifikation aktualisiert (siehe Firefox Bug 674890, Firefox Bug 674527, und Firefox Bug 674716).
  • Die Erweiterung "deflate-stream" für WebSockets wurde deaktiviert; sie wurde als veraltet angesehen und führte zu Kompatibilitätsproblemen mit einigen Websites.

WebGL

  • Cross-Domain-Texturen können jetzt mit CORS-Genehmigung 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 dir()-Methode, die eine interaktive Liste der Eigenschaften eines bestimmten Objekts anzeigt.

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

Siehe Aktualisieren von Add-ons für Firefox 8 für einen Leitfaden zu Änderungen, die vorgenommen werden müssen, um Ihre Add-ons mit Firefox 8 kompatibel zu machen.

Hinweis: Firefox 8 erfordert, dass binäre Komponenten neu kompiliert werden, wie bei allen 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 nun DOM File-Objekte aus Komponentencode durch new File instanziieren, anstatt nsIDOMFile direkt zu instanziieren.
  • Der Arraytyp nsTPtrArray wurde entfernt. Seine Funktionalität ist jetzt vollständig in nsTArray verfügbar, das jetzt die Methode SafeElementAt() bietet, wenn es mit einem Zeigertyp instanziiert wird.

Workers

Es ist nicht mehr möglich, XPCOM-Objekte von ChromeWorkers aus zuzugreifen. XPConnect wurde im Worker-Kontext deaktiviert mit Firefox Bug 649537.

XUL

  • Ein Fehler in document.execCommand(), der auftrat, wenn er 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 jetzt im gleichen Verhältnis 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 zu Headern wird die Header-Datei jspubtd.h automatisch bei Bedarf eingeschlossen. Manuelles Einschließen von jspubtd.h und/oder jsapi.h in IDL-Dateien, die jsval oder [implicit_jscontext] verwenden, ist nicht mehr notwendig.

Chrome-Registrierung

  • Das platformversion-Flag kann im chrome.manifest verwendet werden, um die Gecko-Kompatibilität zu spezifizieren.

Schnittstellenänderungen

  • Die mozIJSSubScriptLoader.loadSubScript()-Methode lädt Skripte nun aus dem Startcache, wenn möglich.
  • Das Attribut ownerWindow wurde von der nsIAccessNode-Schnittstelle entfernt.
  • Die Schnittstelle nsIDOMStorageWindow wurde in die Schnittstelle nsIDOMWindow integriert.
  • Alle Mitglieder der Schnittstelle nsIDOMWindowInternal wurden in die nsIDOMWindow-Schnittstelle verschoben. Die Schnittstelle selbst (ohne Mitglieder) bleibt zur Kompatibilität bis Firefox 9 verfügbar.
  • Zur Verbesserung der Leistung wurde die Rückrufbehandlung für asynchrone Aktualisierungen der Places-Datenbank geändert. Siehe die neuen mozIVisitInfoCallback.handleResult() und mozIVisitInfoCallback.handleError()-Methoden, die die alte Einzelmethode für Fehler- und Erfolgskonditionsbehandlung ersetzen.
  • Das KIND_MAPPED-Attribut von nsIMemoryReporter wurde zugunsten von KIND_NONHEAP abgeschafft, neue Einheitentypen UNITS_COUNT_CUMULATIVE und UNITS_PERCENTAGE wurden hinzugefügt.
  • Die Schnittstelle nsIMemoryReporterManager hat ein neues Attribut explicit, das die gesamte Größe expliziter Speicherzuweisungen meldet.
  • Die Schnittstelle nsIMemoryReporterManager hat ein neues Attribut resident, das die Menge des verwendeten physischen Speichers meldet.
  • Die Schnittstelle nsINetworkLinkService hat ein neues Attribut linkType. Dieses Attribut gibt den Verbindungstyp der Netzverbindung an. Alle Betriebssysteme geben derzeit LINK_TYPE_UNKNOWN zurück. Die Unterstützung für Android wurde wegen wahrgenommener Sicherheitsbedenken zurückgenommen.
  • Die Schnittstelle nsISelection2 wurde in die Schnittstelle nsISelectionPrivate integriert.
  • Die Schnittstelle nsISelection3 wurde in die Schnittstelle nsISelection integriert.
  • Das Attribut state von nsISessionStartup ist jetzt ein jsval statt eines Strings, aus Leistungsgründen.
  • Das Attribut isActive von nsIDocShell ist jetzt false für minimierte Fenster.
  • Die Methode nsIDownloadHistory.addDownload() 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 Schnittstelle nsIWorkerFactory wurde ebenfalls entfernt. Workers können weiterhin mit den Konstruktoren Worker und ChromeWorker erstellt werden.

Weitere Änderungen

  • Wenn ein Fenster minimiert, wiederhergestellt oder zwischen Vollbild- und Fenster-Modus umgeschaltet wird, erhält es ein sizemodechange-Ereignis.
  • Sie können nun die Einstellung extensions.autoDisableScopes verwenden, um die automatische Installation von Add-ons aus bestimmten Add-on-Installationsorten zu verhindern.
  • Das neue mozSyntheticDocument-Eigenschaft auf Document-Objekten lässt Sie bestimmen, ob ein Dokument synthetisch ist (das heißt, 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 eine andere Benutzeroberfläche in dieser Situation präsentieren möchten (wie das Hinzufügen kontextbezogener Elemente unterschiedlich, je nach diesem Fall).
  • Sie können jetzt einen Filter angeben, wenn Sie about:config öffnen; zum Beispiel "about:config?filter=sessionstore" wird nur Einstellungen im Zusammenhang mit dem Sitzungsstorage anzeigen.

Siehe auch