Firefox 4 für Entwickler
Firefox 4, veröffentlicht am 22. März 2011, verbessert die Leistung, bietet mehr Unterstützung für HTML5 und andere sich entwickelnde Webtechnologien und verbessert die Sicherheit weiter. Dieser Artikel bietet Informationen über diese Version und welche Funktionen sowohl für Webentwickler, Add-on-Entwickler als auch Entwickler der Gecko-Plattform zur Verfügung stehen.
Funktionen für Webentwickler
Gecko verwendet jetzt den HTML5-Parser, der Fehler behebt, die Interoperabilität verbessert und die Leistung steigert. Er ermöglicht es auch, SVG und MathML direkt in das HTML-Markup einzubetten.
HTML
- Webformulare
-
Ein Blick auf die Verbesserungen der Webformulare. 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 allen Elementen gemeinsam ist, wird verwendet, um Inhalte auf einer Webseite zu verbergen, die derzeit für den Benutzer 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 in Firefox 4 implementiert, nicht mit dem endgültigen Standard kompatibel sind und im Allgemeinen nicht verwendet werden sollten.
Canvas-Verbesserungen
Die folgenden Änderungen wurden am CanvasRenderingContext2D
-Interface vorgenommen, um unsere <canvas>
-Implementierung näher an die Spezifikation heranzuführen:
- Wenn ein negativer Radius beim Aufruf von
arc()
angegeben wird, wird nun korrekt eineINDEX_SIZE_ERR
-Ausnahme ausgelöst. - Bei Angabe nicht-endlicher Werte beim Aufruf von
createLinearGradient()
undcreateRadialGradient()
wird nunNOT_SUPPORTED_ERR
stattSYNTAX_ERR
ausgelöst. - Wenn
miterLimit
auf einen negativen Wert gesetzt wird, wird nun keine Ausnahme mehr ausgelöst, sondern nicht-positive Werte werden ordnungsgemäß ignoriert. - Wenn
lineWidth
auf einen negativen Wert gesetzt wird, wird keine Ausnahme mehr ausgelöst, sondern nicht-positive Werte werden ordnungsgemäß ignoriert. - Die
putImageData()
-Methode unterstützt jetzt die optionalen ParameterdirtyX
,dirtyY
,dirtyWidth
unddirtyHeight
.
Verschiedene HTML-Änderungen
<textarea>
-Elemente sind jetzt standardmäßig größenveränderbar; Sie können dieresize
-CSS-Eigenschaft verwenden, um dies zu deaktivieren.canvas.getContext
undcanvas.toDataURL
werfen keine Ausnahme mehr, wenn sie mit nicht erkannten Argumenten aufgerufen werden.- Das
<canvas>
-Element unterstützt jetzt die Mozilla-spezifischemozGetAsFile()
-Methode, mit der Sie eine speicherbasierte Datei erhalten können, die ein Bild des Inhalts der Leinwand enthält. SieheHTMLCanvasElement
für weitere Details. Canvas2DContext.lineCap
undCanvas2DContext.lineJoin
werfen keine Ausnahme mehr, wenn sie auf einen nicht erkannten Wert gesetzt werden.Canvas2DContext.globalCompositeOperation
wirft keine Ausnahme mehr, wenn es auf einen nicht erkannten Wert gesetzt wird, und unterstützt den nicht-standardmäßigen Wertdarker
nicht mehr.- Die Unterstützung für das veraltete
<spacer>
-Element, das in allen anderen Browsern nicht vorhanden war, wurde entfernt. - Das
<isindex>
-Element, das durch den Aufruf vonDocument.createElement()
erstellt wird, 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 das Label für die Eingabetaste auf virtuellen Tastaturen festlegen können. <script>
-Elemente innerhalb von<iframe>
,<noembed>
und<noframes>
werden jetzt ausgeführt, was in früheren Versionen von Firefox nicht der Fall war. Dies entspricht der Spezifikation und gleicht das Verhalten anderer Browser an.
CSS
- CSS-Übergänge
-
Neue Unterstützung für CSS-Übergänge ist in Firefox 4 verfügbar.
- Berechnete Werte in CSS
-
Unterstützung für
-moz-calc
wurde hinzugefügt. Damit können Sie<length>
-Werte als mathematische Ausdrücke angeben. - Selektorgruppierung
-
Unterstützung für
:-moz-any
, um Selektoren zu gruppieren und Kombinatoren zu faktorisieren. - Unterstützung von Hintergrundbildunterrechtecken
-
Die
-moz-image-rect()
-Funktion ermöglicht es, Unterrechtecke von Bildern alsbackground-image
zu verwenden. - CSS-Toucheigenschaften
-
Unterstützung für Toucheigenschaften wurde hinzugefügt. Details und reale Artikelnamen 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 Hintergrund zu verwenden. - Datenschutz und der :visited-Selektor
-
Es wurden Änderungen daran vorgenommen, welche Informationen über den Stil besuchter Links mit CSS-Selektoren abgerufen werden können. Dies kann einige Webanwendungen beeinflussen.
Neue CSS-Eigenschaften
Eigenschaft | Beschreibung |
-moz-font-feature-settings |
Ermöglicht die Anpassung fortgeschrittener Funktionen von OpenType-Schriftarten. |
-moz-tab-size |
Gibt die Breite in Leerzeichenzeichen eines Tabzeichens (U+0009) beim Rendern von Text an. |
resize |
Ermöglicht es, die Dimensionen zu steuern, in denen ein Element skalierbar ist. |
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 den Senden-Button in Formularen angewendet, wenn eines oder mehrere Felder des Formulars nicht gültig sind. |
:-moz-window-inactive |
Wird auf Elemente in inaktiven Fenstern angewendet. |
:invalid |
Wird automatisch auf <input> -Felder angewendet, wenn
deren Inhalt ungültig ist.
|
:optional |
Wird automatisch auf <input> -Felder angewendet, die
nicht das required -Attribut spezifizieren.
|
:required |
Wird automatisch auf <input> -Felder angewendet, die
das required -Attribut spezifizieren.
|
:valid |
Wird automatisch auf <input> -Felder angewendet, wenn
deren Inhalt erfolgreich validiert wird.
|
Neue CSS-Pseudoselektoren
Pseudoselektor | Beschreibung |
:-moz-focusring |
Ermöglicht es Ihnen, das Erscheinungsbild eines Elements anzugeben, wenn Gecko der Auffassung ist, dass eine Fokusanzeige gerendert werden sollte. |
Neue CSS-Funktionen
Funktion | Beschreibung |
:-moz-any |
Ermöglicht es, Selektoren zu gruppieren und Kombinatoren zu faktorisieren. |
-moz-calc |
Ermöglicht es, <length> -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 Webseiten zu aktualisieren. Änderungen beim Rendern wurden ebenfalls vorgenommen, um der neuesten Version der Spezifikation zu entsprechen. |
-moz-box-shadow |
box-shadow |
Verschiedene CSS-Änderungen
- Die
text-shadow
-Eigenschaft begrenzt jetzt den Unschärferadius aus Gründen der Vernunft und Leistung auf 300px. - Die
overflow
-Eigenschaft wird nicht mehr auf Tabellengrupenelemente (<thead>
,<tbody>
, und<tfoot>
) angewendet. - Die
-moz-appearance
-Eigenschaft unterstützt jetzt den Wert-moz-win-borderless-glass
, der einem Element ein rahmenloses Aero-Glas-Aussehen verleiht. - Die
-moz-device-pixel-ratio
-Medienfunktion wurde hinzugefügt, sodass das Verhältnis von Gerätepixeln pro CSS-Pixel in Medienabfragen verwendet werden kann. - Geckos Verarbeitung von CSS-
<length>
-Einheiten wurde überarbeitet, um besser mit anderen Browsern übereinzustimmen und absolute Längen genauer in Bildschirmpixelanzahlen 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
-
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 als CSS-background-image
verwenden. - Unterstützung des Medien-Attributs
buffered
-
Das
buffered
-Attribut auf<video>
- und<audio>
-Elementen wird jetzt unterstützt, sodass Sie feststellen können, welche Bereiche einer Mediendatei gepuffert wurden. DasTimeRanges
-DOM-Interface wurde implementiert, um dies zu unterstützen. - Medien-Attribut
preload
-
Das
preload
-Attribut aus der HTML5-Spezifikation wurde implementiert und ersetzt das vorher implementierte (und nicht mehr unterstützte)autobuffer
-Attribut. Dies betrifft die<video>
- und<audio>
-Elemente sowie dasnsIDOMHTMLMediaElement
-Interface. - Verbesserungen der SVG-Textpositionierung
-
Sie können jetzt Listen für die Werte der Eigenschaften
x
,y
,dx
unddy
auf SVG-<text>
- und<tspan>
-Elementen festlegen. Dies ermöglicht es, die Positionierung jedes Zeichens in einer Zeichenfolge individuell zu steuern.
DOM
- JavaScript-Typed Arrays
-
Unterstützung für JavaScript-Typed Arrays wurde hinzugefügt; dies ermöglicht die Manipulation von Puffern, die Rohdaten enthalten, unter Verwendung nativer Datentypen. Mehrere APIs nutzen dies, darunter die File API, WebGL und WebSockets.
- Ermittlung von Begrenzungsrechtecken für Bereiche
-
Das
Range
-Objekt hat jetzt die Methodenrange.getClientRects()
undrange.getBoundingClientRect()
. - Erfassen von Mausereignissen auf beliebigen Elementen
-
Unterstützung für die von Internet Explorer stammenden
setCapture()
- undreleaseCapture()
-APIs wurde hinzugefügt. Siehe Firefox-Bug 503943. - Manipulation des Browserverlaufs
-
Das vorhandene Dokumentverlauf-Objekt, das über das
window.history
-Objekt verfügbar ist, unterstützt jetzt die neuen HTML5-MethodenpushState()
undreplaceState()
. - Animationen unter Verwendung von
MozBeforePaint
-
Ein neues Ereignis wurde hinzugefügt, das in Verbindung mit der
window.mozRequestAnimationFrame()
-Methode und derwindow.mozAnimationStartTime
-Eigenschaft eine Möglichkeit bietet, Animationen zu erstellen, die aufeinander abgestimmt sind. - Touch- und Multi-Touch-Ereignisse
-
Unterstützung für Touch- und Multi-Touch-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 geforderten 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, über daswrap
-DOM-Attribut. Firefox-Bug 41464 <script>
-Elemente, die mitDocument.createElement()
erstellt und in ein Dokument eingefügt werden, verhalten sich nun standardmäßig gemäß der HTML5-Spezifikation. Skripte mit demsrc
-Attribut werden ausgeführt, sobald sie verfügbar sind (ohne Reihenfolge beizubehalten), und Skripte ohne dassrc
-Attribut werden synchron ausgeführt. Um sicherzustellen, dass eingefügte Skripte mit demsrc
-Attribut in der Einfügereihenfolge ausgeführt werden, setzen Sie.async=false
auf ihnen.- DOM
File
-Objekte bieten jetzt eineurl
-Eigenschaft. FormData
-Unterstützung fürXMLHttpRequest
.- Die
HTMLElement.isContentEditable
-Eigenschaft wurde implementiert. - Die
Document.currentScript
-Eigenschaft lässt Sie bestimmen, welches<script>
-Elementscript derzeit ausgeführt wird. Die neuenbeforescriptexecute
undafterscriptexecute
-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 die Cursorposition in einem Browserfenster einfach zu ändern. - 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-Benutzerschnittstellenereignissen hinzugefügt; diese nicht-standardmäßige Eigenschaft lässt Sie die Art des Geräts bestimmen, das ein Ereignis generiert hat. - Das
Document
-readystatechange
-Ereignis wurde implementiert. - Die
Document.createElement()
-Methode akzeptiert in Quirks-Modus keine<
und>
um den Tag-Namen mehr. - Die
Element.setCapture()
- undDocument.releaseCapture()
-Methoden wurden hinzugefügt, sodass Elemente auch weiterhin Mausereignisse verfolgen, selbst wenn sich die Maus nach einemmousedown
-Ereignis außerhalb ihres normalen Verfolgungsbereichs befindet. - Die
window.mozPaintCount
-Eigenschaft wurde hinzugefügt; sie gibt an, wie oft ein Dokument gerendert wurde. Dies kann nützlich sein, wenn Sie die Leistung Ihrer Webanwendung testen. - Der Sprach-Token wurde von
Navigator.appVersion
undNavigator.userAgent
entfernt. Verwenden Sie stattdessenNavigator.language
oder denAccept-Language
-Header. Firefox-Bug 572656 - Das
XMLHttpRequest
-Objekt gibt jetzt die Antwort sowohl als JavaScript-Typed Array als auch als String aus, unter Verwendung der Gecko-spezifischenmozResponseArrayBuffer
-Eigenschaft. - Mausereignisse enthalten jetzt eine
mozPressure
-Eigenschaft, die den Druck auf unterstützten druckempfindlichen Eingabegeräten angibt. - Die
URL.createObjectURL()
- undURL.revokeObjectURL()
-Methoden lassen Sie Objektulrs erstellen, die auf lokale Dateien verweisen. - Die
DOMImplementation.createHTMLDocument()
-Methode lässt Sie ein neues HTML-Dokument erstellen. Node.mozMatchesSelector()
wirft jetzt eineSYNTAX_ERR
-Ausnahme aus, wenn der angegebene Selektorzeichenfolgen ungültig ist, anstelle falschfalse
zurückzugeben.- Sie können jetzt die SVG-Eigenschaftswerte eines Elements mit der gleichen Kurzsyntax wie bei CSS festlegen. Zum Beispiel:
element.style.fill = 'lime'
. Siehestyle
für Details. - Das Dokumentwurzel hat jetzt ein „privatebrowsingmode“-Attribut, das den Zustand des privaten Modus beschreibt, einschließlich eines Hinweises darauf, ob der private Modus für die Sitzung vorübergehend oder dauerhaft ist.
- Der zweite Parameter der
window.getComputedStyle()
-Methode ist jetzt optional, genau wie in jedem anderen großen Browser. - Das DOM-Objekt
StorageEvent
entspricht jetzt der neuesten Version der Spezifikation. - Die minimal zulässige Verzögerung für die
setTimeout()
- undsetTimeout()
-Methoden ist jetzt eine Präferenz,dom.min_timeout_value
. - Das
MozAfterPaint
-Ereignis wird standardmäßig nicht mehr gesendet, aufgrund eines möglichen Sicherheitsproblems. Es kann durch Setzen einer Präferenz wieder aktiviert werden.
Sicherheit
- Content Security Policy (CSP)
-
Die Content Security Policy (CSP) ist ein Vorschlag von Mozilla, mit dem Webdesigner und Serveradministratoren festlegen können, 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
-
HTTP Strict Transport Security ist eine Sicherheitsfunktion, die es einer Website ermöglicht, Browser mitzuteilen, dass sie nur über HTTPS und nicht über HTTP kommunizieren sollte.
- Der X-FRAME-OPTIONS-Response-Header
-
Der von Internet Explorer 8 eingeführte X-FRAME-OPTIONS-HTTP-Response-Header wird jetzt von Firefox unterstützt. Damit können Webseiten angeben, ob ihre Seiten in Frames verwendet werden können und, falls ja, ob dies auf denselben Ursprung beschränkt werden soll.
- User-Agent-String-Änderungen
-
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 Neues in JavaScript 1.8.5. JavaScript in Firefox 4 wird zusätzliche Konformität mit dem ECMAScript 5-Standard besitzen.
Entwicklertools
- Verwendung der Webkonsole
-
Das Tool Webkonsole ist eine nützliche Debug-Hilfe sowohl für Webentwickler als auch für Erweiterungsentwickler.
Hinweis:
Die Fehlerkonsole ist ab Gecko 2.0 standardmäßig deaktiviert. Sie können sie wieder 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 vorhandenen Add-ons brechen, achten Sie also darauf, diesen Artikel zu lesen.
Wenn Sie ein Theme-Entwickler sind, sollten Sie Änderungen an Themes in Firefox 4 lesen, um einige kritische Änderungen zu verstehen, die Sie beachten müssen.
JavaScript-Code-Module
- Services.jsm
-
Das
Services.jsm
-Code-Modul bietet Getter, die es einfach machen, Referenzen auf häufig verwendete Dienste zu erhalten, wie z. B. den Voreinstellungsdienst oder den Fenstervermittler, unter anderem. - JS-ctypes API
-
Die JS-ctypes-API ermöglicht es, C-kompatible Bibliotheksfunktionen ohne 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 Möglichkeiten, Add-ons zu installieren und zu entfernen.
- PopupNotifications.jsm
-
Das neue Popup-Benachrichtigungsmodul macht es einfach, attraktive, nicht-modale Benachrichtigungen an den Benutzer zu präsentieren. Sie können sehen, wie diese API verwendet wird in Verwendung von Popup-Benachrichtigungen.
- Laden von Code-Modulen von chrome:-URLs
-
Sie können jetzt JavaScript-Code-Module mit chrome:-URLs laden, sogar in JAR-Dateien.
- DownloadLastDir.jsm
-
Das
DownloadLastDir.jsm
-Code Modul bietet die globale VariablegDownloadLastDir
, die einen Zeichenfolgen enthält, den Sie verwenden können, um den Pfad des Verzeichnisses zu erfahren, in das der letzte Download stattgefunden hat. Dieses Modul kümmert sich um private Browser-Probleme für Sie. - Messung der Leistung mit dem PerfMeasurement.jsm-Code-Modul
-
Das
PerfMeasurement.jsm
-Code-Modul bietet eine API, um CPU-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 eine Zeichenfolge zu lesen, auch wenn der Stream Nullen enthält. - Das XPCOMUtils.jsm-Code-Modul bietet jetzt IterSimpleEnumerator()- und IterStringEnumerator()-Hilfsmittel zum Iterieren über XPCOM-Aufzählungen.
- Sie können jetzt Arbeiter in JavaScript-Code-Modulen verwenden.
DOM-Änderungen
ChromeWorker
-
Ein neuer Arbeitertyp für privilegierten Code; dies erlaubt die Verwendung von Dingen wie js-ctypes von Arbeitern in Erweiterungen und Anwendungs-Code.
- Touch-Ereignisse
-
Unterstützung für (nicht standardisierte) Touch-Ereignisse wurde hinzugefügt; diese ermöglichen es, mehrere Finger zu verfolgen, die gleichzeitig auf einem Touchscreen bewegt werden.
Weitere DOM-Änderungen
- Die neue "document-element-inserted"-Benachrichtigung wird gesendet, wenn das Wurzelelement eines Dokuments erstellt wird, jedoch bevor Skripte darauf ausgeführt werden.
XUL
Änderungen am Tabbrowser-Element
Mehrere Änderungen wurden am <xul:tabbrowser>
-Element vorgenommen, die Auswirkungen auf Erweiterungen haben, die mit Tabs interagieren. Neben der Unterstützung von App-Tabs werden durch diese Änderungen auch die Tab-Leiste in eine Standard-Toolbar umgewandelt, sodass der Benutzer Toolbar-Schaltflächen hineinziehen kann.
- Die
TabClose
-,TabSelect
- undTabOpen
-Ereignisse steigen nicht mehr bis zum<xul:tabbrowser>
-Element (gBrowser
) auf. Ereignislistener für diese Ereignisse sollten zumgBrowser.tabContainer
und nicht direkt zumgBrowser
hinzugefügt werden. - 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.tabContextMenu
zugegriffen werden. Weitere Details finden Sie in diesem Blogartikel. - Die neue
visibleTabs
-Eigenschaft wurde hinzugefügt, um ein Array der derzeit sichtbaren Tabs zu erhalten; dies ermöglicht es Ihnen zu bestimmen, welche Tabs im aktuellen Tab-Set sichtbar sind. Dies wird zum Beispiel von Firefox Panorama verwendet. - Die neue Methode
showOnlyTheseTabs
wurde hinzugefügt; diese wird von Firefox Panorama verwendet. - Die neue Methode
getIcon
wurde hinzugefügt, die es Ihnen ermöglicht, das Favicon eines Tabs zu erhalten, ohne das<xul:browser>
-Element zu durchsuchen. - Die neue
tabbrowser.tabs
-Eigenschaft wurde hinzugefügt, die es Ihnen einfach ermöglicht, eine Liste der Tabs in einem<xul:tabbrowser>
-Element zu erhalten. - Die neuen Methoden
pinTab
undunpinTab
ermöglichen es Ihnen, Tabs zu pinnen und zu entpinnen (d.h. sie zwischen App-Tabs und regulären Tabs umzuschalten). - Die Methode
getTabModalPromptBox
und das AttributtabModalPromptShowing
wurden zum<xul:tabbrowser>
hinzugefügt, um tab-modale Alarme zu unterstützen.
Änderungen an Pop-ups
- Das
<xul:popup>
-Element wird nicht mehr unterstützt; Sie sollten<xul:menupopup>
stattdessen verwenden. (Wenn Siepopup
weiterhin verwenden, stoßen Sie auf Fehler, 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 Knoten angibt, auf dem das Ereignis aufgetreten ist, das dazu geführt hat, dass das Pop-up geöffnet wurde. Dies erforderte auch die Hinzufügung eines trigger-Ereignisparameters zuropenPopup
-Methode. Außerdem wurde dieanchorNode
-Eigenschaft hinzugefügt; sie gibt den Anker zurück, der beim Erstellen des Pop-ups angegeben wurde. - Das
<xul:panel>
-Element bietet jetztfade
- undflip
-Attribute, die verwendet werden, um das Verhalten neuer "Pfeil"-Stil-Benachrichtigungspaneele zu konfigurieren.
Unterstützung für Remote XUL wurde entfernt
Remote XUL wird nicht mehr unterstützt; dies betrifft XUL-Dokumente, die über HTTP bereitgestellt werden; zudem können XUL-Dokumente nicht mehr über file://
-URLs geladen werden, 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, mit der bestimmte Domains Remote XUL laden können.
Verschiedene XUL-Änderungen
- Das
readonly
-Attribut funktioniert jetzt korrekt für XBL-Felder. - Das
<xul:resizer>
-Element lässt Sie jetzt daselement
-Attribut verwenden, um ein Element anzugeben, das verkleinert werden soll, anstatt das Fenster zu verkleinern. - 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 auf aktiven XUL-Fenstern nicht mehr gesetzt. Stattdessen können Sie die neue:-moz-window-inactive
-Pseudoklasse verwenden, um verschiedenen Hintergrundfenstern verschiedene Stile zuzuweisen. - Das
emptytext
-Attribut ist jetzt veraltet; Sie sollten stattdessenplaceholder
verwenden. - Das
<xul:window>
-Element bietet jetzt einaccelerated
-Attribut; wenn true, darf der Hardware-Schichtmanager das Fenster beschleunigen. - Das
<xul:stack>
-Element unterstützt jetzt die Attributebottom
undright
. - Ereignisse werden jetzt während der Anpassung des
<xul:toolbox>
ausgelöst, sodass Sie Änderungen an Toolbars erkennen können. - Das Attribut
alternatingbackground
für<xul:tree>
-Elemente wird nicht mehr unterstützt; Sie können stattdessen die:-moz-tree-row
-Pseudoklasse verwenden. - Der Überlaufknopf der Lesezeichen-Symbolleiste 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 war). - XUL
<xul:window>
-Elemente haben jetzt dasdrawintitlebar
-Attribut; wenn diestrue
ist, umfasst der Inhaltsbereich des Fensters die Titelleiste, was das Zeichnen in die Titelleiste ermöglicht. - Neue
TabPinned
- undTabUnpinned
-Ereignisse sind verfügbar, die es Ihnen ermöglichen zu erkennen, wann Tabs gepinnt und entpinnt werden. - Das neue
TabAttrModified
-Ereignis wird gesendet, wenn dielabel
-,crop
-,busy
-,image
- oderselected
-Attribute eines Tabs geändert werden. <xul:tab>
-Elemente haben jetzt einpinned
-Attribut, das es Ihnen ermöglicht zu bestimmen, ob ein Tab derzeit gepinnt ist oder nicht.- Die
setDirectionIndicator
-Klasse auf<xul:tree>
-Elementen hat seit einiger Zeit keine Funktion mehr; jetzt wird sie gar nicht mehr verwendet. - Das
<xul:window>
-Element hat jetzt einchromemargin
-Attribut, mit dem Sie den Rand zwischen Chrome und Inhalt an jeder Seite eines Fensters festlegen können; Sie können dies verwenden, um z. B. in die Titelleiste zu zeichnen. - Das
<xul:window>
-Element hat jetzt eindisablechrome
-Attribut; dies wird verwendet, um den größten Teil des Chromes in einem Fenster zu verbergen, wenn es verwendet wird, um in-Browser-UI anzuzeigen, wie etwaabout:addons
. - Das
<xul:window>
-Element hat jetzt eindisablefastfind
-Attribut, das es Ihnen ermöglicht, die Suchleiste in einem Fenster zu deaktivieren, wenn der Inhalt diese nicht unterstützt. Dies wird z. B. vom Add-ons-Panel verwendet. - Symbolleisten können jetzt extern zu Toolboxes sein, während sie weiterhin als Mitglied der
<xul:toolbox>
betrachtet werden, indem dietoolboxid
-Eigenschaft der<xul:toolbar>
festgelegt wird. Außerdem hat das<xul:toolbox>
-Element jetzt eineexternalToolbars
-Eigenschaft, die alle Symbolleisten aufführt, die als Mitglieder der Toolbox betrachtet werden. - Unterstützung für das Protokollieren von XUL-Vorlagen wurde für Debugging-Zwecke 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 bisher UI in der Statusleiste hinzugefügt haben.
- Browser-Chrome verstecken
-
Sie können jetzt das Browser-Chrome verbergen, wenn es wünschenswert ist; zum Beispiel tut
about:addons
dies.
Speicher
Verschiedene Änderungen an der Speicher-API
- Das
mozIStorageBindingParamsArray
-Interface hat jetzt ein length-Attribut, das die Anzahl dermozIStorageBindingParams
-Objekte in der Reihe angibt. - Die Methode
mozIStorageStatement.bindParameters()
gibt jetzt einen Fehler zurück, wenn das angegebenemozIStorageBindingParamsArray
leer ist. - Die Methode
mozIStorageConnection.clone()
wurde hinzugefügt, wodurch Sie eine bestehende Datenbankverbindung klonen können. - Die Methode
mozIStorageConnection.asyncClose()
wurde hinzugefügt, wodurch Sie eine Datenbankverbindung asynchron schließen können; Sie geben einen Callback an, der benachrichtigt wird, wenn der Schließvorgang abgeschlossen ist. - Die Methode
mozIStorageConnection.setGrowthIncrement()
wurde hinzugefügt, mit der Sie angeben können, um wie viel eine Datenbankdatei pro Eintrag wachsen soll, um SQLite dabei zu helfen, die Fragmentierung zu reduzieren. - Der Fehler
SQLITE_CONSTRAINT
wird jetzt alsNS_ERROR_STORAGE_CONSTRAINT
statt alsNS_ERROR_FAILURE
gemeldet.
XPCOM
Zusätzlich zu den unten referenzierten spezifischen Änderungen ist es wichtig zu beachten, dass es keine gefrierte Schnittstellen mehr gibt. Alle Schnittstellen sind jetzt ungefroren, 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 an XPCOM, die die Kompatibilität mit Firefox 4 beeinflussen.
- Components.utils.getGlobalForObject()
-
Diese neue Methode gibt das globale Objekt zurück, mit dem ein Objekt verknüpft ist; dies ersetzt einen häufigen Anwendungsfall des nun 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
-,nsINavHistoryQueryOptions
- undnsINavHistoryContainerResultNode
-Schnittstellen gegeben hat. Wesentlich ist, dass diensINavHistoryResultViewer
-Schnittstelle innsINavHistoryResultObserver
umbenannt wurde. - Einige neue Benachrichtigungen wurden hinzugefügt, um es dem Browser zu ermöglichen, den Herunterfahrprozess des Places-Dienstes zuverlässiger zu verfolgen. Von diesen sind die meisten nur für den internen Gebrauch, aber die
places-connection-closed
-Benachrichtigung ist verfügbar, um zu wissen, wann der Places-Dienst seinen Herunterfahrprozess abgeschlossen hat. - Der Ausgabearraygröße-Parameter von mehreren Places-Methoden ist jetzt optional.
- Unterstützung für
<menupopup type="places">
wurde entfernt. Stattdessen müssen Sie ein Menü manuell erstellen und mit Places-Informationen befüllen, anstatt dies für Sie erledigen zu lassen. Details finden Sie unter Anzeige von Places-Informationen mithilfe von Ansichten: Menüansicht.
Schnittstellenänderungen
- Die
nsIDocShell
- undnsIWebBrowser
-Schnittstellen haben jetzt ein neuesisActive
-Attribut, das zur Optimierung von Codepfaden für Dokumente verwendet wird, die derzeit nicht sichtbar sind. - Die
nsIMemory
-MethodensIMemory.isLowMemory()
ist veraltet. Sie sollten stattdessen "memory-pressure"-Benachrichtigungen verwenden, um auf Speichermangelsituationen zu achten. - Die API zur Bearbeitung von Umleitungen auf HTTP-Kanälen wurde geändert, um es zu ermöglichen, sie asynchron zu verarbeiten. Jeglicher Code, der die Umleitungsbearbeitung mit
nsIChannelEventSink.onChannelRedirect()
implementiert, muss aktualisiert werden, umnsIChannelEventSink.asyncOnChannelRedirect()
zu verwenden. Dies akzeptiert einen Callback-Handler, der aufgerufen werden muss, wenn eine Umleitung erfolgreich abgeschlossen ist. - Die
nsINavHistoryResultObserver.batching()
-Methode wurde hinzugefügt, die es ermöglicht, Places-Operationen in Batchs zusammenzufassen, wodurch die Anzahl der empfangenen Update-Benachrichtigungen reduziert werden, was die Leistung verbessern kann, wenn Beobachter relativ umfangreiche Aufgaben (wie das Aktualisieren von Ansichten) durchführen. - Das seit langem veraltete
nsIPref
-Interface wurde schließlich entfernt. Wenn Sie noch nicht aufnsIPrefService
umgestiegen sind, ist jetzt der richtige Zeitpunkt dafür. - Die
nsISessionStore
- undnsISessionStartup
-Schnittstellen erhielten Änderungen, um die Bedarfswiederherstellung von Sitzungen zu unterstützen. Siehe diensISessionStore.restoreLastSession()
-Methode. - Die
nsIPrincipal
-MethodennsIPrincipal.subsumes()
undnsIPrincipal.checkMayLoad()
, sowie derenorigin
-,csp
- undURI
-Attribute, sind jetzt aus dem Skript verfügbar; vorher waren sie nur aus dem nativen Code verfügbar. - Das
nsIPrompt
-Interface unterstützt jetzt tab-modale Warnungen; siehe Verwendung von tab-modalen Eingabeaufforderungen für Details. - Die
nsIEffectiveTLDService.getPublicSuffixFromHost()
-Methode lehnt jetzt Hostnamen, die mit einem Punkt (".") beginnen, korrekt ab. - Die Methode
mozIJSSubScriptLoader.loadSubScript()
hat jetzt ein optionales Argument, mit dem Sie die Zeichencodierung des Scripts angeben können; wenn keine angegeben wird, wird ASCII angenommen (wie immer angenommen wurde). - Die
nsIAccessProxy
-Schnittstelle wurde entfernt. Sie war ein Implementierungsdetail, das seine Nützlichkeit überlebt hat. - Die
nsIContentView
- undnsIContentViewManager
-Schnittstellen wurden für Firefox Mobile hinzugefügt. Sie stellt eine scrollbaren 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 zum Schreiben in INI-Dateien hinzugefügt.
Speicherverwaltung
- Unfehlbare Speicherzuweisung
-
Mozilla bietet jetzt unfehlbare Speicherzuweiser, die garantiert nicht null zurückgeben. Sie sollten diesen Artikel lesen, um zu lernen, wie sie funktionieren und wie man ausdrücklich fallible versus unfehlbare Speicherzuweisung anfordert.
Weitere Änderungen
- Die meisten der in Firefox enthaltenen Ressourcen wurden zu einem einzigen JAR-Archiv,
omni.jar
, zusammengefasst, was die Startleistung durch Reduzierung von E/A verbessert. Für Details lesen Sie Über omni.jar. - Die Präferenz
accessibility.disablecache
wird nicht mehr unterstützt; sie wurde nur für Debuggingzwecke ausgestellt und wird nicht mehr verwendet. - Add-ons, deren GUID zwischen Versionen wechselt, können jetzt korrekt aktualisiert werden.
- Als Nebeneffekt der Entfernung von plattformspezifischen Verzeichnissen in Add-on-Bundles können Sie keine unterschiedlichen Standardvoreinstellungen mehr für jede Plattform bereitstellen.
- Standardmäßig werden Erweiterungen bei der Installation nicht mehr entpackt, sondern direkt aus der XPI-Datei ausgeführt. Add-ons können das unpack-Property im Installationsmanifest verwenden, um das alte Verhalten auszuwählen. Erweiterungen, die Binärkomponenten, DLLs, die mithilfe von js-ctypes geladen werden, Such-Plugins, Wörterbücher und Fenstericons verwenden, müssen spezifizieren, dass sie entpackt werden müssen. Erweiterungen, die SQLite-Datenbanken erstellen, oder Dinge relativ zum Verzeichnis der Erweiterung dateisysteme übertragen, müssen möglicherweise auch ihren Code ändern.
- Sie können jetzt Erweiterungen einbinden, die automatisch bei der Anwendungserstellung installiert werden in einem angepassten Firefox.
Weitere Änderungen
- Es wird nur noch die root chrome.manifest Datei geladen
-
Es wird nur noch die root
chrome.manifest
-Datei geladen; wenn Sie sekundäre Manifestdateien laden müssen, können Sie den Befehlmanifest
in Ihrer rootchrome.manifest
-Datei verwenden, um sie zu laden. - Entfernte Gopher-Unterstützung
-
Das Gopher-Protokoll wird nicht mehr nativ unterstützt. Fortgesetzte Unterstützung ist über die OverbiteFF-Erweiterung verfügbar.
- Verarbeitung von Ereignissen im Inhaltsprozess
-
Um das Auslagern von Prozessen und andere Mehrprozess-Funktionen zu unterstützen, wurde eine neue API eingeführt, um das Senden von Nachrichten über Prozesse hinweg zu unterstützen.
- Bootstrapping-Erweiterungen
-
Sie können jetzt Erweiterungen erstellen, die installiert, deinstalliert und upgraded (oder downgraded) werden können, ohne einen Browser-Neustart zu erfordern.
- Entferntes Standard-Plugin
-
Das Standard-Plugin wurde entfernt. Der Anwendungs-Plugins-Ordner wurde standardmäßig ebenfalls entfernt, jedoch besteht weiterhin Unterstützung für die Installation von Plugins über diesen Ordner. Siehe Firefox-Bug 533891.
- Erweiterungsmanager ersetzt durch Add-on-Manager
-
nsIExtensionManager
wurde durch den AddonManager ersetzt. - Kind-HWNDs werden nicht mehr verwendet
-
Firefox erstellt keine Kind-HWNDs mehr für seine interne Verwendung unter Windows. Wenn Sie eine Erweiterung geschrieben haben, die nativen Code verwendet, um diese HWNDs zu manipulieren, funktioniert Ihre Erweiterung nicht mehr auf Firefox 4. Sie müssen entweder die Verwendung von HWNDs einstellen oder Ihren Code, der auf HWNDs angewiesen ist, in einem NPAPI-Plugin verwenden. Das ist eine Menge Arbeit, also wenn Sie die direkte Verwendung von HWNDs vermeiden können, sollten Sie das tun.
- Gestenänderungen
-
Die Drei-Finger-Aufwärts- und Abwärtsstreichgesten auf Touchpads wurden so geändert, dass sie standardmäßig die Firefox Panorama-Ansicht öffnen und schließen. Um diese in die vorherigen Scroll-zum-Top und Scroll-zum-Bottom-Befehle zu ändern, öffnen Sie about:config und setzen
browser.gesture.swipe.down
aufcmd_scrollBottom
undbrowser.gesture.swipe.up
aufcmd_scrollTop
.