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 dascrossorigin
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 dasselectionDirection
Attribut, und ihresetSelectionRange()
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 einegetFile()
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, umFile
undFileList
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 vorherigencontenteditable
Block beeinflusste, wenn einer vorhanden ist. 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 Textfeld zu definieren. HTMLMediaElement
hat jetzt eineseekable
Eigenschaft, die einTimeRanges
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()
undRegExp.test()
, die ohne Argumente aufgerufen werden, stimmen jetzt mit dem String "undefined" überein.String.search()
undString.match()
, die ohne Argumente oderundefined
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()
undunwatch()
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 Methodesend()
gibt nicht mehr fälschlicherweise einen Booleschen Wert zurück. - Die
WebSocket
Objekt Methodeclose()
stimmt jetzt mit dem aktuellen Entwurf des Standards überein und Schließe-Ereignisse verwenden jetzt korrekt dieCloseEvent
Schnittstelle. - Das
WebSocket
Objekt Attributextensions
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
Entwickler-Tools
- Das
console
Objekt hat eine neuedir()
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()
undComponents.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 einnsIDOMFile
direkt instanziieren zu müssen. - Der
nsTPtrArray
Array-Typ wurde entfernt. Seine Funktionalität ist nun vollständig innsTArray
verfügbar, das nun dieSafeElementAt()
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 voncontentDocument
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 vonjspubtd.h
und/oderjsapi.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 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 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()
undmozIVisitInfoCallback.handleError()
, die die alte Einzelmethode für sowohl Fehler- als auch Erfolg-Zustandbehandlungen ersetzen. - Das
KIND_MAPPED
Attribut vonnsIMemoryReporter
wurde zugunsten vonKIND_NONHEAP
veraltet, neue EinheitentypenUNITS_COUNT_CUMULATIVE
undUNITS_PERCENTAGE
wurden hinzugefügt. - Die
nsIMemoryReporterManager
Schnittstelle hat ein neuesexplicit
Attribut, das die Gesamtgröße der expliziten 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 Netzwerkverbindung an. Alle Betriebssysteme geben derzeitLINK_TYPE_UNKNOWN
zurück. Die Android-Unterstützung wurde aufgrund wahrgenommener Sicherheitsbedenken zurückgesetzt. - Die
nsISelection2
Schnittstelle wurde in diensISelectionPrivate
Schnittstelle integriert. - Die
nsISelection3
Schnittstelle wurde in diensISelection
Schnittstelle integriert. - Das
nsISessionStartup
Attribut state ist jetzt einjsval
anstatt eines Strings, aus Leistungsgründen. - Das
nsIDocShell
AttributisActive
ist jetztfalse
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 aufDocument
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.