Hinweise zur Veröffentlichung von Firefox 4 für Entwickler
Firefox 4, das am 22. März 2011 veröffentlicht wurde, verbessert die Leistung, bietet mehr Unterstützung für HTML5 und andere fortschreitende Webtechnologien und erhöht die Sicherheit weiter. Dieser Artikel liefert Informationen über diese Veröffentlichung und welche Funktionen sowohl für Webentwickler, Add-on-Entwickler als auch Entwickler der Gecko-Plattform verfügbar sind.
Funktionen für Webentwickler
Gecko verwendet nun den HTML5-Parser, der Fehler behebt, die Interoperabilität verbessert und die Leistung steigert. Er ermöglicht auch das Einbetten von SVG und MathML direkt in das HTML-Markup.
HTML
- Webformulare
-
Ein Blick auf die Verbesserungen bei Webformularen. Zu diesen Änderungen gehören neue Eingabetypen im
<input>-Element, Datenvalidierung und mehr. - HTML5-Abschnitte
-
Gecko unterstützt jetzt die neuen HTML5-Elemente, die sich auf Abschnitte in einem Dokument beziehen:
<article>,<section>,<nav>,<aside>,<hgroup>,<header>und<footer>. -
Dieses Attribut, das bei allen Elementen üblich ist, wird verwendet, um Inhalte auf einer Webseite zu verbergen, die für den Benutzer momentan nicht relevant sind.
- Andere HTML5-Elemente
-
Gecko unterstützt jetzt auch die folgenden neuen HTML5-Elemente:
<mark>,<figure>, und<figcaption>. - WebSockets
-
Ein Leitfaden zur Verwendung der neuen WebSockets-API für die Echtzeitkommunikation zwischen einer Webanwendung und einem Server. Beachten Sie, dass WebSockets, wie sie in Firefox 4 implementiert sind, nicht mit dem endgültigen Standard kompatibel sind und im Allgemeinen nicht verwendet werden sollten.
Verbesserungen am Canvas
Die folgenden Änderungen wurden an der CanvasRenderingContext2D-Schnittstelle vorgenommen, um unsere <canvas>-Implementierung näher an die Spezifikation anzupassen:
- Die Angabe eines negativen Radius beim Aufruf von
arc()löst jetzt korrekt eineINDEX_SIZE_ERR-Ausnahme aus. - Die Angabe nicht-endlicher Werte beim Aufruf von
createLinearGradient()undcreateRadialGradient()löst jetztNOT_SUPPORTED_ERRanstelle vonSYNTAX_ERRaus. - Das Setzen von
miterLimitauf einen negativen Wert löst keine Ausnahme mehr aus; stattdessen werden nicht-positive Werte ordnungsgemäß ignoriert. - Das Setzen von
lineWidthauf einen negativen Wert löst keine Ausnahme mehr aus; stattdessen werden nicht-positive Werte ordnungsgemäß ignoriert. - Die
putImageData()-Methode unterstützt jetzt die optionalen ParameterdirtyX,dirtyY,dirtyWidthunddirtyHeight.
Verschiedene HTML-Änderungen
<textarea>-Elemente sind nun standardmäßig skalierbar; Sie können dieresize-CSS-Eigenschaft verwenden, um dies zu deaktivieren.canvas.getContextundcanvas.toDataURLlösen keine Ausnahme mehr aus, wenn sie mit nicht erkennbaren Argumenten aufgerufen werden.- Das
<canvas>-Element unterstützt nun die Mozilla-spezifischemozGetAsFile()-Methode, mit der Sie eine speicherbasierte Datei erhalten können, die ein Bild des Inhalts der Leinwand enthält. SieheHTMLCanvasElementfür Details. Canvas2DContext.lineCapundCanvas2DContext.lineJoinlösen keine Ausnahme mehr aus, wenn sie auf einen nicht erkennbaren Wert gesetzt werden.Canvas2DContext.globalCompositeOperationlöst keine Ausnahme mehr aus, wenn es auf einen nicht erkennbaren Wert gesetzt wird und unterstützt den nicht standardmäßigendarker-Wert nicht mehr.- Die Unterstützung für das veraltete
<spacer>-Element, das in allen anderen Browsern nicht vorhanden war, wurde entfernt. - Das
<isindex>-Element wird bei Erstellung durch Aufruf vonDocument.createElement()jetzt als einfaches Element ohne Eigenschaften oder Methoden erstellt. - Gecko unterstützt jetzt den Aufruf von
click()auf<input>-Elementen, um den Dateiauswahldialog zu öffnen. Siehe das Beispiel im Artikel Using files from web applications. - Das
<input>-Element unterstützt ein neuesmozactionhint-Attribut, mit dem Sie das Etikett für die Eingabetaste auf virtuellen Tastaturen angeben können. <script>-Elemente innerhalb von<iframe>,<noembed>und<noframes>-Elementen werden jetzt ausgeführt, was in früheren Versionen von Firefox nicht der Fall war. Dies entspricht der Spezifikation und stimmt mit dem Verhalten anderer Browser überein.
CSS
- CSS-Übergänge
-
Neue CSS-Übergangsfähigkeiten sind in Firefox 4 verfügbar.
- Berechnete Werte in CSS
-
Die Unterstützung für
-moz-calcwurde hinzugefügt. Damit können Sie<length>-Werte als mathematische Ausdrücke angeben. - Selektorgliederung
-
Unterstützung für
:-moz-any, um Selektoren zu gruppieren und Kombinatoren zu faktorieren. - Unterstützung für Teilrechtecke von Hintergrundbildern
-
Die
-moz-image-rect()-Funktion ermöglicht die Verwendung von Teilrechtecken von Bildern alsbackground-image. - CSS-Touch-Eigenschaften
-
Unterstützung für Touch-Eigenschaften wurde hinzugefügt. Details und reale Artikelnamen folgen später.
- Verwendung beliebiger Elemente als CSS-Hintergründe
-
Sie können die
-moz-elementCSS-Funktion und diedocument.mozSetImageElement()DOM-Funktion verwenden, um beliebige HTML-Elemente als Hintergründe zu verwenden. - Privatsphäre und der :visited-Selektor
-
Änderungen wurden daran vorgenommen, welche Informationen über den Stil besuchter Links mit CSS-Selektoren erlangt werden können. Dies kann einige Webanwendungen beeinträchtigen.
Neue CSS-Eigenschaften
| Eigenschaft | Beschreibung |
-moz-font-feature-settings |
Ermöglicht Ihnen, erweiterte Funktionen von OpenType-Schriften anzupassen. |
-moz-tab-size |
Gibt die Breite in Leerschritten eines Tabulatorzeichens (U+0009) beim Rendern von Text an. |
resize |
Ermöglicht Ihnen die Kontrolle über die Dimensionen, in denen ein Element skaliert werden darf. |
Neue CSS-Pseudoklassen
| Pseudoklasse | Beschreibung |
:-moz-handler-crashed |
Wird verwendet, um Elemente zu stylen, deren Plugins abgestürzt sind. |
:-moz-placeholder |
Wird auf Platzhaltertext in Formularfeldern angewendet. |
:-moz-submit-invalid |
Wird auf die Schaltfläche zum Absenden von Formularen angewendet, wenn eines oder mehrere Felder des Formulars nicht validiert werden. |
:-moz-window-inactive |
Wird auf Elemente in inaktiven Fenstern angewendet. |
:invalid |
Wird automatisch auf <input>-Felder angewendet, wenn
deren Inhalte ungültig sind.
|
:optional |
Wird automatisch auf <input>-Felder angewendet, die
das required-Attribut nicht spezifizieren.
|
:required |
Wird automatisch auf <input>-Felder angewendet, die
das required-Attribut spezifizieren.
|
:valid |
Wird automatisch auf <input>-Felder angewendet, wenn
deren Inhalte erfolgreich validiert werden.
|
Neue CSS-Pseudoselektoren
| Pseudoselektor | Beschreibung |
:-moz-focusring |
Ermöglicht es Ihnen, das Erscheinungsbild eines Elements anzugeben, wenn Gecko glaubt, dass eine Fokusanzeige gerendert werden sollte. |
Neue CSS-Funktionen
| Funktion | Beschreibung |
:-moz-any |
Ermöglicht es Ihnen, Selektoren zu gruppieren und Kombinatoren zu faktorieren. |
-moz-calc |
Ermöglicht es, <length>-Werte als
mathematische Ausdrücke anzugeben.
|
-moz-element |
Ermöglicht es Ihnen, ein beliebiges Element als Hintergrund für
background-image und
background zu verwenden.
|
-moz-image-rect |
Ermöglicht es Ihnen, ein Teilrechteck eines Bildes als
background-image oder
background zu verwenden.
|
Umbenannte CSS-Eigenschaften
| Alter Name | Neuer Name | Anmerkungen |
|---|---|---|
-moz-background-size |
background-size |
Der Name -moz-background-size wird nicht mehr unterstützt. |
-moz-border-radius |
border-radius |
Der alte Name wird für eine begrenzte Zeit unterstützt, um Ihnen Zeit zu geben, Ihre Websites zu aktualisieren. Rendering-Änderungen wurden auch vorgenommen, um die neueste Version der Spezifikation zu erfüllen. |
-moz-box-shadow |
box-shadow |
Verschiedene CSS-Änderungen
- Die
text-shadow-Eigenschaft begrenzt jetzt den Unschärferadius aus Gründen der Sanität und Leistung auf 300px. - Die
overflow-Eigenschaft gilt nicht mehr für Tabellen-Gruppen-Elemente (<thead>,<tbody>, und<tfoot>). - Die
-moz-appearance-Eigenschaft unterstützt jetzt den-moz-win-borderless-glass-Wert, der ein rahmenloses Aero Glass-Aussehen auf ein Element anwendet. - Das
-moz-device-pixel-ratio-Medienmerkmal wurde hinzugefügt, das die Verwendung des Verhältnisses von Gerätepixeln pro CSS-Pixel in Medienabfragen ermöglicht. - Geckos Behandlung von CSS-
<length>-Einheiten wurde überarbeitet, um besser mit anderen Browsern übereinzustimmen und absolute Längen genauer in Bildschirmpixel basierend auf dem DPI des Geräts umzusetzen.
Grafik und Video
- WebGL
-
Der sich entwickelnde WebGL-Standard wird jetzt von Firefox unterstützt.
- Unterstützung für WebM-Video
-
Das neue offene WebM-Videoformat wird von Gecko 2.0 unterstützt.
- SVG-Animation mit SMIL
-
Unterstützung für SMIL-Animation von SVG ist jetzt verfügbar.
- Verwendung von SVG als Bilder und als CSS-Hintergründe
-
Sie können jetzt SVG mit dem
<img>-Element sowie einem CSS-background-imageverwenden. - Medien-
buffered-Attribut-Unterstützung -
Das
buffered-Attribut auf<video>und<audio>-Elementen wird jetzt unterstützt, sodass Sie bestimmen können, welche Bereiche einer Mediendatei gepuffert wurden. DasTimeRanges-DOM-Interface wurde implementiert, um dies zu unterstützen. - Medien-
preload-Attribut -
Das
preload-Attribut aus der HTML5-Spezifikation wurde implementiert, das das zuvor implementierte (und nicht mehr unterstützte)autobuffer-Attribut ersetzt. Dies betrifft die<video>und<audio>-Elemente sowie diensIDOMHTMLMediaElement-Schnittstelle. - Verbesserungen bei der SVG-Textpositionierung
-
Sie können jetzt Listen für die Werte der
x,y,dxunddy-Eigenschaften auf SVG-<text>und<tspan>-Elementen angeben. Dies ermöglicht es Ihnen, die Positionierung jedes Zeichens in einer Zeichenkette individuell zu kontrollieren.
DOM
- JavaScript typisierte Arrays
-
Unterstützung für JavaScript typisierte Arrays wurde hinzugefügt; dies ermöglicht es Ihnen, Pufferspeicher mit Rohdaten mithilfe von nativen Datentypen zu manipulieren. Mehrere APIs nutzen dies, darunter die File API, WebGL, und WebSockets.
- Ermitteln von Grenzrechtecken für Bereiche
-
Das
Range-Objekt hat jetzt die Methodenrange.getClientRects()undrange.getBoundingClientRect(). - Erfassen von Mausereignissen auf beliebigen Elementen
-
Unterstützung für die Internet Explorer-ursprünglichen
setCapture()- undreleaseCapture()-APIs wurde hinzugefügt. Siehe Firefox-Bug 503943. - Manipulation des Browserverlaufs
-
Das vorhandene Dokumentenverlauf-Objekt, das über das
window.history-Objekt verfügbar ist, unterstützt jetzt die neuen HTML5-MethodenpushState()undreplaceState(). - Animationen mit
MozBeforePaint -
Ein neues Ereignis wurde hinzugefügt, das in Verbindung mit der
window.mozRequestAnimationFrame()-Methode und derwindow.mozAnimationStartTime-Eigenschaft eine Möglichkeit bietet, Animationen, die synchronisiert sind, zu erstellen. - Unterstützung für Touch- und Multi-Touch-Ereignisse
-
Unterstützung für Touch- und Multi-Touch-Ereignisse wurde hinzugefügt.
HTML-Element-DOM-Schnittstellen wurden geändert
Für mehrere HTML-Elemente wurden deren DOM-Schnittstellen an die gemäß der HTML5-Spezifikation erforderlichen angepasst, wie unten gezeigt.
| Schnittstelle in Firefox 3.6 | Schnittstelle in Firefox 4 | HTML-Element |
|---|---|---|
HTMLSpanElement |
HTMLElement |
<abbr>, <acronym>, <address>, <b>, <bdo>, <big>, <blink>, <center>, <cite>, <code>, <dd>, <dfn>, <dt>, <em>, <i>, <kbd>, <listing>, <nobr>, <plaintext>, <s>, <samp>, <small>, <strike>, <strong>, <sub>, <sup>, <tt>, <u>, <var>, <xmp> |
HTMLDivElement |
HTMLElement |
<noembed>, <noframes>, <noscript> |
HTMLWBRElement |
HTMLElement |
<wbr> |
Verschiedene DOM-Änderungen
- Das Umbruchverhalten eines
<textarea>-Elements kann jetzt über das DOM kontrolliert werden, über daswrap-DOM-Attribut. Firefox-Bug 41464 <script>-Elemente, die mitDocument.createElement()erstellt und in ein Dokument eingefügt werden, verhalten sich jetzt standardmäßig entsprechend der HTML5-Spezifikation. Skripte mit demsrc-Attribut werden sofort ausgeführt, sobald sie verfügbar sind (ohne die Reihenfolge beizubehalten) und Skripte ohnesrc-Attribut werden synchron ausgeführt. Um sicherzustellen, dass Skripte mit demsrc-Attribut in der Einfügereihenfolge ausgeführt werden, setzen Sie.async=falsedarauf.- DOM-
File-Objekte bieten jetzt eineurl-Eigenschaft. FormData-Unterstützung fürXMLHttpRequest.- Die
HTMLElement.isContentEditable-Eigenschaft wurde implementiert. - Die
Document.currentScript-Eigenschaft ermöglicht es Ihnen zu bestimmen, welches<script>-Element-Skript gerade ausgeführt wird. Die neuenbeforescriptexecuteundafterscriptexecute-Ereignisse werden vor und nach der Ausführung eines Skript-Elements ausgelöst. - Die
mozSourceNode-Eigenschaft wurde demDataTransfer-Objekt hinzugefügt. - Die
Selection.modify()-Methode wurde demSelection-Objekt hinzugefügt; mit dieser können Sie die aktuelle Textauswahl oder die Position des Cursors im Browserfenster einfach ändern. - Die Unterstützung für das
window.directories-Objekt und dasdirectories-Merkmal fürwindow.open, die in keinem anderen Browser unterstützt werden, wurde entfernt. Verwenden Sie stattdessenpersonalbar. Firefox-Bug 474058 - Die
MouseEvent.mozInputSource-Eigenschaft wurde zu DOM-Benutzeroberflächenereignissen hinzugefügt; diese nicht standardmäßige Eigenschaft ermöglicht es Ihnen festzustellen, welcher Gerätetyp ein Ereignis generiert hat. - Das
Documentreadystatechange-Ereignis wurde implementiert. - Die
Document.createElement()-Methode akzeptiert keine<und>um den Tag-Namen mehr im Quirksmodus. - Die
Element.setCapture()- undDocument.releaseCapture()-Methoden wurden hinzugefügt, um es Elementen zu ermöglichen, Mausereignisse weiterhin zu verfolgen, selbst wenn sich die Maus nach einemmousedown-Ereignis außerhalb ihres normalen Verfolgungsbereichs befindet. - Die
window.mozPaintCount-Eigenschaft wurde hinzugefügt; sie ermöglicht es Ihnen festzustellen, wie oft ein Dokument gemalt wurde. Dies kann nützlich sein, wenn Sie die Leistung Ihrer Webanwendung testen möchten. - Das Sprach-Token wurde aus
Navigator.appVersionundNavigator.userAgententfernt. Verwenden Sie stattdessenNavigator.languageoder denAccept-Language-Header. Firefox-Bug 572656 - Das
XMLHttpRequest-Objekt gibt die Antwort jetzt als JavaScript typisiertes Array sowie als Zeichenkette zurück, unter Verwendung der Gecko-spezifischenmozResponseArrayBuffer-Eigenschaft. - Mausereignisse enthalten jetzt eine
mozPressure-Eigenschaft, die den Druckpegel bei unterstützten druckempfindlichen Eingabegeräten angibt. - Die
URL.createObjectURL()undURL.revokeObjectURL()-Methoden ermöglichen es Ihnen, Objekt-URLs zu erstellen, die lokale Dateien referenzieren. - Die
DOMImplementation.createHTMLDocument()-Methode ermöglicht es Ihnen, ein neues HTML-Dokument zu erstellen. Node.mozMatchesSelector()wirft jetzt eineSYNTAX_ERR-Ausnahme, wenn der angegebene Selektor-String ungültig ist, anstatt fälschlicherweisefalsezurückzugeben.- Sie können jetzt die Werte von SVG-Eigenschaften eines Elements mithilfe der gleichen Kurzschreibweise wie bei CSS setzen. Zum Beispiel:
element.style.fill = 'lime'. Siehestylefür Details. - Die Dokumentwurzel hat jetzt ein ein
privatebrowsingmode-Attribut, das den Zustand des privaten Browsing-Modus beschreibt, einschließlich einer Angabe, ob das private Browsen für die Sitzung vorübergehend oder dauerhaft ist. - Der zweite Parameter der
window.getComputedStyle()-Methode ist jetzt optional, wie in jedem anderen großen Browser auch. - Das DOM-
StorageEvent-Objekt entspricht jetzt der neuesten Version der Spezifikation. - Die minimale zulässige Verzögerung für die
setTimeout()- undsetTimeout()-Methode ist jetzt eine Präferenz,dom.min_timeout_value. - Das
MozAfterPaint-Ereignis wird standardmäßig nicht mehr gesendet, da ein potenzielles Sicherheitsproblem besteht. Es kann durch Setzen einer Präferenz reaktiviert werden.
Sicherheit
- Content Security Policy (CSP)
-
Content Security Policy (CSP) ist ein von Mozilla vorgeschlagener Ansatz, der Webentwicklern und Serveradministratoren helfen soll, zu spezifizieren, wie Inhalte auf ihren Websites interagieren. Ziel ist es, Angriffe wie Cross-Site-Scripting und Dateninjektionen zu erkennen und zu mindern.
- HTTP Strict Transport Security
-
HTTP Strict Transport Security ist ein Sicherheitsmerkmal, das es einer Website ermöglicht, Browser anzuweisen, nur über HTTPS und nicht über HTTP mit ihr zu kommunizieren.
- Der X-FRAME-OPTIONS Antwort-Header
-
Der in Internet Explorer 8 eingeführte HTTP-Antwort-Header X-FRAME-OPTIONS wird jetzt von Firefox unterstützt. Dies ermöglicht es Websites anzugeben, ob ihre Seiten in Frames verwendet werden dürfen und falls ja, ob dies auf den gleichen Ursprung beschränkt werden soll.
- Änderungen beim User-Agent-String
-
Um die Menge an Daten und Entropie zu reduzieren, die in HTTP-Anfragen gesendet werden (siehe Firefox-Bug 572650), wurden die Kryptostärke und Sprach-Token aus dem User-Agent-String entfernt.
JavaScript
Für einen Überblick über die in JavaScript 1.8.5 implementierten Änderungen siehe Neu in JavaScript 1.8.5. JavaScript in Firefox 4 wird eine zusätzliche Einhaltung des ECMAScript 5-Standards haben.
Entwicklerwerkzeuge
- Verwendung der Web-Konsole
-
Das Webkonsole-Werkzeug ist eine nützliche Hilfe zum Debuggen für Webentwickler und Erweiterungsentwickler gleichermaßen.
Hinweis:
Die Fehlerkonsole ist standardmäßig ab Gecko 2.0 deaktiviert. Sie können sie wieder aktivieren, indem Sie die Einstellung devtools.errorconsole.enabled auf true ändern und den Browser neu starten.
Änderungen für Mozilla- und Add-on-Entwickler
Für hilfreiche Tipps zur Aktualisierung bestehender Erweiterungen für Firefox 4 siehe Aktualisierung von Erweiterungen für Firefox 4. Es gibt mehrere wichtige Änderungen, die die Kompatibilität mit bestehenden Add-ons brechen, daher sollten Sie diesen Artikel unbedingt lesen.
Wenn Sie ein Theme-Entwickler sind, sollten Sie Theme-Änderungen in Firefox 4 lesen, um einige kritische Änderungen zu verstehen, die Sie berücksichtigen müssen.
JavaScript-Code-Module
- Services.jsm
-
Das
Services.jsm-Code-Modul stellt Getter bereit, die das Abrufen von Referenzen auf häufig verwendete Dienste wie den Präferenzdienst oder den Fenstermediator erleichtern. - JS-ctypes API
-
Die JS-ctypes-API ermöglicht das Aufrufen C-kompatibler externer Bibliotheksfunktionen ohne Verwendung von XPCOM.
- Add-ons Manager
-
Der neue Add-ons-Manager bietet Informationen über installierte Add-ons, Unterstützung für deren Verwaltung und Möglichkeiten zur Installation und Entfernung von Add-ons.
- PopupNotifications.jsm
-
Das neue Popup-Benachrichtigungsmodul erleichtert es, dem Benutzer attraktive, nicht modale Benachrichtigungen zu präsentieren. Sie können sehen, wie diese API in Verwendung von Popup-Benachrichtigungen verwendet wird.
- Laden von Code-Modulen aus chrome: URLs
-
Sie können jetzt JavaScript-Code-Module mit chrome: URLs laden, sogar innerhalb von JAR-Dateien.
- DownloadLastDir.jsm
-
Das
DownloadLastDir.jsmCode-Modul stellt die globale VariablegDownloadLastDirbereit, die einen String enthält, mit dem Sie herausfinden können, in welches Verzeichnis der letzte Download erfolgte. Dieses Modul kümmert sich für Sie um Probleme im Zusammenhang mit dem privaten Surfen. - Messung der Leistung mit dem PerfMeasurement.jsm Code-Modul
-
Das
PerfMeasurement.jsmCode-Modul bietet eine API zur Messung von CPU-Leistungsdaten in JavaScript-Code.
Verschiedene Änderungen an Code-Modulen
- Das
NetUtil.jsm-Code-Modul bietet jetzt die MethodereadInputStreamToString(), mit der Sie beliebige Bytes aus einem Stream in einen String lesen können, selbst wenn der Stream Nullen enthält. - Das XPCOMUtils.jsm-Code-Modul bietet nun IterSimpleEnumerator() und IterStringEnumerator() Helfer, um XPCOM-Enumeratoren zu durchlaufen.
- Sie können jetzt Worker in JavaScript-Code-Modulen verwenden.
DOM-Änderungen
ChromeWorker-
Ein neuer Typ von Worker für privilegierten Code; auf diese Weise können Sie Dinge wie js-ctypes von Workern in Erweiterungen und Anwendungscode aus verwenden.
- Touch-Ereignisse
-
Unterstützung für (nicht-standardisierte) Touch-Ereignisse wurde hinzugefügt; diese ermöglichen es Ihnen, mehrere Finger zu verfolgen, die sich gleichzeitig auf einem Touchscreen bewegen.
Weitere DOM-Änderungen
- Die neue Benachrichtigung "document-element-inserted" wird gesendet, wenn das Wurzelelement eines Dokuments erstellt wird, aber bevor Skripte darauf ausgeführt werden.
XUL
Änderungen am tabbrowser-Element
Mehrere Änderungen wurden am <xul:tabbrowser>-Element vorgenommen, die Erweiterungen betreffen, die mit Tabs interagieren. Zusätzlich zur Unterstützung von App-Tabs ändern diese Änderungen auch die Tab-Leiste in eine Standard-Toolbar, die es dem Benutzer ermöglicht, Toolbar-Schaltflächen in sie zu ziehen.
- Die Ereignisse
TabClose,TabSelectundTabOpenblubbern nicht mehr zum<xul:tabbrowser>-Element (gBrowser) hoch. Ereignis-Listener für diese Ereignisse solltengBrowser.tabContainerhinzugefügt werden, anstatt direkt zugBrowser. - Das Tab-Kontextmenü ist kein anonymes Kind des
<xul:tabbrowser>mehr. Es kann daher direkt mit XUL-Overlays überlagert werden. Außerdem kann es direkter im JavaScript übergBrowser.tabContextMenuangesprochen werden. Siehe diesen Blogbeitrag für weitere Details. - Die neue
visibleTabs-Eigenschaft wurde hinzugefügt, um Ihnen ein Array der aktuell sichtbaren Tabs zu erhalten; dies ermöglicht es Ihnen zu bestimmen, welche Tabs im aktuellen Tab-Set sichtbar sind. Dies wird beispielsweise von Firefox Panorama verwendet. - Die neue
showOnlyTheseTabs-Methode wurde hinzugefügt; dies wird von Firefox Panorama verwendet. - Die neue
getIcon-Methode wurde hinzugefügt, mit der Sie ein Favicon eines Tabs erhalten können, ohne das<xul:browser>-Element aufrufen zu müssen. - Die neue
tabbrowser.tabs-Eigenschaft wurde hinzugefügt, mit der Sie einfach eine Liste der Tabs in einem<xul:tabbrowser>-Element erhalten können. - Die neuen
pinTab- undunpinTab-Methoden erlauben es Ihnen, Tabs anzuheften und zu lösen (d.h. sie zwischen App-Tabs und regulären Tabs zu wechseln). - Die
getTabModalPromptBox-Methode und dastabModalPromptShowing-Attribut wurden dem<xul:tabbrowser>hinzugefügt, um tab-modale Benachrichtigungen zu unterstützen.
Änderungen an Popups
- Das
<xul:popup>-Element wird nicht mehr unterstützt; stattdessen sollten Sie<xul:menupopup>verwenden. (Wenn Siepopupweiter verwenden, werden Sie auf Probleme stoßen, da das Element keine besondere Bedeutung mehr hat. Beispielsweise kann<xul:menuseparator>transparent erscheinen, wenn es in einem<xul:popup>verwendet wird.) - Das
<xul:menupopup>XUL-Element hat jetzt einetriggerNode-Eigenschaft, die das Knoten angibt, auf dem das Ereignis auftrat, das das Popup öffnete. Dies erforderte auch das Hinzufügen eines Auslöseereignisparameters zuropenPopup-Methode. Außerdem wurde dieanchorNode-Eigenschaft hinzugefügt; sie gibt den Anker zurück, der beim Erstellen des Popups angegeben wurde. - Das
<xul:panel>-Element bietet jetztfade- undflip-Attribute, die verwendet werden, um das Verhalten der neuen "Pfeil"-Benachrichtigungspanels zu konfigurieren.
Unterstützung für Remote XUL entfernt
Remote XUL wird nicht mehr unterstützt; dies betrifft XUL-Dokumente, die über HTTP bereitgestellt werden; außerdem können Sie XUL-Dokumente nicht mehr mit file:// URLs laden, es sei denn, Sie erstellen die Präferenz dom.allow_XUL_XBL_for_file und setzen sie auf true. Es gibt jedoch eine Whitelist-Funktion, die verwendet werden kann, um bestimmten Domains das Laden von Remote XUL zu erlauben.
Verschiedene XUL-Änderungen
- Das
readonly-Attribut funktioniert jetzt korrekt für XBL-Felder. - Das
<xul:resizer>-Element ermöglicht es Ihnen jetzt, daselement-Attribut zu verwenden, um ein Element zum Ändern der Größe anzugeben, statt das Fenster zu ändern. - Das
<xul:resizer>-Element hat jetzt eintype-Attribut, das Ihnen ermöglicht, anzugeben, dass der Resizer für ein Fenster statt für ein Element ist, um zu vermeiden, dass der Fensterverschieber zweimal gezeichnet wird. - Das
"active"-Attribut wird nicht mehr auf aktive XUL-Fenster gesetzt. Stattdessen können Sie die neue:-moz-window-inactive-Pseudoklasse verwenden, um verschiedenen Hintergrundfenstern unterschiedliche Stile zuzuweisen. - Das
emptytext-Attribut ist jetzt veraltet; stattdessen sollten Sieplaceholderverwenden. - Das
<xul:window>-Element bietet jetzt einaccelerated-Attribut; wenn dies wahr ist, ist die Hardwaretabellenschicht genehmigt, das Fenster zu beschleunigen. - Das
<xul:stack>-Element unterstützt jetzt diebottom- undright-Attribute. - Ereignisse werden jetzt während der
<xul:toolbox>-Anpassung ausgelöst, sodass Sie Änderungen an Toolbars erkennen können. - Das
alternatingbackground-Attribut für<xul:tree>-Elemente wird nicht mehr unterstützt; Sie können stattdessen die:-moz-tree-row-Pseudoklasse verwenden. - Die Bookmarks Toolbar-Überlauf-Schaltfläche mit anonid chevronPopup ist nicht mehr anonym; sie hat jetzt die ID "PlacesChevron".
- Das
<xul:tabs>-Element hat jetzt einetabbox-Eigenschaft, die die alte_tabbox-Eigenschaft ersetzt, die veraltet ist (und nie dokumentiert wurde). - XUL
<xul:window>-Elemente haben jetzt dasdrawintitlebar-Attribut; wenn diestrueist, umfasst der Inhaltsbereich des Fensters die Titelleiste und ermöglicht das Zeichnen in die Titelleiste. - Neue
TabPinnedundTabUnpinned-Ereignisse sind verfügbar, sodass Sie erkennen können, wann Tabs angeheftet und gelöst werden. - Das neue
TabAttrModified-Ereignis wird gesendet, wenn sich dielabel,crop,busy,imageoderselected-Attribute eines Tabs ändern. <xul:tab>-Elemente haben jetzt einpinned-Attribut, mit dem Sie feststellen können, ob ein Tab derzeit angeheftet ist.- Die
setDirectionIndicator-Klasse auf<xul:tree>-Elementen hat seit langem nichts mehr getan; jetzt wird sie überhaupt nicht mehr verwendet. - Das
<xul:window>-Element hat jetzt einchromemargin-Attribut, das es Ihnen ermöglicht, den Abstand zwischen Chrome und Inhalt auf jeder Seite eines Fensters festzulegen; Sie können dies verwenden, um z. B. in die Titelleiste zu zeichnen. - Das
<xul:window>-Element hat jetzt eindisablechrome-Attribut, das verwendet wird, um die meisten Chrome-Elemente in einem Fenster zu verbergen, wenn es zum Anzeigen der Benutzeroberfläche innerhalb eines Browsers verwendet wird, z. B.about:addons. - Das
<xul:window>-Element hat jetzt eindisablefastfind-Attribut, das es Ihnen ermöglicht, die Suchleiste in einem Fenster zu deaktivieren, wenn der Inhalt sie nicht unterstützt. Dies wird beispielsweise vom Add-On-Panel verwendet. - Toolbars können jetzt außerhalb von Toolboxes liegen, während sie immer noch als Mitglieder der
<xul:toolbox>angesehen werden, indem Sie dietoolboxid-Eigenschaft der<xul:toolbar>setzen. Außerdem hat das<xul:toolbox>-Element jetzt eineexternalToolbars-Eigenschaft, die alle Toolbars auflistet, die als Mitglieder der Toolbox betrachtet werden. - Unterstützung für das Protokollieren von XUL-Vorlagen zur Fehlersuche wurde hinzugefügt.
UI-Änderungen, die Entwickler betreffen
- Die Add-on-Leiste
-
Die Statusleiste wurde zugunsten der neuen Add-on-Leiste entfernt. Wenn Sie bisher UI zur Statusleiste hinzugefügt haben, müssen Sie Ihre Erweiterung aktualisieren, um diese zu verwenden.
- Verbergen von Browser-Chrome
-
Sie können jetzt das Browser-Chrome verstecken, wenn es wünschenswert ist; zum Beispiel tut
about:addonsdies.
Speicherung
Verschiedene Änderungen an der Speicher-API
- Das
mozIStorageBindingParamsArray-Interface hat jetzt eine Länge-Eigenschaft, die die Anzahl dermozIStorageBindingParams-Objekte im Array angibt. - Die Methode
mozIStorageStatement.bindParameters()gibt jetzt einen Fehler zurück, wenn das angegebenemozIStorageBindingParamsArrayleer ist. - Die Methode
mozIStorageConnection.clone()wurde hinzugefügt, die es Ihnen ermöglicht, eine vorhandene Datenbankverbindung zu klonen. - Die Methode
mozIStorageConnection.asyncClose()wurde hinzugefügt, die es Ihnen ermöglicht, eine Datenbankverbindung asynchron zu schließen; Sie geben einen Rückruf an, der benachrichtigt wird, wenn der Schließvorgang abgeschlossen ist. - Die Methode
mozIStorageConnection.setGrowthIncrement()wurde hinzugefügt, die es Ihnen ermöglicht, die Menge anzugeben, um die eine Datenbankdatei jeweils vergrößert wird, um SQLite bei der Verringerung der Fragmentierung zu unterstützen. - Der
SQLITE_CONSTRAINT-Fehler wird jetzt alsNS_ERROR_STORAGE_CONSTRAINTgemeldet anstelle vonNS_ERROR_FAILURE.
XPCOM
Zusätzlich zu den spezifischen unten referenzierten Änderungen ist es wichtig zu beachten, dass es keine eingefrorenen Schnittstellen mehr gibt. Alle Schnittstellen sind jetzt nicht mehr eingefroren, unabhängig davon, was die Dokumentation sagt. Wir werden die Dokumentation im Laufe der Zeit aktualisieren.
- XPCOM-Änderungen in Gecko 2.0
-
Details zu Änderungen an XPCOM, die die Kompatibilität in Firefox 4 betreffen.
- Components.utils.getGlobalForObject()
-
Diese neue Methode gibt das globale Objekt zurück, mit dem ein Objekt verbunden ist; dies ersetzt einen häufigen Anwendungsfall der jetzt entfernten
__parent__.
Places
- Abfrageergebnisse von Places können jetzt von mehreren Beobachtern beobachtet werden, und Abfragen können asynchron ausgeführt werden. Dies bedeutet, dass es einige Änderungen an den
nsINavHistoryResult,nsINavHistoryQueryOptionsundnsINavHistoryContainerResultNodeSchnittstellen gibt. Wichtiger ist, dass diensINavHistoryResultViewerSchnittstelle innsINavHistoryResultObserverumbenannt wurde. - Einige neue Benachrichtigungen wurden hinzugefügt, um dem Browser zu ermöglichen, den Herunterfahrvorgang des Places-Dienstes zuverlässiger zu verfolgen. Von diesen sind die meisten nur für den internen Gebrauch gedacht, aber die
places-connection-closed-Benachrichtigung ist verfügbar, um zu wissen, wann der Places-Dienst seinen Herunterfahrvorgang abgeschlossen hat. - Der Arraygrößen-Ausgabeparameter für mehrere Places-Methoden ist jetzt optional.
- Die Unterstützung für
<menupopup type="places">wurde entfernt. Stattdessen müssen Sie ein Menü mit Places-Informationen manuell erstellen und füllen, anstatt es für Sie erledigen zu lassen. Siehe Anzeige von Places-Informationen mit Ansichten: Menüansicht für Details.
Schnittstellenänderungen
- Die
nsIDocShell- undnsIWebBrowser-Schnittstellen haben jetzt ein neuesisActive-Attribut, das verwendet wird, um die Optimierung von Codepfaden für derzeit nicht sichtbare Dokumente zu ermöglichen. - Die
nsIMemory-MethodensIMemory.isLowMemory()wurde veraltet. Stattdessen sollten Sie "memory-pressure" Benachrichtigungen verwenden, um auf niedrige Speichersituationen zu achten. - Die API zur Behandlung von Umleitungen auf HTTP-Kanälen wurde geändert, um sie asynchron verarbeiten zu lassen. Jeder Code, der Umleitungsbehandlung mit
nsIChannelEventSink.onChannelRedirect()implementiert, muss aktualisiert werden, umnsIChannelEventSink.asyncOnChannelRedirect()zu verwenden. Diese akzeptiert einen Rückruf-Handler, der aufgerufen werden muss, wenn eine Umleitung erfolgreich abgeschlossen wurde. - Die
nsINavHistoryResultObserver.batching()-Methode wurde hinzugefügt, um eine Möglichkeit zur Gruppierung von Places-Operationen in Batches bereitzustellen, wodurch die Anzahl der bereitgestellten Update-Benachrichtigungen reduziert wird, was die Leistung verbessern kann, wenn Beobachter relativ umfangreiche Aufgaben ausführen (wie das Aktualisieren von Ansichten). - Die lange veraltete
nsIPref-Schnittstelle wurde schließlich entfernt. Wenn Sie noch nicht aufnsIPrefServiceumgestiegen sind, ist jetzt der Zeitpunkt gekommen. - Die
nsISessionStore- undnsISessionStartup-Schnittstellen haben Änderungen erhalten, um die Wiederherstellung von Sitzungen auf Abruf zu unterstützen. Siehe diensISessionStore.restoreLastSession()-Methode. - Die
nsIPrincipal-MethodennsIPrincipal.subsumes()undnsIPrincipal.checkMayLoad()ebenso wie dessenorigin,cspundURI-Attribute sind jetzt aus Skripten verfügbar; vorher waren sie nur aus nativen Code verfügbar. - Die
nsIPrompt-Schnittstelle unterstützt jetzt tab-modale Warnungen; siehe Verwendung von tab-modalen Warnungen für Details. - Die Methode
nsIEffectiveTLDService.getPublicSuffixFromHost()lehnt jetzt Hostname, die mit einem Punkt (".") beginnen, korrekt ab. - Die Methode
mozIJSSubScriptLoader.loadSubScript()hat jetzt ein optionales Argument, das es Ihnen ermöglicht, die Zeichencodierung des Skripts anzugeben; wenn keine bereitgestellt wird, wird ASCII angenommen (wie es immer angenommen wurde). - Die
nsIAccessProxy-Schnittstelle wurde entfernt. Sie war ein Implementierungsdetail, das ihre Nützlichkeit überlebt hat. - Die
nsIContentView- undnsIContentViewManager-Schnittstellen wurden für Firefox Mobile hinzugefügt. Sie stellen eine scrollbare Inhaltsansicht dar, deren Inhalte tatsächlich durch einen separaten Prozess gezeichnet werden. - Die
nsIDiskCacheStreamInternal-Schnittstelle wurde hinzugefügt. - Die
nsIExternalURLHandlerService-Schnittstelle wurde hinzugefügt. - Die
nsISyncJPAKE-Schnittstelle wurde hinzugefügt. Siehe Firefox-Bug 601645. - Die
nsIINIParserWriter-Schnittstelle wurde in Gecko 1.9.2.4 hinzugefügt, um die Bearbeitung von INI-Dateien zu unterstützen.
Speicherverwaltung
- Unfehlbare Speicherzuweisung
-
Mozilla stellt jetzt unfehlbare Memory-Allocator bereit, die garantiert nicht null zurückgeben. Sie sollten diesen Artikel lesen, um zu erfahren, wie sie funktionieren und wie Sie explizit fehlbare und unfehlbare Speicherzuweisung anfordern können.
Weitere Änderungen
- Die meisten der in Firefox enthaltenen Ressourcen wurden in einem einzigen JAR-Archiv,
omni.jar, zusammengeführt, was die Startgeschwindigkeit durch reduzierte Ein-/Ausgabe verbessert. Für Details lesen Sie Über omni.jar. - Die
accessibility.disablecache-Präferenz wird nicht mehr unterstützt; sie war nur für Debugging-Zwecke gedacht und wird nicht mehr verwendet. - Addons, deren GUID sich von einer Version zur anderen ändert, können jetzt ordnungsgemäß aktualisiert werden.
- Als Nebeneffekt der Entfernung plattformexklusiver Verzeichnisse in Erweiterungs-Paketen können Sie keine unterschiedlichen Standardpräferenzen mehr für jede Plattform bereitstellen.
- Standardmäßig werden Erweiterungen nicht mehr entpackt, wenn sie installiert werden, sondern direkt aus der XPI-Datei ausgeführt. Erweiterungen können die unpack-Eigenschaft im Installationsmanifest verwenden, um das alte Verhalten zu wählen. Erweiterungen, die binäre Komponenten verwenden, DLLs, die mit js-ctypes geladen werden, Such-Plugins, Wörterbücher und Fensterikonen müssen angeben, dass sie entpackt werden müssen. Erweiterungen, die SQLite-Datenbanken erstellen, oder Dinge aus dem Dateisystem relativ zum Verzeichnis der Erweiterung kopieren, müssen möglicherweise auch ihren Code ändern.
- Sie können jetzt Erweiterungen, die automatisch bei Anwendungsstart installiert werden, in eine angepasste Firefox-Distribution einfügen.
Sonstige Änderungen
- Nur die Wurzel chrome.manifest-Datei wird geladen
-
Nur die Wurzel
chrome.manifest-Datei wird jetzt geladen; wenn Sie sekundäre Manifestdateien geladen haben möchten, können Sie denmanifest-Befehl in Ihrer Wurzelchrome.manifestverwenden, um sie zu laden. - Gopher-Unterstützung entfernt
-
Das Gopher-Protokoll wird nicht mehr nativ unterstützt. Fortgesetzte Unterstützung ist über die OverbiteFF-Erweiterung verfügbar.
- Verarbeitung von Inhalten in Prozessen
-
Um Unterstützung für Plugins außerhalb des Prozesses und andere Mehrprozessfunktionen bereitzustellen, wurde eine neue API eingeführt, um das Senden von Nachrichten zwischen Prozessen zu unterstützen.
- Bootstrapped-Erweiterungen
-
Sie können jetzt Erweiterungen erstellen, die installiert, deinstalliert, und aktualisiert (oder herabgestuft) werden können, ohne dass ein Neustart des Browsers erforderlich ist.
- Standard-Plugin entfernt
-
Das Standard-Plugin wurde entfernt. Der Anwendungs-Plugin-Ordner wurde ebenfalls standardmäßig entfernt, jedoch ist die Installation von Plugins über diesen Ordner weiterhin möglich. Siehe Firefox-Bug 533891.
- Extension Manager durch Addon Manager ersetzt
-
nsIExtensionManagerwurde durch den AddonManager ersetzt. - Kinder-HWNDs nicht mehr verwendet
-
Firefox erstellt keine Kinder-HWNDs mehr für seine interne Nutzung unter Windows. Wenn Sie eine Erweiterung geschrieben haben, die nativen Code verwendet, um diese HWNDs zu manipulieren, funktioniert Ihre Erweiterung nicht mehr in Firefox 4. Sie müssen entweder auf die Verwendung von HWNDs verzichten oder Ihren Code, der sich auf HWNDs verlässt, in einem NPAPI-Plugin kapseln. Das ist viel Arbeit, also sollten Sie es vermeiden, HWNDs direkt zu verwenden, wenn Sie können.
- Gestenänderungen
-
Die Drei-Finger-Wischgesten nach oben und unten auf Trackpads wurden standardmäßig geändert, um die Firefox Panorama-Ansicht (ehemals TabCandy) zu öffnen und zu schließen. Um diese auf die vorherigen Scroll-to-Top und Scroll-to-Bottom-Befehle zurückzusetzen, öffnen Sie about:config und setzen Sie
browser.gesture.swipe.downaufcmd_scrollBottomundbrowser.gesture.swipe.upaufcmd_scrollTop.