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 desHTMLImageElement
wurde hinzugefügt und dascrossorigin
-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 dasselectionDirection
-Attribut, und ihresetSelectionRange()
-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 einegetFile()
-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, umFile
- undFileList
-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 vorherigencontenteditable
Block betraf, wenn einer vorhanden ist. Document.getSelection()
gibt jetzt dasselbeSelection
-Objekt zurück wiewindow.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 eineseekable
-Eigenschaft, die einTimeRanges
-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()
undRegExp.test()
ohne Argumente aufgerufen, vergleichen sich jetzt mit dem String "undefined".String.search()
undString.match()
ohne Argumente oder mitundefined
rufen jetzt den leeren String ab und vergleichen somit jeden String.- Unterstützung für Beobachtungslisten wurde mit den neuen (nicht standardisierten) Methoden
watch()
undunwatch()
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()
desWebSocket
-Objekts gibt nicht mehr fälschlicherweise einen Boolean-Wert zurück. - Die Methode
close()
desWebSocket
-Objekts entspricht jetzt dem aktuellen Entwurf des Standards und Abschlussereignisse verwenden jetzt dieCloseEvent
-Schnittstelle korrekt. - Das
extensions
-Attribut desWebSocket
-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
Entwicklerwerkzeuge
- Das
console
Objekt hat eine neue Methodedir()
, 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()
undComponents.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 einnsIDOMFile
direkt zu instanziieren. - Der Array-Typ
nsTPtrArray
wurde entfernt. Seine Funktionalität ist jetzt vollständig aufnsTArray
verfügbar, das jetzt die MethodeSafeElementAt()
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 voncontentDocument
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 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. - Das Attribut
ownerWindow
wurde aus dernsIAccessNode
-Schnittstelle entfernt. - Die
nsIDOMStorageWindow
-Schnittstelle wurde mit dernsIDOMWindow
-Schnittstelle zusammengeführt. - Alle Mitglieder der
nsIDOMWindowInternal
-Schnittstelle wurden in diensIDOMWindow
-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()
undmozIVisitInfoCallback.handleError()
, die die alte Methode für sowohl Fehler- als auch Erfolgskonditionen ersetzen. - Das
KIND_MAPPED
-Attribut vonnsIMemoryReporter
wurde zugunsten vonKIND_NONHEAP
veraltet, neue EinheitstypenUNITS_COUNT_CUMULATIVE
undUNITS_PERCENTAGE
wurden hinzugefügt. - Die
nsIMemoryReporterManager
-Schnittstelle hat ein neuesexplicit
-Attribut, das die Gesamtgröße expliziter Speicherzuweisungen meldet. - Die
nsIMemoryReporterManager
-Schnittstelle hat ein neuesresident
-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 derzeitLINK_TYPE_UNKNOWN
zurück. Die Android-Unterstützung wurde aufgrund wahrgenommener Sicherheitsbedenken zurückgezogen. - Die
nsISelection2
-Schnittstelle wurde mit dernsISelectionPrivate
-Schnittstelle zusammengeführt. - Die
nsISelection3
-Schnittstelle wurde mit dernsISelection
-Schnittstelle zusammengeführt. - Das
nsISessionStartup
-Attribut state 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, 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
aufDocument
-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 zeigtabout:config?filter=sessionstore
nur Sitzungsbezogene Voreinstellungen an.