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 Attributcrossorigin
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 AttributselectionDirection
, und ihresetSelectionRange()
-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 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 ü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 vorherigencontenteditable
-Block beeinflusste, falls vorhanden. Document.getSelection()
gibt jetzt das gleicheSelection
-Objekt zurück wiewindow.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 eineseekable
-Eigenschaft, die einTimeRanges
-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()
undRegExp.test()
, die ohne Argumente aufgerufen werden, stimmen jetzt mit dem String "undefined" überein.String.search()
undString.match()
, die ohne Argumente oder mitundefined
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()
undunwatch()
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 ObjektsWebSocket
gibt nicht mehr fälschlicherweise einen Boolean-Wert zurück. - Die Methode
close()
des ObjektsWebSocket
entspricht jetzt dem aktuellen Entwurf des Standards, und Schließereignisse verwenden nun korrekt dieCloseEvent
-Schnittstelle. - Das Attribut
extensions
des ObjektsWebSocket
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
Entwicklerwerkzeuge
- Das
console
-Objekt hat eine neuedir()
-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()
undComponents.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 durchnew File
instanziieren, anstattnsIDOMFile
direkt zu instanziieren. - Der Arraytyp
nsTPtrArray
wurde entfernt. Seine Funktionalität ist jetzt vollständig innsTArray
verfügbar, das jetzt die MethodeSafeElementAt()
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 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 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 vonjspubtd.h
und/oderjsapi.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 dernsIAccessNode
-Schnittstelle entfernt. - Die Schnittstelle
nsIDOMStorageWindow
wurde in die SchnittstellensIDOMWindow
integriert. - Alle Mitglieder der Schnittstelle
nsIDOMWindowInternal
wurden in diensIDOMWindow
-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()
undmozIVisitInfoCallback.handleError()
-Methoden, die die alte Einzelmethode für Fehler- und Erfolgskonditionsbehandlung ersetzen. - Das
KIND_MAPPED
-Attribut vonnsIMemoryReporter
wurde zugunsten vonKIND_NONHEAP
abgeschafft, neue EinheitentypenUNITS_COUNT_CUMULATIVE
undUNITS_PERCENTAGE
wurden hinzugefügt. - Die Schnittstelle
nsIMemoryReporterManager
hat ein neues Attributexplicit
, das die gesamte Größe expliziter Speicherzuweisungen meldet. - Die Schnittstelle
nsIMemoryReporterManager
hat ein neues Attributresident
, das die Menge des verwendeten physischen Speichers meldet. - Die Schnittstelle
nsINetworkLinkService
hat ein neues AttributlinkType
. Dieses Attribut gibt den Verbindungstyp der Netzverbindung an. Alle Betriebssysteme geben derzeitLINK_TYPE_UNKNOWN
zurück. Die Unterstützung für Android wurde wegen wahrgenommener Sicherheitsbedenken zurückgenommen. - Die Schnittstelle
nsISelection2
wurde in die SchnittstellensISelectionPrivate
integriert. - Die Schnittstelle
nsISelection3
wurde in die SchnittstellensISelection
integriert. - Das Attribut
state
vonnsISessionStartup
ist jetzt einjsval
statt eines Strings, aus Leistungsgründen. - Das Attribut
isActive
vonnsIDocShell
ist jetztfalse
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 aufDocument
-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.