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 Veröffentlichung optimal nutzen zu können.
Ä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 nun entweder ein Element oder den Index eines Elements, vor dem das neue Element eingefügt werden soll. Früher wurde nur ein Element unterstützt. (siehe Firefox Bug 666200) - Der Konstruktor
HTMLIsIndexElement
wurde entfernt. Keine Elemente haben dieses Interface seit vor Firefox 4 implementiert. - Die HTML5 "Kontextmenü"-Funktion (
contextmenu
-Attribut), die es ermöglicht, benutzerdefinierte elementspezifische Einträge 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 zu allen Elementen hinzugefügt. - Die Elemente
<input>
und<textarea>
unterstützen jetzt dasselectionDirection
-Attribut, und ihre MethodensetSelectionRange()
wurden aktualisiert, um optional eine Richtung anzugeben. - Die meisten Elemente erhalten nun einen Fokusring, wenn sie durch Verwendung des
tabindex
-Attributs fokussierbar gemacht werden und der Benutzer dann das Element fokussiert. - Bei einer Reihe 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
verfügt nun über eine MethodegetFile()
, die den Inhalt des Blobs als Datei zurückgibt.- Das Interface
FileReaderSync
(Teil des FileAPI) wurde implementiert. - Die 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 wird beim Verlassen einer Überschrift durch Drücken der Eingabetaste oder beim Verlassen des Listeneditor-Modus durch zweimaliges Drücken der Eingabetaste nun in den Absatzmodus zurückgekehrt (d.h. Absätze innerhalb von<p>
Blöcken), anstatt Zeilen durch<br>
-Elemente zu trennen. - Ein Fehler wurde behoben, durch den die Ausrichtung nicht richtig 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 der Entf- oder Rücktaste am Anfang eines
contenteditable
-Bereichs den vorherigencontenteditable
-Block betraf, 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 zu definieren. HTMLMediaElement
verfügt jetzt über eineseekable
-Eigenschaft, die einTimeRanges
-Objekt zurückgibt.- Das
HTMLMediaElement
.preload
-Attribut wird nun korrekt als enumerated value reflektiert. - Die
crossOrigin
property hat einen Standardwert "Anonymous", wenn ein ungültiger Wert verwendet wird. navigator.cookieEnabled
gibt nun korrekte Informationen zurück, wenn die Standard-Cookie-Einstellung standortweise überschrieben wird.
JavaScript
RegExp.exec()
undRegExp.test()
rufen jetzt ohne Argumente auf den String "undefined" ab.String.search()
undString.match()
rufen ohne Argumente oderundefined
jetzt den leeren String ab und treffen daher auf jeden String.- Unterstützung für Beobachtungslisten wurde mit den neuen (nicht standardmäßigen) Methoden
watch()
undunwatch()
implementiert.
CSS
<resolution>
akzeptiert jetzt<number>
, nicht nur<integer>
-Werte gemäß der Spezifikation.- Für viele neue Sprachen sind Silbentrennungsregeln hinzugefügt worden, wenn
hyphens
verwendet wird. - Die Handhabung von
background-size
wurde überarbeitet, um die Spezifikation genauer zu entsprechen. - In der Vergangenheit hatte
text-decoration
im Quirks-Modus Linienstärke und -position auf nachfolgender Text angepasst, um mit dem Nachfolger übereinzustimmen. Jetzt ähneln sich die Renderings im Standardmodus und Quirks-Modus mehr. - Die horizontale Positionierung für Elemente wurde in vielen Fällen mehr an die Spezifikation angepasst. Dokumentation darüber wird folgen, aber vorerst 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 Kodierung akzeptiert, wie in diesen RFCs angegeben.
- Der MIME-Header-Feld-Parser (
Content-Disposition
) erfordert jetzt "=" in Parametern. - Skripte werden nicht länger heruntergeladen, wenn JavaScript deaktiviert ist.
- SSL 2.0 wird nicht länger unterstützt.
WebSockets
- Die Methode
send()
desWebSocket
-Objekts gibt nicht länger fälschlicherweise einen booleschen Wert zurück. - Die Methode
close()
desWebSocket
-Objekts stimmt nun mit dem aktuellen Entwurf des Standards überein, und Schließeereignisse verwenden jetzt korrekt dasCloseEvent
-Interface. - Das
extensions
-Attribut desWebSocket
-Objekts wird jetzt unterstützt. - Der WebSocket-Konstruktor unterstützt jetzt sowohl ein Array von Protokollen als auch einen einzelnen Protokollstring.
- Gemischte Inhalte sind bei WebSockets nicht erlaubt; es kann also keine Verbindung zu einem unsicheren WebSocket-Server von sicheren Inhalten aus geöffnet werden.
- Verbindungsfehler mit 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 führte zu Kompatibilitätsproblemen mit einigen Websites.
WebGL
- Cross-Domain-Texturen können jetzt mit Genehmigung durch CORS zugelassen werden.
- Cross-Prozess-Rendering mit Direct2D/Direct3D 10.
MathML
Entwicklerwerkzeuge
- 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 Aktualisierung von Add-Ons für Firefox 8 für einen Leitfaden zu Änderungen, die Sie vornehmen müssen, um Ihre Add-Ons mit Firefox 8 kompatibel zu machen.
Hinweis: Firefox 8 erfordert, dass binäre Komponenten neu kompiliert werden, 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 Bereichen zu erleichtern.
Weitere XPCOM-bezogene Änderungen
- Sie können jetzt DOM
File
-Objekte von Komponentencode instanziieren, indem Sienew File
verwenden, anstatt direkt einnsIDOMFile
zu instanziieren. - Der Array-Typ
nsTPtrArray
wurde entfernt. Seine Funktionalität ist jetzt vollständig innsTArray
verfügbar, das jetzt dieSafeElementAt()
-Methode bietet, wenn es mit einem Zeigertyp instanziiert wird.
Workers
Es ist nicht länger möglich, von ChromeWorkers aus auf XPCOM-Objekte 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
aufgerufen wurde, wurde behoben. Seit Firefox 3 führte dies zu Fehlern, anstatt korrekt zu funktionieren. - Gebootstrappte Add-Ons können jetzt Chrome mithilfe einer
chrome.manifest
-Datei laden. - XUL-Bilder schrumpfen jetzt mit demselben Verhältnis in beide Richtungen, 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 Headerdatei
jspubtd.h
automatisch eingebunden, wenn erforderlich. Manuelle Einbindungen vonjspubtd.h
und/oderjsapi.h
in IDL-Dateien, die jsval oder [implicit_jscontext] verwenden, sind nicht länger nötig.
Chrome-Registrierung
- Das
platformversion
-Flag kann in der chrome.manifest verwendet werden, um die Kompatibilität mit Gecko-Versionen anzugeben.
Interface-Änderungen
- Die Methode
mozIJSSubScriptLoader.loadSubScript()
lädt jetzt Skripte aus dem Startcache, wenn möglich. - Das
ownerWindow
-Attribut wurde aus demnsIAccessNode
Interface entfernt. - Das
nsIDOMStorageWindow
Interface wurde in dasnsIDOMWindow
Interface integriert. - Alle Mitglieder des
nsIDOMWindowInternal
Interface wurden in dasnsIDOMWindow
Interface verschoben. Das Interface selbst (ohne Mitglieder) bleibt für die Kompatibilität bis Firefox 9 verfügbar. - Um die Leistung zu verbessern, wurde die Rückrufbehandlung für asynchrone Aktualisierungen der Places-Datenbank geändert. Siehe die neuen Methoden
mozIVisitInfoCallback.handleResult()
undmozIVisitInfoCallback.handleError()
, die die alte Einzelmethode für sowohl Fehler- als auch Erfolgszustandsbehandlung ersetzen. - Das
KIND_MAPPED
-Attribut vonnsIMemoryReporter
wurde zugunsten vonKIND_NONHEAP
veraltet, neue EinheitentypenUNITS_COUNT_CUMULATIVE
undUNITS_PERCENTAGE
wurden hinzugefügt. - Das
nsIMemoryReporterManager
Interface hat ein neuesexplicit
-Attribut, das die Gesamtgröße der expliziten Speicherzuweisungen 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 liefert die Art der verwendeten Netzwerkverbindung. Alle Betriebssysteme geben derzeitLINK_TYPE_UNKNOWN
zurück. Android-Unterstützung wurde aufgrund von wahrgenommenen Sicherheitsbedenken zurückgenommen. - Das
nsISelection2
Interface wurde in dasnsISelectionPrivate
Interface integriert. - Das
nsISelection3
Interface wurde in dasnsISelection
Interface integriert. - Das Attribut
state
vonnsISessionStartup
ist jetzt einjsval
anstelle eines Strings, aus Leistungsgründen. - Das Attribut
isActive
vonnsIDocShell
ist jetztfalse
für minimierte Fenster. - Die Methode
nsIDownloadHistory.addDownload()
speichert nun das Ziel, wo der Download auf das lokale Dateisystem gespeichert wird.
Entfernte Interfaces
Die folgenden Interfaces waren Implementierungsdetails, die nicht mehr benötigt werden:
nsITimelineService
nsIDOMHTMLIsIndexElement
Das Interface nsIWorkerFactory
wurde ebenfalls entfernt. Worker können weiterhin mit den Konstruktoren Worker
und ChromeWorker
erstellt werden.
Weitere Änderungen
- Wenn ein Fenster minimiert, wiederhergestellt oder zwischen Vollbild- und Fenstermodus umgeschaltet wird, empfängt es ein
sizemodechange
-Ereignis. - Sie können jetzt das
extensions.autoDisableScopes
-Preference 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 zu bestimmen, ob ein Dokument synthetisch ist (d. h. etwas wie eine eigenständige Bild-, Video- oder Audiodatei) anstatt eines vollständigen, standardmäßigen DOM-Dokuments. Dies kann nützlich sein, wenn Sie in diesem Fall zum Beispiel ein anderes Benutzerinterface präsentieren möchten (wie das Hinzufügen kontextueller Elemente unterschiedlich je nach Fall). - Sie können jetzt einen Filter beim Öffnen von
about:config
angeben; zum Beispiel zeigt "about:config?filter=sessionstore" nur auf die Sitzungspeicherung bezogene Einstellungen.