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 alle Vorteile dieser Version nutzen zu können.
Änderungen für Webentwickler
HTML
- Die
HTMLImageElement
crossOrigin
-Eigenschaft wurde hinzugefügt und dascrossorigin
-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. Bisher 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-"Kontextmenü"-Feature (Attribut
contextmenu
), das es ermöglicht, benutzerspezifische Elemente zu nativen Kontextmenüs 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
<input>
- und<textarea>
-Elemente unterstützen nun dasselectionDirection
-Attribut und ihresetSelectionRange()
-Methoden wurden aktualisiert, um optional eine Richtung anzugeben. - Die meisten Elemente erhalten nun einen Fokusring, wenn sie durch das
tabindex
-Attribut fokussierbar gemacht wurden und der Benutzer das Element dann fokussiert. - In einem Satz verschachtelter
<label>
-Elemente lösen Klickereignisse nicht mehr mehrere <label>-Elemente aus, was dazu führte, dass Firefox in der Vergangenheit nicht mehr reagierte (siehe Firefox-Bug 646157).
DOM
- Die Methode
insertAdjacentHTML
wurde implementiert. BlobBuilder
hat nun einegetFile()
-Methode, die den Inhalt des Blobs als Datei zurückgibt.- Die Schnittstelle
FileReaderSync
(Teil des FileAPI) wurde implementiert. - Das Ereignis-Handling in verschachtelten
<label>
-Elementen wurde behoben. - Sie können nun
window.postMessage()
verwenden, umFile
- undFileList
-Objekte zwischen Fenstern zu übertragen. - Beim Bearbeiten von
contenteditable
-Bereichen kehrt das Drücken der Eingabetaste beim Verlassen einer Überschrift oder das zweimalige Drücken der Eingabetaste beim Verlassen des Listenbearbeitungsmodus nun zum Absatzmodus (also Absätze innerhalb von<p>
-Blöcken) zurück, anstatt Linien durch<br>
-Elemente zu trennen. - Es wurde ein Fehler behoben, der verhinderte, dass die Blocksatzformatierung korrekt wirkte, wenn sie auf die erste Zeile in einem
contenteditable
-Bereich angewendet wurde. - Es wurde ein Fehler behoben, der dazu führte, dass das Drücken der Löschen- oder Rücktaste am Anfang eines
contenteditable
-Bereichs den vorherigencontenteditable
-Block beeinflusste, falls vorhanden. Document.getSelection()
gibt nun dasselbeSelection
-Objekt zurück wiewindow.getSelection()
, anstatt es zu stringifizieren.- Die HTML5
selectionDirection
-Eigenschaft ermöglicht es, die Richtung der Auswahl in einem bearbeitbaren Text festzulegen. HTMLMediaElement
haben nun eineseekable
-Eigenschaft, die einTimeRanges
-Objekt zurückgibt.- Das
HTMLMediaElement.preload
-Attribut spiegelt sich nun korrekt als enumerierter Wert wider. - Die
crossOrigin
-Eigenschaft hat als Standardwert "Anonymous", wenn ein ungültiger Wert verwendet wird. navigator.cookieEnabled
gibt nun korrekte Informationen zurück, wenn die Standardeinstellung für Cookies pro Seite überschrieben wird.
JavaScript
RegExp.exec()
undRegExp.test()
, die ohne Argumente aufgerufen werden, passen nun zu dem String "undefined".String.search()
undString.match()
, die ohne Argumente oderundefined
aufgerufen werden, passen nun zu dem leeren String und passen somit zu jedem String.- Unterstützung für Watchlists wurde mit den neuen (nicht standardisierten)
watch()
undunwatch()
-Methoden implementiert.
CSS
<resolution>
akzeptiert nun<number>
, nicht nur<integer>
-Werte gemäß der Spezifikation.- Silbentrennungsregeln wurden für viele neue Sprachen hinzugefügt, wenn
hyphens
verwendet wird. - Die Handhabung von
background-size
wurde überarbeitet, um näher an der Spezifikation zu liegen. - In der Vergangenheit hatten
text-decoration
im Quirks-Modus eine Linienstärke und -position, die an abgeleiteten Text angepasst war. Jetzt sind der Standardmodus und der Quirks-Modus ähnlicher. - Die horizontale Positionierung von Elementen wurde in vielen Fällen näher an die Spezifikation gebracht. Die Dokumentation dazu ist noch ausstehend, aber vorerst siehe Firefox-Bug 682780, Kommentar 23 für Details.
- SVG-Bilder werden nun korrekt skaliert, wenn sie als Hintergrundbilder verwendet werden.
Netzwerk
- Anführungszeichen werden nicht mehr als Trennzeichen für RFC 2231 oder RFC 5987-Kodierungen akzeptiert, wie in den entsprechenden RFCs beschrieben.
- Der MIME-Headerfeldparser (
Content-Disposition
) erfordert nun "=" in Parametern. - Skripte werden nicht mehr heruntergeladen, wenn JavaScript deaktiviert ist.
- SSL 2.0 wird nicht mehr unterstützt.
WebSockets
- Die Methode
send()
desWebSocket
-Objekts gibt nicht länger fälschlicherweise einen booleschen Wert zurück. - Die Methode
close()
desWebSocket
-Objekts entspricht nun dem aktuellen Entwurf des Standards und Close-Events verwenden nun korrekt dieCloseEvent
-Schnittstelle. - Die
extensions
-Eigenschaft desWebSocket
-Objekts wird nun unterstützt. - Der WebSocket-Konstruktor unterstützt jetzt ein Array von Protokollen sowie einen einzelnen Protokollstring.
- Gemischte Inhalte 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 bei 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 verursachte Kompatibilitätsprobleme mit einigen Websites.
WebGL
- Cross-Domain-Texturen können nun mit CORS-Zulassung erlaubt werden.
- Cross-Prozess-Rendering mit Direct2D/Direct3D 10.
MathML
Entwicklertools
- Das
console
-Objekt hat eine neuedir()
-Methode, 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 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, wie es bei allen Hauptversionen von Firefox der Fall ist.
XPCOM
Components.utils
-
Die neuen Methoden
Components.utils.createObjectIn()
undComponents.utils.makeObjectPropsNormal()
wurden erstellt, um das Erstellen von Objekten in bestimmten Kompartimenten zu erleichtern.
Andere XPCOM-bezogene Änderungen
- Sie können jetzt DOM
File
-Objekte von Komponentencode aus instanziieren, indem Sie new File verwenden, anstatt direkt einnsIDOMFile
zu instanziieren. - Der Array-Typ
nsTPtrArray
wurde entfernt. Seine Funktionalität ist jetzt vollständig innsTArray
verfügbar, das nun die MethodeSafeElementAt()
bietet, wenn es einen Zeigertyp verwendet.
Workers
Es ist nicht länger möglich, von ChromeWorkers auf XPCOM-Objekte zuzugreifen. XPConnect wurde in Worker-Kontexten gemäß Firefox-Bug 649537 deaktiviert.
XUL
- Ein Fehler in
document.execCommand()
, der auftrat, wenn er auf den Wert voncontentDocument
angewendet wurde, wurde behoben. Seit Firefox 3 führte dies zu Fehlern anstatt zu korrekter Funktion. - Bootstrapped-Add-ons können nun Chrome über eine
chrome.manifest
-Datei laden. - XUL-Bilder verkleinern sich nun im gleichen Verhältnis in beide Richtungen, wenn Sie maximale Größen angeben.
Ä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 bei Bedarf eingeschlossen. Manuelle Inklusionen vonjspubtd.h
und/oderjsapi.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. - Die
ownerWindow
-Eigenschaft wurde aus dernsIAccessNode
-Schnittstelle entfernt. - Die
nsIDOMStorageWindow
-Schnittstelle wurde in diensIDOMWindow
-Schnittstelle integriert. - Alle Mitglieder der
nsIDOMWindowInternal
-Schnittstelle wurden in diensIDOMWindow
-Schnittstelle verschoben. Die Schnittstelle selbst (ohne Mitglieder) bleibt bis Firefox 9 zur Kompatibilität verfügbar. - Um die Leistung zu verbessern, wurde das Callback-Handling für asynchrone Places-Datenbank-Updates geändert. Siehe die neuen Methoden
mozIVisitInfoCallback.handleResult()
undmozIVisitInfoCallback.handleError()
, die die alte Einzelmethode für sowohl Fehler- als auch Erfolgshandling ersetzen. - Das
KIND_MAPPED
-Attribut vonnsIMemoryReporter
wurde zugunsten vonKIND_NONHEAP
veraltet, neue EinheitstypenUNITS_COUNT_CUMULATIVE
undUNITS_PERCENTAGE
wurden hinzugefügt. - Das
nsIMemoryReporterManager
-Interface hat ein neuesexplicit
-Attribut, das die Gesamtgröße der expliziten Speichervorgänge meldet. - Das
nsIMemoryReporterManager
-Interface hat ein neuesresident
-Attribut, das die Menge des verwendeten physischen Speichers meldet. - Das
nsINetworkLinkService
-Interface hat ein neues Attribut,linkType
. Dieses Attribut gibt den Typ der verwendeten Netzwerkverbindung an. Alle Betriebssysteme geben derzeitLINK_TYPE_UNKNOWN
zurück. Android-Unterstützung wurde aufgrund wahrgenommener Sicherheitsbedenken zurückgezogen. - Das
nsISelection2
-Interface wurde in dasnsISelectionPrivate
-Interface integriert. - Das
nsISelection3
-Interface wurde in dasnsISelection
-Interface integriert. - Das
nsISessionStartup
-Attributstate
ist jetzt einjsval
anstelle eines Strings, aus Leistungsgründen. - Das
nsIDocShell
-AttributisActive
ist jetztfalse
für minimierte Fenster. - Die Methode
nsIDownloadHistory.addDownload()
speichert jetzt das Ziel, wohin 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. Workers können weiterhin mit den Worker
- und ChromeWorker
-Konstruktoren erstellt werden.
Sonstige Änderungen
- Wenn ein Fenster minimiert, wiederhergestellt oder zwischen Vollbild- und Fenstermodus umgeschaltet wird, empfängt es ein
sizemodechange
-Ereignis. - Sie können jetzt die Einstellung
extensions.autoDisableScopes
verwenden, um die automatische Installation von Add-ons aus bestimmten Add-on-Installationsorten zu deaktivieren. - Die neue
mozSyntheticDocument
-Eigenschaft aufDocument
-Objekten ermöglicht es Ihnen festzustellen, ob ein Dokument synthetisch ist (das heißt, etwas wie eine eigenständige Bild-, Video- oder Audiodatei) anstatt ein vollständiges, standardmäßiges DOM-Dokument. Dies kann nützlich sein, wenn Sie beispielsweise in dieser Situation eine andere Benutzeroberfläche präsentieren möchten (wie das Hinzufügen von kontextbezogenen Elementen je nach Fall). - Sie können jetzt einen Filter verwenden, wenn Sie
about:config
öffnen; zum Beispiel zeigtabout:config?filter=sessionstore
nur Einstellungen zu Sitzungsdateien an.