Firefox 4 Versionshinweise für Entwickler
Firefox 4, das am 22. März 2011 herauskam, verbessert die Leistung, bietet mehr Unterstützung für HTML5 und andere sich entwickelnde Webtechnologien und verbessert die Sicherheit weiter. Dieser Artikel liefert Informationen über diese Veröffentlichung und welche Funktionen für Webentwickler, Add-on-Entwickler und Gecko-Plattformentwickler verfügbar sind.
Funktionen für Webentwickler
Gecko verwendet jetzt den HTML5 Parser, der Fehler behebt, die Interoperabilität verbessert und die Leistung steigert. Es ermöglicht auch das direkte Einbetten von SVG und MathML im HTML-Markup.
HTML
- Webformulare
-
Eine Betrachtung der Verbesserungen bei Webformularen. Zu diesen Änderungen gehören neue
input-Typen im<input>-Element, Datenvalidierung und mehr. - HTML5-Sektionen
-
Gecko unterstützt jetzt die neuen HTML5-Elemente, die sich auf Sektionen in einem Dokument beziehen:
<article>,<section>,<nav>,<aside>,<hgroup>,<header>und<footer>. -
Dieses Attribut, das allen Elementen gemeinsam ist, wird verwendet, um Inhalte auf einer Webseite zu verbergen, die für den Benutzer derzeit 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 die WebSockets-Implementierung in Firefox 4 nicht mit dem endgültigen Standard kompatibel ist und daher nicht allgemein verwendet werden sollte.
Canvas-Verbesserungen
Die folgenden Änderungen wurden an der CanvasRenderingContext2D-Schnittstelle vorgenommen, um unsere <canvas>-Implementierung näher an die Spezifikation zu bringen:
- Bei der Angabe eines negativen Radius bei
arc()wird jetzt korrekterweise eineINDEX_SIZE_ERR-Ausnahme ausgelöst. - Die Verwendung von nicht-finiten Werten bei
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 korrekt ignoriert. - Das Setzen von
lineWidthauf einen negativen Wert löst keine Ausnahme mehr aus; stattdessen werden nicht-positive Werte korrekt ignoriert. - Die
putImageData()-Methode unterstützt jetzt die optionalen ParameterdirtyX,dirtyY,dirtyWidthunddirtyHeight.
Verschiedene HTML-Änderungen
<textarea>-Elemente sind jetzt standardmäßig skalierbar; Sie können dieresizeCSS-Eigenschaft verwenden, um dies zu deaktivieren.canvas.getContextundcanvas.toDataURLlösen keine Ausnahme mehr aus, wenn sie mit nicht erkannten Argumenten aufgerufen werden.- Das
<canvas>-Element unterstützt jetzt die mozilla-spezifischemozGetAsFile()-Methode, die es Ihnen ermöglicht, eine speicherbasierte Datei zu erhalten, die ein Bild des Inhalts des Canvas enthält. SieheHTMLCanvasElementfür Details. Canvas2DContext.lineCapundCanvas2DContext.lineJoinlösen keine Ausnahme mehr aus, wenn sie auf einen nicht erkannten Wert gesetzt werden.Canvas2DContext.globalCompositeOperationlöst keine Ausnahme mehr aus, wenn es auf einen nicht erkannten Wert gesetzt wird, und unterstützt nicht mehr den nicht standardmäßigendarker-Wert.- Die Unterstützung für das veraltete
<spacer>-Element, das in allen anderen Browsern abwesend war, wurde entfernt. - Das
<isindex>-Element wird, wenn es durch Aufrufen vonDocument.createElement()erstellt wird, jetzt als einfaches Element ohne Eigenschaften oder Methoden erstellt. - Gecko unterstützt jetzt das Aufrufen von
click()auf<input>-Elementen, um den Dateiauswahldialog zu öffnen. Siehe das Beispiel im Artikel Verwendung von Dateien aus Webanwendungen. - Das
<input>-Element unterstützt ein neuesmozactionhint-Attribut, mit dem Sie die Bezeichnung für die Eingabetaste auf virtuellen Tastaturen festlegen 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-Übergänge sind in Firefox 4 verfügbar.
- Berechnete Werte in CSS
-
Unterstützung für
-moz-calcwurde hinzugefügt. Dies ermöglicht es,Länge-Werte als mathematische Ausdrücke anzugeben. - Selektor-Gruppierung
-
Unterstützung für
:-moz-any, um Selektoren zu gruppieren und Kombinatoren zu faktorisieren. - Unterstützung für Hintergründe mit Bildausschnitten
-
Die
-moz-image-rect()-Funktion ermöglicht die Verwendung von Bildausschnitten alsbackground-image. - CSS-Touch-Eigenschaften
-
Unterstützung für Touch-Eigenschaften wurde hinzugefügt. Details und Artikelbezeichnungen folgen später.
- Verwendung beliebiger Elemente als CSS-Hintergründe
-
Sie können die
-moz-element-CSS-Funktion und diedocument.mozSetImageElement()DOM-Funktion verwenden, um beliebige HTML-Elemente als Hintergründe zu nutzen. - Datenschutz und der :visited-Selektor
-
Es wurden Änderungen vorgenommen, welche Informationen über den Stil besuchter Links mit CSS-Selektoren ermittelt werden können. Dies kann einige Webanwendungen beeinflussen.
Neue CSS-Eigenschaften
| Eigenschaft | Beschreibung |
-moz-font-feature-settings |
Ermöglicht die Anpassung erweiterter Funktionen von OpenType-Schriften. |
-moz-tab-size |
Gibt die Breite in Leerzeichen eines Tab-Zeichens (U+0009) beim Text-Rendering an. |
resize |
Ermöglicht die Kontrolle der Dimensionen, in denen ein Element skaliert werden darf. |
Neue CSS-Pseudoklassen
| Pseudoklasse | Beschreibung |
:-moz-handler-crashed |
Wird verwendet, um Elemente zu gestalten, deren Plugins abgestürzt sind. |
:-moz-placeholder |
Wird auf Platzhaltertext in Formularfeldern angewendet. |
:-moz-submit-invalid |
Wird auf den Senden-Schalter von Formularen angewendet, wenn eines oder mehrere Formularfelder nicht validieren. |
:-moz-window-inactive |
Wird auf Elemente in inaktiven Fenstern angewendet. |
:invalid |
Wird automatisch auf <input>-Felder angewendet,
wenn ihr Inhalt ungültig ist.
|
:optional |
Wird automatisch auf <input>-Felder angewendet,
die das required-Attribut nicht angeben.
|
:required |
Wird automatisch auf <input>-Felder angewendet,
die das required-Attribut angeben.
|
:valid |
Wird automatisch auf <input>-Felder angewendet,
wenn ihr Inhalt erfolgreich validiert.
|
Neue CSS-Pselektoren
| Pseudo-Selektor | Beschreibung |
:-moz-focusring |
Ermöglicht es, das Erscheinungsbild eines Elements zu bestimmen, wenn Gecko der Meinung ist, dass ein Fokusindikator gerendert werden sollte. |
Neue CSS-Funktionen
| Funktion | Beschreibung |
:-moz-any |
Ermöglicht das Gruppieren von Selektoren und Faktorisieren von Kombinatoren. |
-moz-calc |
Ermöglicht es, Länge-Werte als
mathematische Ausdrücke anzugeben.
|
-moz-element |
Ermöglicht es, ein beliebiges Element als Hintergrund für
background-image und
background zu verwenden.
|
-moz-image-rect |
Ermöglicht es, ein Unterrechteck 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 Sites zu aktualisieren. Rendering-Änderungen wurden ebenfalls vorgenommen, um die neueste Spezifikationsversion zu berücksichtigen. |
-moz-box-shadow |
box-shadow |
Verschiedene CSS-Änderungen
- Die
text-shadow-Eigenschaft begrenzt jetzt den Weichungsradius aus Gründen der Vernunft und Leistung auf 300px. - Die
overflow-Eigenschaft gilt nicht mehr für Tabellengruppenelemente (<thead>,<tbody>, und<tfoot>). - Die
-moz-appearance-Eigenschaft unterstützt jetzt den-moz-win-borderless-glass-Wert, der einem Element ein borderloses Aero Glass-Aussehen verleiht. - Das
-moz-device-pixel-ratio-Medienfeature wurde hinzugefügt, das es ermöglicht, das Verhältnis von Gerätepixeln zu CSS-Pixeln in Media Queries zu verwenden. - Geckos Behandlung von CSS
<length>Einheiten wurde überarbeitet, um besser mit anderen Browsern übereinzustimmen und absolute Längen genauer in Bildschirm-Pixelzahlen basierend auf der DPI des Geräts zu übersetzen.
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
-
Die Unterstützung für SMIL-Animationen von SVG ist jetzt verfügbar.
- Verwendung von SVG als Bilder und als CSS-Hintergründe
-
Sie können SVG jetzt mit dem
<img>-Element sowie als CSSbackground-imageverwenden. - Medien
buffered-Attribut Unterstützung -
Das
buffered-Attribut bei<video>und<audio>-Elementen wird jetzt unterstützt, sodass Sie feststellen können, welche Bereiche einer Mediendatei gepuffert wurden. DieTimeRanges-DOM-Schnittstelle wurde implementiert, um dies zu unterstützen. - Medien
preload-Attribut -
Das
preload-Attribut aus der HTML5-Spezifikation wurde implementiert und ersetzt das zuvor implementierte (und nicht mehr unterstützte)autobuffer-Attribut. Dies betrifft die<video>und<audio>-Elemente sowie diensIDOMHTMLMediaElement-Schnittstelle. - SVG-Textpositionierungsverbesserungen
-
Sie können jetzt Listen für die Werte der
x,y,dxunddy-Eigenschaften auf SVG<text>und<tspan>-Elementen angeben. Dies ermöglicht Ihnen, die Position jedes Zeichens in einer Zeichenkette individuell zu steuern.
DOM
- JavaScript-typisierte Arrays
-
Unterstützung für JavaScript-typisierte Arrays wurde hinzugefügt; dies ermöglicht Ihnen, Puffer mit Rohdaten unter Verwendung nativer Datentypen zu manipulieren. Mehrere APIs verwenden dies, einschließlich der File API, WebGL und WebSockets.
- Erhalt von Begrenzungsrechtecken für Bereiche
-
Das
Range-Objekt hat jetzt die Methodenrange.getClientRects()undrange.getBoundingClientRect(). - Erfassung von Mausereignissen auf beliebigen Elementen
-
Unterstützung für die ursprünglich von Internet Explorer eingeführten
setCapture()undreleaseCapture()-APIs wurde hinzugefügt. Siehe Firefox-Bug 503943. - Manipulation der Browserhistory
-
Das bestehende Dokumethistory-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 Kombination mit der
window.mozRequestAnimationFrame()-Methode und derwindow.mozAnimationStartTime-Eigenschaft eine Möglichkeit bietet, Animationen zu erstellen, die miteinander synchronisiert sind. - Touch- und Mehrfingergesten-Ereignisse
-
Unterstützung für Touch- und Mehrfingergesten-Ereignisse wurde hinzugefügt.
DOM-Schnittstellen von HTML-Elementen haben sich geändert
Mehrere HTML-Elemente haben ihre DOM-Schnittstellen auf die in der HTML5-Spezifikation erforderlichen geändert, 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 gesteuert werden, durch daswrap-DOM-Attribut. Firefox-Bug 41464 <script>-Elemente, die mitDocument.createElement()erstellt und in ein Dokument eingefügt wurden, verhalten sich jetzt standardmäßig gemäß der HTML5-Spezifikation. Skripte mit demsrc-Attribut führen sich aus, sobald sie verfügbar sind (ohne die Reihenfolge beizubehalten) und Skripte ohne dassrc-Attribut führen sich synchron aus. Um sicherzustellen, dass eingefügte Skripte mit demsrc-Attribut in der Einfügereihenfolge ausgeführt werden, setzen Sie.async=falseauf ihnen.- DOM
File-Objekte bieten jetzt eineurl-Eigenschaft. FormData-Unterstützung beiXMLHttpRequest.- Die
HTMLElement.isContentEditable-Eigenschaft wurde implementiert. - Die
Document.currentScript-Eigenschaft ermöglicht es, zu bestimmen, welches<script>-Element gerade ausgeführt wird. Die neuenbeforescriptexecuteundafterscriptexecute-Ereignisse werden vor und nach der Ausführung eines Skriptelements ausgelöst. - Die
mozSourceNode-Eigenschaft wurde demDataTransfer-Objekt hinzugefügt. - Die
Selection.modify()-Methode wurde demSelection-Objekt hinzugefügt; dies ermöglicht es Ihnen, die aktuelle Textauswahl oder den Cursor-Position im Browserfenster leicht zu ändern. - Die Unterstützung für das
window.directories-Objekt und dasdirectories-Feature 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-Benutzerschnittstellen-Ereignissen hinzugefügt; diese nicht standardisierte Eigenschaft ermöglicht es Ihnen, den Typ des Geräts zu bestimmen, das ein Ereignis generiert hat. - Das
Documentreadystatechange-Ereignis wurde implementiert. - Die
Document.createElement()-Methode akzeptiert im quirks mode keine<und>um den Tag-Namen mehr. - Die Methoden
Element.setCapture()undDocument.releaseCapture()wurden hinzugefügt, die es Elementen ermöglichen, Mausereignisse weiter zu verfolgen, auch wenn die Maus nach einemmousedown-Ereignis außerhalb ihres normalen Verfolgungsbereichs ist. - Die
window.mozPaintCount-Eigenschaft wurde hinzugefügt; sie ermöglicht es Ihnen festzustellen, wie oft ein Dokument gerendert wurde. Dies kann nützlich sein, wenn Sie die Leistung Ihrer Webanwendung testen. - Das Sprach-Token wurde aus
Navigator.appVersionundNavigator.userAgententfernt. Verwenden Sie stattdessenNavigator.languageoder denAccept-Language-Header. Firefox-Bug 572656 - Das
XMLHttpRequest-Objekt stellt jetzt die Antwort als JavaScript-typisiertes Array sowie als Zeichenfolge bereit, unter Verwendung der Gecko-spezifischenmozResponseArrayBuffer-Eigenschaft. - Mausereignisse beinhalten jetzt eine
mozPressure-Eigenschaft, die den Druck auf unterstützten druckempfindlichen Eingabegeräten angibt. - Die Methoden
URL.createObjectURL()undURL.revokeObjectURL()ermöglichen es Ihnen, Objekt-URLs zu erstellen, die auf lokale Dateien verweisen. - Die Methode
DOMImplementation.createHTMLDocument()ermöglicht es Ihnen, ein neues HTML-Dokument zu erstellen. Node.mozMatchesSelector()löst jetzt eineSYNTAX_ERR-Ausnahme aus, wenn der angegebene Selektor-String ungültig ist, anstatt inkorrektfalsezurückzugeben.- Sie können jetzt die Werte der SVG-Eigenschaften eines Elements mit derselben Kurzschreibweise wie bei CSS setzen. Zum Beispiel:
element.style.fill = 'lime'. Siehestylefür Details. - Der Dokumentenroot hat jetzt ein
privatebrowsingmode-Attribut, das den Zustand des privaten Surfmodus beschreibt, einschließlich einer Angabe, ob der private Modus für die Sitzung temporär oder permanent ist. - Der zweite Parameter der
window.getComputedStyle()-Methode ist jetzt optional, wie es in jedem anderen großen Browser der Fall ist. - Das DOM
StorageEvent-Objekt entspricht jetzt der neuesten Version der Spezifikation. - Die minimal zulässige Verzögerung für die Methoden
setTimeout()undsetTimeout()ist jetzt eine Einstellung,dom.min_timeout_value. - Das
MozAfterPaint-Ereignis wird standardmäßig nicht mehr gesendet, aufgrund eines möglichen Sicherheitsproblems. Es kann wieder aktiviert werden, indem eine Einstellung gesetzt wird.
Sicherheit
- Content Security Policy (CSP)
-
Content Security Policy (CSP) ist ein Mozilla-Vorschlag, der Webdesigner und Serveradministratoren dabei helfen soll, zu spezifizieren, wie Inhalte auf ihren Websites interagieren. Ziel ist es, Angriffe wie Cross-Site-Scripting- und Dateninjektionsangriffe zu erkennen und zu mildern.
- HTTP Strict Transport Security
-
Die HTTP Strict Transport Security ist ein Sicherheitsfeature, das es einer Website ermöglicht, den Browsern mitzuteilen, dass sie nur über HTTPS und nicht über HTTP kommunizieren sollten.
- Der X-FRAME-OPTIONS-Header
-
Der in Internet Explorer 8 eingeführte X-FRAME-OPTIONS-HTTP-Header wird jetzt von Firefox unterstützt. Dies ermöglicht es den Websites, anzugeben, ob ihre Seiten in Frames verwendet werden dürfen und, wenn ja, dies auf den gleichen Ursprung zu beschränken.
- Änderungen am User-Agent-String
-
Um die Menge an Daten und Entropie, die in HTTP-Anfragen gesendet werden, zu reduzieren (siehe Firefox-Bug 572650), wurden die Kryptographie-Stärke- und Sprach-Token aus dem User-Agent-String entfernt.
JavaScript
Für einen Überblick über die Änderungen in JavaScript 1.8.5, siehe Neu in JavaScript 1.8.5. JavaScript in Firefox 4 wird eine zusätzliche Anpassung an den ECMAScript 5-Standard haben.
Entwickler-Tools
- Verwendung der Web-Konsole
-
Die Web-Konsole ist ein nützliches Debugging-Werkzeug für Webentwickler und Erweiterungsentwickler gleichermaßen.
Hinweis:
Die Fehlerkonsole ist ab Gecko 2.0 standardmäßig deaktiviert. Sie können sie aktivieren, indem Sie die devtools.errorconsole.enabled-Einstellung auf true ändern und den Browser neu starten.
Änderungen für Mozilla- und Add-on-Entwickler
Für hilfreiche Tipps zum Aktualisieren bestehender Erweiterungen für Firefox 4, siehe Aktualisieren von Erweiterungen für Firefox 4. Es gibt mehrere wichtige Änderungen, die die Kompatibilität mit bestehenden Add-ons beeinträchtigen, daher sollten Sie unbedingt diesen Artikel lesen.
Falls Sie ein Theme-Entwickler sind, sollten Sie Thema-Änderungen in Firefox 4 lesen, um einige kritische Änderungen, die Sie bedenken sollten, zu verstehen.
JavaScript-Code-Module
- Services.jsm
-
Das
Services.jsm-Code-Modul bietet Getter, die es einfach machen, Referenzen auf häufig verwendete Services zu erhalten, wie den Präferenzen-Service oder den Fenster-Vermittler, unter anderen. - JS-ctypes API
-
Die JS-ctypes API macht es möglich, C-kompatible ausländische Bibliotheksfunktionen ohne die Verwendung von XPCOM aufzurufen.
- Add-ons Manager
-
Der neue Add-ons Manager bietet Informationen über installierte Add-ons, Unterstützung für deren Verwaltung und bietet Möglichkeiten zur Installation und Entfernung von Add-ons.
- PopupNotifications.jsm
-
Das neue Popup-Benachrichtigungsmodul macht es einfach, attraktive, nicht-modale Benachrichtigungen für den Benutzer anzuzeigen. Sie können sehen, wie Sie diese API in Verwendung von Popup-Benachrichtigungen verwenden.
- Laden von Code-Modulen von chrome: URLs aus
-
Sie können jetzt JavaScript-Code-Module unter Verwendung von chrome: URLs laden, sogar innerhalb von JAR-Dateien.
- DownloadLastDir.jsm
-
Das
DownloadLastDir.jsm-Code-Modul bietet die globale VariablegDownloadLastDir, die einen String enthält, den Sie verwenden können, um den Pfad des Verzeichnisses zu erfahren, in das der letzte Download stattgefunden hat. Dieses Modul behandelt Probleme im Zusammenhang mit dem privaten Surfen für Sie. - Performance-Messung mit dem PerfMeasurement.jsm-Code-Modul
-
Das
PerfMeasurement.jsm-Code-Modul bietet eine API, um CPU-Level-Leistungsdaten in JavaScript-Code zu messen.
Verschiedene Änderungen an Code-Modulen
- Das
NetUtil.jsm-Code-Modul bietet jetzt die MethodereadInputStreamToString(), die es Ihnen ermöglicht, beliebige Bytes aus einem Stream in einen String zu lesen, selbst wenn der Stream Nullen enthält. - Das XPCOMUtils.jsm-Code-Modul bietet jetzt IterSimpleEnumerator() und IterStringEnumerator() Helfer, um über XPCOM-Enumeratoren zu iterieren.
- Sie können jetzt Worker in JavaScript-Code-Modulen verwenden.
DOM-Änderungen
ChromeWorker-
Ein neuer Workertyp für privilegierten Code; dieser ermöglicht es, Dinge wie js-ctypes von Workern in Erweiterungen und Anwendungscode zu verwenden.
- Touch-Ereignisse
-
Unterstützung für (nicht standardmäßige) Touch-Ereignisse wurde hinzugefügt; diese ermöglichen es Ihnen, mehrere Finger, die sich gleichzeitig auf einem Touchscreen bewegen, zu verfolgen.
Andere DOM-Änderungen
- Der neue "document-element-inserted"-Benachrichtigung wird gesendet, wenn das Root-Element eines Dokuments erstellt wird, aber noch keine Skripte darauf ausgeführt werden.
XUL
Änderungen am tabbrowser-Element
Mehrere Änderungen wurden am <xul:tabbrowser>-Element vorgenommen, die die Erweiterungen beeinflussen, die mit Tabs interagieren. Neben der Unterstützung von App-Tabs verändern diese Änderungen auch die Tableiste in eine Standard-Werkzeugleiste, was es dem Benutzer ermöglicht, Werkzeugleiste-Buttons darin zu ziehen.
- Die
TabClose,TabSelectundTabOpen-Ereignisse blubbern nicht mehr zum<xul:tabbrowser>-Element (gBrowser). 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. Es kann auch direkter in JavaScript übergBrowser.tabContextMenuzugegriffen werden. Siehe diesen Blog-Eintrag für weitere Details. - Die neue
visibleTabs-Eigenschaft wurde hinzugefügt, um Ihnen ein Array der aktuell sichtbaren Tabs zu geben; dies ermöglicht es Ihnen, zu bestimmen, welche Tabs im aktuellen Tabset 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 ermöglicht es Ihnen, das FavIcon eines Tabs zu erhalten, ohne das<xul:browser>-Element aufzurufen. - Die neue
tabbrowser.tabs-Eigenschaft bietet eine leicht zugängliche Liste der Tabs in einem<xul:tabbrowser>-Element. - Die neuen
pinTabundunpinTab-Methoden ermöglichen es Ihnen, Tabs zu fixieren 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 Alerts zu unterstützen.
Änderungen an Popups
- Das
<xul:popup>-Element wird nicht mehr unterstützt; Sie sollten<xul:menupopup>stattdessen verwenden. (Wenn Siepopupweiterhin verwenden, werden Sie auf Glitches stoßen, da das Element keine besondere Bedeutung mehr hat. Zum Beispiel kann<xul:menuseparator>transparent erscheinen, wenn es in einem<xul:popup>verwendet wird.) - Das
<xul:menupopup>-XUL-Element hat jetzt einetriggerNode-Eigenschaft, die das Node angibt, auf dem das Ereignis aufgetreten ist, das das Popup geöffnet hat. Dies erforderte auch das Hinzufügen eines Trigger-Ereignisparameters zuropenPopup-Methode. Außerdem wurde dieanchorNode-Eigenschaft hinzugefügt; sie gibt den Anker zurück, der bei der Erstellung des Popups angegeben wurde. - Das
<xul:panel>-Element bietet jetztfadeundflip-Attribute, die verwendet werden, um das Verhalten neuer "Pfeil"-Stil-Benachrichtigungspanels zu konfigurieren.
Entfernte Unterstützung für Remote-XUL
Remote-XUL wird nicht mehr unterstützt; dies betrifft XUL-Dokumente, die über HTTP bereitgestellt werden; auch können Sie keine XUL-Dokumente 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 ein Whitelist-Feature, das verwendet werden kann, um bestimmte Domains zu erlauben, Remote-XUL zu laden.
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 anstelle des Fensters zu vergrößern. - Das
<xul:resizer>-Element hat jetzt eintype-Attribut, das es Ihnen ermöglicht anzugeben, dass der Resizer für ein Fenster anstelle eines Elements ist, um zu verhindern, dass der Fenster-Resizer zweimal gezeichnet wird. - Das
"active"-Attribut wird nicht mehr auf aktiven XUL-Fenstern gesetzt. Stattdessen können Sie jetzt die neue:-moz-window-inactive-Pseudoklasse verwenden, um Hintergrundfenster anders zu stylen. - Das
emptytext-Attribut ist jetzt veraltet; stattdessen sollten Sieplaceholderverwenden. - Das
<xul:window>-Element bietet jetzt einaccelerated-Attribut; wenn dies wahr ist, darf der Hardware-Layer-Manager das Fenster beschleunigen. - Das
<xul:stack>-Element unterstützt jetzt diebottomundright-Attribute. - Ereignisse werden jetzt während der Anpassung von
<xul:toolbox>-Elementen ausgelöst, was es Ihnen ermöglicht, Änderungen an den Werkzeugleisten zu erkennen. - Das
alternatingbackground-Attribut für<xul:tree>-Elemente wird nicht mehr unterstützt; Sie können stattdessen die:-moz-tree-row-Pseudoklasse verwenden. - Der Lesezeichen-Symbolleiste Überlauf-Button mit anonid chevronPopup ist nicht mehr anonym; er hat eine ID von "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 dies wahr ist, umfasst der Inhaltsbereich des Fensters die Titelleiste, sodass in die Titelleiste gezeichnet werden kann. - Neue
TabPinnedundTabUnpinned-Ereignisse sind verfügbar, die es Ihnen ermöglichen, zu erkennen, wenn Tabs fixiert und entfiniert werden. - Das neue
TabAttrModified-Ereignis wird gesendet, wenn sich dielabel,crop,busy,imageoderselected-Attribute eines Tabs ändern. <xul:tab>-Elemente haben jetzt einpinned-Attribut, das Ihnen ermöglicht zu bestimmen, ob ein Tab aktuell fixiert ist.- Die
setDirectionIndicator-Klasse an<xul:tree>-Elementen hat schon seit einiger Zeit nichts mehr gemacht; jetzt wird sie überhaupt nicht mehr verwendet. - Das
<xul:window>-Element hat jetzt einchromemargin-Attribut, das Ihnen ermöglicht, den Rand zwischen Chrome und Inhalt auf jeder Seite eines Fensters festzulegen; Sie können es verwenden, um in die Titelleiste zu zeichnen, zum Beispiel. - Das
<xul:window>-Element hat jetzt eindisablechrome-Attribut; dies wird verwendet, um den meisten Chrome in einem Fenster zu verstecken, wenn es verwendet wird, um in-Browser-UI anzuzeigen, wieabout: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-ons-Panel verwendet. - Werkzeugleisten können jetzt extern zu Werkzeugboxen sein, während sie dennoch als Mitglied der
<xul:toolbox>betrachtet werden, indem dietoolboxid-Eigenschaft der<xul:toolbar>gesetzt wird. Auch das<xul:toolbox>-Element hat jetzt eineexternalToolbars-Eigenschaft, die alle Werkzeugleisten auflistet, die als Mitglieder des Werkzeugkastens angesehen werden. - Unterstützung für das Protokollieren von XUL-Vorlagen für Debugging-Zwecke wurde hinzugefügt.
UI-Änderungen, die Entwickler betreffen
- Die Add-on-Leiste
-
Die Statusleiste wurde zugunsten der neuen Add-on-Leiste entfernt. Sie müssen Ihre Erweiterung aktualisieren, um diese zu verwenden, wenn Sie zuvor UI zur Statusleiste hinzugefügt haben.
- Verstecken von Browser-Chrome
-
Sie können jetzt das Browser-Chrome ausblenden, wenn es wünschenswert ist; zum Beispiel,
about:addonstut dies.
Speicherung
Verschiedene Änderungen an der Speicher-API
- Das Interface
mozIStorageBindingParamsArrayhat jetzt ein length-Attribut, das 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 bestehende Datenbankverbindung zu klonen. - Die Methode
mozIStorageConnection.asyncClose()wurde hinzugefügt, die es Ihnen erlaubt, eine Datenbankverbindung asynchron zu schließen; Sie können einen Callback angeben, der benachrichtigt wird, wenn der Schließvorgang abgeschlossen ist. - Die Methode
mozIStorageConnection.setGrowthIncrement()wurde hinzugefügt, die es Ihnen erlaubt, die Menge anzugeben, um die eine Datenbankdatei zu einem Zeitpunkt vergrößert wird, um SQLite bei der Reduzierung der Fragmentierung zu helfen. - Der
SQLITE_CONSTRAINT-Fehler wird jetzt alsNS_ERROR_STORAGE_CONSTRAINTanstelle alsNS_ERROR_FAILUREgemeldet.
XPCOM
Zusätzlich zu den unten genannten spezifischen Ä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 über Änderungen in XPCOM, die sich auf die Kompatibilität in Firefox 4 auswirken.
- Components.utils.getGlobalForObject()
-
Diese neue Methode gibt das globale Objekt zurück, mit dem ein Objekt assoziiert ist; dies ersetzt einen häufigen Anwendungsfall des jetzt entfernten
__parent__.
Places
- Places-Abfrageergebnisse 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,nsINavHistoryQueryOptionsundnsINavHistoryContainerResultNode-Schnittstellen gibt. Wesentlicher ist jedoch, dass diensINavHistoryResultViewer-Schnittstelle innsINavHistoryResultObserverumbenannt wurde. - Einige neue Benachrichtigungen wurden hinzugefügt, um dem Browser zu ermöglichen, den Herunterfahrvorgang des Places-Dienstes verlässlicher zu verfolgen. Von diesen sind die meisten nur für den internen Gebrauch, aber die
places-connection-closed-Benachrichtigung ist verfügbar, um zu erfahren, wann der Places-Dienst seinen Herunterfahrvorgang abgeschlossen hat. - Der Array-Größe-Ausgabeparameter in mehreren 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 dass es für Sie erledigt wird. Siehe Anzeige von Places-Informationen mithilfe von Ansichten: Menüansicht für Details.
Schnittstellenänderungen
- Die
nsIDocShellundnsIWebBrowser-Schnittstellen haben jetzt ein neuesisActive-Attribut, das verwendet wird, um den Codepfad für Dokumente, die aktuell nicht sichtbar sind, zu optimieren. - Die Methode
nsIMemory.isLowMemory()dernsIMemory-Schnittstelle ist veraltet. Sie sollten stattdessen "memory-pressure"-Benachrichtigungen verwenden, um niedrige Speichersituationen zu erkennen. - Die API zur Handhabung von Weiterleitungen auf HTTP-Kanälen hat sich geändert, um sie asynchron verarbeitbar zu machen. Jeder Code, der die Verarbeitung von Weiterleitungen mit
nsIChannelEventSink.onChannelRedirect()implementiert, muss aktualisiert werden, um stattdessennsIChannelEventSink.asyncOnChannelRedirect()zu verwenden. Dies akzeptiert einen Callback-Handler, der aufgerufen werden muss, wenn eine Weiterleitung erfolgreich abgeschlossen ist. - Die Methode
nsINavHistoryResultObserver.batching()wurde hinzugefügt, die es ermöglicht, Places-Operationen in Stapel zu gruppieren, wodurch die Anzahl der übermittelten Update-Benachrichtigungen reduziert wird, was die Leistung verbessern kann, wenn Beobachter relativ aufwendige Aufgaben (wie das Aktualisieren von Ansichten) ausführen. - Das seit langem veraltete
nsIPref-Interface wurde schließlich entfernt. Wenn Sie noch nicht zunsIPrefServicegewechselt sind, ist jetzt der richtige Zeitpunkt. - Die
nsISessionStoreundnsISessionStartup-Schnittstellen erhielten Änderungen zur Unterstützung des On-Demand-Sitzungswiederherstellung. Siehe diensISessionStore.restoreLastSession()-Methode. - Die
nsIPrincipal-MethodennsIPrincipal.subsumes()undnsIPrincipal.checkMayLoad()sowie derenorigin,cspundURI-Attribute sind jetzt aus Skripten verfügbar; vorher waren sie nur aus nativem Code zugänglich. - Die
nsIPrompt-Schnittstelle unterstützt jetzt tab-modale Alerts; siehe Verwendung von tab-modalen Prompts für Details. - Die Methode
nsIEffectiveTLDService.getPublicSuffixFromHost()lehnt jetzt korrekt Hosts ab, die mit einem Punkt (".") beginnen. - Die Methode
mozIJSSubScriptLoader.loadSubScript()hat jetzt ein optionales Argument, das es Ihnen ermöglicht, das Zeichensatz des Skripts anzugeben; wenn keines angegeben wird, wird ASCII angenommen (wie es immer zuvor angenommen wurde). - Die
nsIAccessProxy-Schnittstelle wurde entfernt. Sie war ein Implementierungsdetail, das seine Nützlichkeit überlebt hat. - Die
nsIContentViewundnsIContentViewManager-Schnittstellen wurden für Firefox Mobil hinzugefügt. Sie stellen eine scrollbare Inhaltsansicht dar, deren Inhalte tatsächlich von einem 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 das Schreiben in INI-Dateien zu unterstützen.
Speicherverwaltung
- Unfehlbare Speicherzuweisung
-
Mozilla bietet jetzt unfehlbare Speicherallokatoren an, die garantiert nicht null zurückgeben. Sie sollten diesen Artikel lesen, um zu lernen, wie sie funktionieren und wie man explizit fehlbare vs. unfehlbare Speicherzuweisung anfordert.
Sonstige Änderungen
- Die meisten der in Firefox enthaltenen Ressourcen wurden in ein einziges JAR-Archiv,
omni.jar, zusammengefasst, was die Startleistung durch die Reduzierung von I/O-Belastung verbessert. Für Details, lesen Sie Über omni.jar. - Die
accessibility.disablecache-Einstellung wird nicht mehr unterstützt; sie war nur zu Debugging-Zwecken ausgesetzt 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 plattformspezifischer Verzeichnisse in Add-on-Bundles kann jetzt für jede Plattform keine standardmäßige Präferenz mehr bereitgestellt werden.
- 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 Fenstersymbole müssen angeben, dass sie entpackt werden müssen. Erweiterungen, die SQLite-Datenbanken erstellen oder Dinge vom Dateisystem relativ zum Verzeichnis der Erweiterung kopieren, müssen möglicherweise auch ihren Code ändern.
- Sie können jetzt Erweiterungen enthalten, die automatisch beim Start der Anwendung installiert werden in einer angepassten Firefox-Distribution.
Sonstige Änderungen
- Nur die root chrome.manifest Datei wird geladen
-
Nur die root
chrome.manifest-Datei wird jetzt geladen; wenn Sie zusätzliche Manifestdateien geladen haben müssen, können Sie denmanifest-Befehl in Ihrer rootchrome.manifestverwenden, um diese zu laden. - Entfernte Gopher-Unterstützung
-
Das Gopher-Protokoll wird nicht mehr nativ unterstützt. Eine weitere Unterstützung ist über die OverbiteFF-Erweiterung verfügbar.
- Inhaltsprozess-Ereignishandhabung
-
Um die Unterstützung für externe Prozesse von Plugins und anderen Mehrprozess-Funktionen zu unterstützen, wurde eine neue API eingeführt, um das Senden von Nachrichten über Prozesse hinweg zu unterstützen.
- Bootstrapped-Erweiterungen
-
Sie können jetzt Erweiterungen erstellen, die installiert, deinstalliert und aktualisiert (oder herabgestuft) werden können, ohne dass ein Browser-Neustart erforderlich ist.
- Standard-Plugin entfernt
-
Das Standard-Plugin wurde entfernt. Der Anwendungsplugins-Ordner wurde ebenfalls standardmäßig entfernt, jedoch besteht weiterhin Unterstützung für die Installation von Plugins über diesen Ordner. Siehe Firefox-Bug 533891.
- Extension Manager durch Addon Manager ersetzt
-
nsIExtensionManagerwurde durch AddonManager ersetzt. - Child HWNDs werden nicht mehr verwendet
-
Firefox erstellt keine Child HWNDs mehr für seine interne Verwendung auf Windows. Wenn Sie eine Erweiterung geschrieben haben, die natives Code verwendet, um diese HWNDs zu manipulieren, funktioniert Ihre Erweiterung auf Firefox 4 nicht mehr. Sie müssen entweder aufhören, HWNDs zu verwenden oder Ihren Code, der sich auf HWNDs verlässt, in einem NPAPI-Plugin umschließen. Das erfordert viel Arbeit, daher sollten Sie, wenn Sie die direkte Verwendung von HWNDs vermeiden können, dies auch tun.
- Änderungen an Gesten
-
Die Drei-Finger-Aufwärts- und Abwärts-Gesten auf Trackpads wurden geändert, um standardmäßig die Firefox Panorama-Ansicht zu öffnen und zu schließen (vormalig TabCandy genannt). Um diese auf die vorherigen Scroll-zu-oben- und Scroll-zu-unten-Befehle zurückzusetzen, öffnen Sie about:config und setzen
browser.gesture.swipe.downaufcmd_scrollBottomundbrowser.gesture.swipe.upaufcmd_scrollTop.