Firefox 8 Versionshinweise 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 auszuschöpfen.
Änderungen für Webentwickler
>HTML
- Die
HTMLImageElementcrossOrigin-Eigenschaft 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. Keine Elemente haben dieses Interface seit Firefox 4 implementiert. - Das HTML5 "Kontextmenü"-Feature (
contextmenu-Attribut), das es ermöglicht, spezifische Einträge zum nativen Kontextmenü hinzuzufügen, wird nun unterstützt (die Implementierung ist noch experimentell, in Erwartung von Ä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 jetzt dasselectionDirection-Attribut, und ihresetSelectionRange()-Methoden wurden aktualisiert, um optional eine Richtung anzugeben. - Die meisten Elemente erhalten jetzt einen Fokusring, wenn sie durch das
tabindex-Attribut fokussierbar gemacht wurden und der Benutzer dann das Element fokussiert. - In einem Satz von verschachtelten
<label>-Elementen lösen Klickereignisse jetzt nicht mehr mehrere <label>-Elemente aus, was in der Vergangenheit dazu geführt hat, dass Firefox nicht mehr reagierte (siehe Firefox-Bug 646157).
DOM
- Die Methode
insertAdjacentHTMLwurde implementiert. BlobBuilderhat nun einegetFile()-Methode, die den Inhalt des Blobs als Datei zurückgibt.- Das Interface
FileReaderSync(Teil der FileAPI) wurde implementiert. - Ereignisbehandlung in verschachtelten
<label>wurde behoben. - Sie können nun
window.postMessage()verwenden, umFileundFileList-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 nun zum Absatzeintrag-Modus zurück (das heißt, Absätze innerhalb von<p>-Blöcken) anstatt von<br>-Elementen, die Linien trennen. - Ein Fehler wurde behoben, der verhinderte, dass die Rechtfertigung ordnungsgemäß wirksam wird, wenn sie auf die erste Zeile eines
contenteditable-Bereichs angewendet wird. - Ein Fehler wurde behoben, der dazu führte, dass das Drücken der Löschen- oder Rückwärtstaste am Anfang eines
contenteditable-Bereichs den vorherigencontenteditable-Block betraf, wenn einer vorhanden war. Document.getSelection()gibt jetzt 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. HTMLMediaElementhat nun eineseekable-Eigenschaft, die einTimeRanges-Objekt zurückgibt.- Das
HTMLMediaElement.preload-Attribut spiegelt nun korrekt als aufgezählter Wert wieder. crossOriginproperty setzt standardmäßig auf "Anonymous", wenn ein ungültiger Wert verwendet wird.navigator.cookieEnabledgibt nun korrekte Informationen zurück, wenn die Standard-Cookie-Einstellung standortweise überschrieben wird.
JavaScript
RegExp.exec()undRegExp.test(), die ohne Argumente aufgerufen werden, matchen nun gegen die Zeichenkette "undefined".String.search()undString.match(), die ohne Argumente oderundefinedaufgerufen werden, matchen nun gegen die leere Zeichenkette und matchen somit jede Zeichenkette.- Unterstützung für Überwachungsliste wurde mit den neuen (nicht standardisierten)
watch()undunwatch()-Methoden implementiert.
CSS
<resolution>akzeptiert jetzt<number>, nicht nur<integer>-Werte gemäß der Spezifikation.- Trennungsregeln wurden für viele neue Sprachen hinzugefügt, wenn
hyphensverwendet wird. - Die Verarbeitung von
background-sizewurde überarbeitet, um der Spezifikation näher zu entsprechen. - In der Vergangenheit hatte die
text-decorationin der Quirks-Modus-Klasse die Linienstärke und -position auf Nachkommen-Text angepasst, um den Nachkommen zu entsprechen. Jetzt sind Rendering im Standards- und Quirks-Modus ähnlicher. - Horizontale Positionierung für Elemente wurde in vielen Fällen mehr an die Spezifikation angepasst. Dokumentation hierzu folgt, vorerst siehe Firefox-Bug 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-Codierung akzeptiert, gemäß diesen RFCs.
- Der MIME-Headerfeld-Parser (
Content-Disposition) erfordert nun "=" in Parametern. - Skripts werden nicht mehr heruntergeladen, wenn JavaScript deaktiviert ist.
- SSL 2.0 wird nicht mehr unterstützt.
WebSockets
- Die
send()-Methode desWebSocket-Objekts gibt nicht mehr fälschlicherweise einen booleschen Wert zurück. - Die
close()-Methode desWebSocket-Objekts entspricht nun dem aktuellen Entwurf des Standards, und Close-Events verwenden nun korrekt dasCloseEvent-Interface. - Das
extensions-Attribut desWebSocket-Objekts wird nun unterstützt. - Der WebSocket-Konstruktor unterstützt nun ein Array von Protokollen sowie eine einzelne Protokollzeichenkette.
- Mixed Content ist bei WebSockets nicht erlaubt; 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 zu WebSockets wurde deaktiviert; sie wurde veraltet und verursachte Kompatibilitätsprobleme mit einigen Websites.
WebGL
- Cross-domain-Texturen können nun 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 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 Änderungen, die Sie wahrscheinlich 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 es einfacher zu machen, Objekte in bestimmten Compartments zu erstellen.
Weitere XPCOM-bezogene Änderungen
- Sie können nun DOM
File-Objekte aus Komponentencode instanziieren, indem Sie ein neues File erstellen, anstatt einnsIDOMFiledirekt zu instanziieren. - Der
nsTPtrArrayArray-Typ wurde entfernt. Seine Funktionalität ist jetzt vollständig aufnsTArrayverfügbar, das jetzt dieSafeElementAt()-Methode bietet, wenn mit einem Zeigertyp instanziiert.
Workers
Es ist nicht mehr möglich, XPCOM-Objekte aus ChromeWorkers zuzugreifen. XPConnect wurde in Worker-Kontexten mit Firefox-Bug 649537 deaktiviert.
XUL
- Ein Fehler in
document.execCommand(), der auftrat, wenn es auf den Wert voncontentDocumentaufgerufen wurde, wurde behoben. Seit Firefox 3 führte dies zu Fehlern, anstatt korrekt zu funktionieren. - Bootstrap-Add-ons können nun Chrome mit einer
chrome.manifest-Datei laden. - XUL-Bilder schrumpfen nun mit dem gleichen 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 Header-Datei
jspubtd.hautomatisch bei Bedarf eingeschlossen. Manuelle Einfügungen vonjspubtd.hund/oderjsapi.hin IDL-Dateien, die jsval oder [implicit_jscontext] verwenden, sind nicht mehr notwendig.
Chrome-Registrierung
- Das
platformversion-Flag kann in der chrome.manifest-Datei verwendet werden, um die Kompatibilität mit der Gecko-Version anzugeben.
Interface-Änderungen
- Die
mozIJSSubScriptLoader.loadSubScript()-Methode lädt nun Skripte aus dem Start-Cache, 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 zur Kompatibilität bis Firefox 9 verfügbar. - Um die Leistung zu verbessern, wurde die Callback-Verarbeitung für asynchrone Places-Datenbank-Updates geändert. Siehe die neuen
mozIVisitInfoCallback.handleResult()undmozIVisitInfoCallback.handleError()-Methoden, die die alte Einzelmethode für Fehler- und Erfolgskonditionsbehandlung ersetzen. - Das
KIND_MAPPED-Attribut desnsIMemoryReporterwurde zugunsten vonKIND_NONHEAPveraltet, neue EinheitstypenUNITS_COUNT_CUMULATIVEundUNITS_PERCENTAGEwurden hinzugefügt. - Das
nsIMemoryReporterManager-Interface hat ein neuesexplicit-Attribut, das die Gesamtgröße der expliziten Speicherzuweisungen berichtet. - Das
nsIMemoryReporterManager-Interface hat ein neuesresident-Attribut, das die Menge des physikalischen Speichers berichtet, der verwendet wird. - Das
nsINetworkLinkService-Interface hat ein neues Attribut,linkType. Dieses Attribut liefert den Typ der verwendeten Netzwerkverbindung. Alle Betriebssysteme geben derzeitLINK_TYPE_UNKNOWNzurück. Die Unterstützung für Android wurde aufgrund wahrgenommener Sicherheitsbedenken zurückgezogen. - Das
nsISelection2-Interface wurde in dasnsISelectionPrivate-Interface integriert. - Das
nsISelection3-Interface wurde in dasnsISelection-Interface integriert. - Das
nsISessionStartup-Attribut staat ist nun einjsvalanstatt eines Strings, aus Leistungsgründen. - Das
nsIDocShell-AttributisActiveist nunfalsefür minimierte Fenster. - Die
nsIDownloadHistory.addDownload()-Methode speichert nun das Ziel, wo der Download im lokalen Dateisystem gespeichert ist.
Entfernte Interfaces
Die folgenden Interfaces waren Implementierungsdetails, die nicht mehr benötigt werden:
nsITimelineServicensIDOMHTMLIsIndexElement
Das nsIWorkerFactory-Interface wurde ebenfalls entfernt. Worker können weiterhin mit den Konstruktoren Worker und ChromeWorker erstellt werden.
Sonstige Änderungen
- Wenn ein Fenster minimiert, wiederhergestellt oder zwischen Vollbild- und Fenstermodus gewechselt wird, empfängt es ein
sizemodechange-Ereignis. - Sie können nun die
extensions.autoDisableScopes-Präferenz verwenden, um die automatische Installation von Add-ons aus bestimmten Add-on-Installationsorten zu deaktivieren. - Die neue
mozSyntheticDocument-Eigenschaft anDocument-Objekten erlaubt 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, wenn Sie zum Beispiel unterschiedliche Benutzeroberflächen in dieser Situation präsentieren möchten (zum Beispiel anders kontextbezogene Einträge hinzufügen, je nach diesem Fall). - Sie können nun einen Filter beim Öffnen von
about:configangeben; zum Beispiel,about:config?filter=sessionstorezeigt nur Einstellungen im Zusammenhang mit Sitzungsverwaltung an.