Firefox 4 für Entwickler
Firefox 4, das am 22. März 2011 veröffentlicht wurde, verbessert die Leistung, fügt mehr Unterstützung für HTML5 und andere sich entwickelnde Webtechnologien hinzu und verbessert die Sicherheit weiter. Dieser Artikel enthält Informationen über diese Veröffentlichung und welche Funktionen für Webentwickler, Add-on-Entwickler und Gecko-Plattform-Entwickler verfügbar sind.
Funktionen für Webentwickler
HTML
- Lernen Sie den HTML5-Parser kennen
-
Ein Blick darauf, was der HTML5-Parser für Sie bedeutet und wie Sie SVG und MathML inline in Ihren Inhalt einbetten können.
- Formulare in HTML5
-
Ein Blick auf Verbesserungen bei Webformularen. Zu diesen Änderungen gehören neue Eingabetypen im
<input>
-Element, Datenvalidierung und mehr. - HTML5-Abschnitte
-
Gecko unterstützt nun die neuen HTML5-Elemente, die sich auf Abschnitte in einem Dokument beziehen:
<article>
,<section>
,<nav>
,<aside>
,<hgroup>
,<header>
und<footer>
. -
Dieses Attribut, das für alle Elemente gebräuchlich ist, wird verwendet, um Inhalt auf einer Webseite zu verbergen, der derzeit nicht für den Benutzer relevant ist.
- Andere HTML5-Elemente
-
Gecko unterstützt nun auch die folgenden neuen HTML5-Elemente:
<mark>
,<figure>
, und<figcaption>
. - WebSockets
-
Ein Leitfaden zur Nutzung der neuen WebSockets API für 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 an der Schnittstelle CanvasRenderingContext2D
vorgenommen, um unsere <canvas>
-Implementierung mehr an die Spezifikation anzupassen:
- Die Angabe eines negativen Radius beim Aufrufen von
arc()
wirft jetzt korrekt eineINDEX_SIZE_ERR
-Ausnahme. - Die Angabe nicht-endlicher Werte beim Aufrufen von
createLinearGradient()
undcreateRadialGradient()
wirft nunNOT_SUPPORTED_ERR
anstelle vonSYNTAX_ERR
. - Das Setzen von
miterLimit
auf einen negativen Wert wirft keine Ausnahme mehr; stattdessen werden nicht-positive Werte ordnungsgemäß ignoriert. - Das Setzen von
lineWidth
auf einen negativen Wert wirft keine Ausnahme mehr; stattdessen werden nicht-positive Werte ordnungsgemäß ignoriert. - Die Methode
putImageData()
unterstützt jetzt die optionalen ParameterdirtyX
,dirtyY
,dirtyWidth
unddirtyHeight
.
Verschiedene HTML-Änderungen
<textarea>
-Elemente sind nun standardmäßig anpassbar; Sie können dieresize
CSS-Eigenschaft nutzen, 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 nun die Mozilla-spezifischemozGetAsFile()
Methode, die es Ihnen ermöglicht, eine speicherbasierte Datei zu erhalten, die ein Bild des Canvas-Inhalts enthält. Details finden Sie inHTMLCanvasElement
. 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äß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, wenn es durch Aufruf vonDocument.createElement()
erzeugt wird, wird jetzt als einfaches Element ohne Eigenschaften oder Methoden erstellt. - Gecko unterstützt nun 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 Label für die Eingabetaste auf virtuellen Tastaturen angeben können. <script>
-Elemente, die sich innerhalb von<iframe>
,<noembed>
und<noframes>
Elementen befinden, werden nun ausgeführt, was in früheren Versionen von Firefox nicht der Fall war. Dies entspricht der Spezifikation und passt sich dem 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. Dies ermöglicht es Ihnen,<length>
-Werte als mathematische Ausdrücke anzugeben. - Selektor-Gruppierung
-
Unterstützung für
:-moz-any
zur Gruppierung von Selektoren und zur Faktorisierung von Kombinatoren. - Unterstützung von Subrechtecken im Hintergrundbild
-
Die Funktion
-moz-image-rect()
ermöglicht es, Subrechtecke von Bildern alsbackground-image
zu verwenden. - CSS-Touch-Eigenschaften
-
Unterstützung für Touch-Eigenschaften wurde hinzugefügt. Details und echte 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 Hintergründe zu verwenden. - Privatsphäre und der :visited Selektor
-
Es wurden Änderungen vorgenommen, welche Informationen über den Stil von besuchten Links mithilfe von CSS-Selektoren abgerufen werden können. Dies könnte einige Webanwendungen beeinflussen.
Neue CSS-Eigenschaften
Eigenschaft | Beschreibung |
-moz-font-feature-settings |
Ermöglicht die Anpassung von erweiterten Funktionen von OpenType-Schriften. |
-moz-tab-size |
Gibt die Breite in Leerzeichen eines Tabulatorzeichens (U+0009) beim Rendern von Text an. |
resize |
Ermöglicht die Kontrolle der Dimensionen, in denen ein Element verändert werden kann. |
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 validieren. |
:-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 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 Inhalte erfolgreich validieren.
|
Neue CSS-Pseudoselektoren
Pseudoselektor | Beschreibung |
:-moz-focusring |
Ermöglicht es Ihnen, das Aussehen eines Elements zu spezifizieren, wenn Gecko glaubt, dass es eine Fokusanzeige gerendert haben sollte. |
Neue CSS-Funktionen
Funktion | Beschreibung |
:-moz-any |
Ermöglicht die Gruppierung von Selektoren und die Faktorisierung von Kombinatoren. |
-moz-calc |
Ermöglicht es Ihnen, <length> -Werte als
mathematische Ausdrücke zu spezifizieren.
|
-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 Subrechteck 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 ebenfalls 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 Vernunft und Leistung auf maximal 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 randloses Aero Glass-Aussehen auf ein Element anwendet. - Die
-moz-device-pixel-ratio
Medienfunktion wurde hinzugefügt, wodurch das Verhältnis der Gerätepixel pro CSS-Pixel in Media Queries verwendet werden kann. - Geckos Umgang mit CSS-
<length>
-Einheiten wurde überarbeitet, um besser mit anderen Browsern übereinzustimmen und absolute Längen genauer in Bildschirmpixel-Anzahlen basierend auf der DPI des Geräts zu übersetzen.
Grafiken und Video
- WebGL
-
Der sich entwickelnde WebGL-Standard wird jetzt von Firefox unterstützt.
- Optimierung der Grafikleistung
-
Tipps und Tricks, um die beste Grafik- und Video-Performance in Firefox 4 zu erzielen.
- 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-image
verwenden. - Medien
buffered
-Attribut-Unterstützung -
Das
buffered
-Attribut in<video>
und<audio>
-Elementen wird jetzt unterstützt, was Ihnen erlaubt festzustellen, welche Bereiche einer Mediendatei gepuffert wurden. DieTimeRanges
DOM-Schnittstelle wurde implementiert, um dies zu unterstützen. - Medien
preload
-Attribut -
Das
preload
-Attribut 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 Textpositionierungs-Verbesserungen
-
Sie können jetzt Listen für die Werte der
x
,y
,dx
unddy
-Eigenschaften auf SVG<text>
und<tspan>
-Elementen angeben. Dadurch können Sie die Positionierung jedes Zeichens in einer Zeichenfolge einzeln steuern.
DOM
- JavaScript-Typed-Arrays
-
Unterstützung für JavaScript Typed-Arrays wurde hinzugefügt; dies ermöglicht die Manipulation von Puffern, die rohe Daten mit nativen Datentypen enthalten. Mehrere APIs nutzen dies, darunter die File API, WebGL und WebSockets.
- Erhalten 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. - Manipulieren des Browserverlaufs
-
Das bestehende Dokumentverlauf-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 Methode
window.mozRequestAnimationFrame()
und der Eigenschaftwindow.mozAnimationStartTime
eine Möglichkeit bietet, Animationen zu erstellen, die miteinander synchronisiert sind. - Touch- und Multi-Touch-Ereignisse
-
Unterstützung für Touch- und Multi-Touch-Ereignisse wurde hinzugefügt.
Änderungen an den DOM-Schnittstellen von HTML-Elementen
Mehrere HTML-Elemente haben ihre DOM-Schnittstellen auf die HTML5-Spezifikationen 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 Wrapping 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 nach der HTML5-Spezifikation. Skripte mit demsrc
-Attribut werden ausgeführt, sobald sie verfügbar sind (ohne die Reihenfolge beizubehalten), und Skripte ohne dassrc
-Attribut werden synchron ausgeführt. Um Skript-eingefügte Skripte mit demsrc
-Attribut zur Ausführung in Einfügereihenfolge zu bringen, setzen Sie.async=false
auf diesen.- DOM
File
-Objekte bieten jetzt eineurl
-Eigenschaft. - FormData-Unterstützung für XMLHttpRequest.
- Die
HTMLElement.isContentEditable
-Eigenschaft wurde implementiert. - Die
Document.currentScript
-Eigenschaft lässt Sie bestimmen, welches<script>
-Elementskript gerade ausgeführt wird. Die neuenbeforescriptexecute
undafterscriptexecute
Ereignisse werden vor und nach der Ausführung eines Skriptelements ausgelöst. - Die
mozSourceNode
Eigenschaft wurde zumDataTransfer
Objekt hinzugefügt. - Die
Selection.modify()
Methode wurde zumSelection
Objekt hinzugefügt; dies ermöglicht es Ihnen, die aktuelle Textauswahl oder Cursorposition in einem Browserfenster einfach zu ändern. - Die Unterstützung für das
window.directories
Objekt und diedirectories
-Funktion fürwindow.open
, welche in keinem anderen Browser unterstützt werden, wurde entfernt. Verwenden Sie statt dessenpersonalbar
. Firefox Bug 474058 - Die
MouseEvent.mozInputSource
-Eigenschaft wurde zu den DOM-Benutzeroberflächenereignissen hinzugefügt; diese nicht standardisierte Eigenschaft ermöglicht es Ihnen festzustellen, welcher Gerätetyp ein Ereignis erzeugt hat. - Das
Document
readystatechange
Ereignis wurde implementiert. - Die Methode
Document.createElement()
akzeptiert keine<
und>
um den Tag-Namen im Quirks-Modus mehr. - Die Methoden
Element.setCapture()
undDocument.releaseCapture()
wurden hinzugefügt, wodurch Elemente auch außerhalb ihres normalen Tracking-Bereichs weiterhin Mausereignisse verfolgen können, nachdem einmousedown
-Ereignis aufgetreten ist. - Die
window.mozPaintCount
-Eigenschaft wurde hinzugefügt; sie ermöglicht es Ihnen festzustellen, wie oft ein Dokument gemalt wurde. Dies kann bei Leistungsvergleichstests Ihrer Webanwendung nützlich sein. - Der Sprach-Token wurde von
Navigator.appVersion
undNavigator.userAgent
entfernt. Verwenden SieNavigator.language
oder denAccept-Language
-Header stattdessen. Firefox Bug 572656 - Das
XMLHttpRequest
Objekt zeigt jetzt die Antwort als JavaScript-Typed-Array sowie als Zeichenfolge an, mithilfe der Gecko-spezifischenmozResponseArrayBuffer
-Eigenschaft. - Mausereignisse enthalten jetzt eine
mozPressure
-Eigenschaft, die den Druck auf unterstützten druckempfindlichen Eingabegeräten anzeigt. - Die Methoden
URL.createObjectURL()
undURL.revokeObjectURL()
ermöglichen es Ihnen, Objekt-URLs zu erstellen, die lokale Dateien referenzieren. - Die Methode
DOMImplementation.createHTMLDocument()
ermöglicht es Ihnen, ein neues HTML-Dokument zu erstellen. Node.mozMatchesSelector()
wirft jetzt eineSYNTAX_ERR
-Ausnahme, wenn der angegebene Selektorzeichenfolgen ungültig ist, anstatt fälschlicherweisefalse
zurückzugeben.- Sie können jetzt SVG-Eigenschaftswerte eines Elements mit der gleichen Kurzschreibersyntax wie CSS setzen. Zum Beispiel:
element.style.fill = 'lime'
. Siehestyle
für Details. - Die Dokumentwurzel hat jetzt ein
privatebrowsingmode
Attribut, das den Status des privaten Modus beschreibt, einschließlich eines Indikators dafür, ob der private Modus für die Sitzung vorübergehend oder dauerhaft ist. - Der zweite Parameter der Methode
window.getComputedStyle()
ist jetzt optional, wie in jedem anderen großen Browser. - Das DOM
StorageEvent
Objekt entspricht jetzt der neuesten Version der Spezifikation. - Der Mindestwert für die Verzögerung in den Methoden
setTimeout()
undsetTimeout()
ist jetzt eine Präferenz,dom.min_timeout_value
. - Das
MozAfterPaint
Ereignis wird nicht mehr standardmäßig gesendet, aufgrund eines potenziellen Sicherheitsproblems. Es kann durch Setzen einer Präferenz reaktiviert werden.
Sicherheit
- Content Security Policy (CSP)
-
Content Security Policy (CSP) ist ein von Mozilla vorgeschlagenes Konzept, das Webdesignern und Serveradministratoren dabei helfen soll, zu bestimmen, wie Inhalte auf ihren Websites interagieren. Ziel ist es, Angriffe wie Cross-Site-Scripting und Dateninjektion zu erkennen und zu mildern.
- HTTP Strict Transport Security
-
HTTP Strict Transport Security ist ein Sicherheitsmerkmal, das es einer Website ermöglicht, Browser anzuweisen, nur mit HTTPS statt HTTP zu kommunizieren.
- Der X-FRAME-OPTIONS Antwort-Header
-
Der X-FRAME-OPTIONS HTTP-Antwort-Header, der in Internet Explorer 8 eingeführt wurde, wird jetzt von Firefox unterstützt. Dies ermöglicht es Websites anzuzeigen, ob ihre Seiten in Frames verwendet werden können und, falls ja, ob dies auf denselben Ursprung beschränkt werden soll.
- Benutzer-Agent-String-Änderungen
-
Um die Menge an gesendeten Daten und die Entropie bei HTTP-Anfragen zu reduzieren (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 noch stärker dem ECMAScript 5 Standard entsprechen.
Entwickler-Tools
- Verwendung der Webkonsole
-
Das Webkonsolen-Werkzeug ist eine nützliche Debugging-Hilfe für Webentwickler und Erweiterungsentwickler gleichermaßen.
Hinweis: Die Fehlerkonsole ist standardmäßig ab Gecko 2.0 deaktiviert. Sie können sie reaktivieren, indem Sie die devtools.errorconsole.enabled
Präferenz auf true
setzen 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 Erweiterungen für Firefox 4 aktualisieren. Es gibt mehrere wesentliche Änderungen, die die Kompatibilität mit bestehenden Erweiterungen brechen, lesen Sie also unbedingt diesen Artikel.
Wenn Sie ein Theme-Entwickler sind, sollten Sie Theme-Änderungen in Firefox 4 lesen, um einige kritische Änderungen zu verstehen, die Ihnen bewusst sein sollten.
JavaScript-Code-Module
- Services.jsm
-
Das
Services.jsm
Code-Modul liefert Getter, die es leicht machen, Referenzen auf häufig verwendete Dienste, wie den Präferenzendienst oder den Fenstervermittler, unter anderem zu erhalten. - JS-ctypes API
-
Die JS-ctypes API ermöglicht es, C-kompatible Bibliotheksfunktionen aufzurufen, ohne XPCOM zu verwenden.
- Add-ons Manager
-
Der neue Add-ons-Manager liefert Informationen über installierte Add-ons, unterstützt ihre Verwaltung und bietet Möglichkeiten, Add-ons zu installieren und zu entfernen.
- PopupNotifications.jsm
-
Das neue Pop-up-Benachrichtigungsmodul macht es einfach, dem Benutzer ansprechende, nicht modale Benachrichtigungen anzuzeigen. Sie können sehen, wie Sie diese API in Verwendung von Pop-up-Benachrichtigungen verwenden.
- Laden von Code-Modulen über Chrome: URLs
-
Sie können jetzt JavaScript-Code-Module über chrome: URLs laden, selbst innerhalb von JAR-Dateien.
- DownloadLastDir.jsm
-
Das
DownloadLastDir.jsm
Code-Modul stellt die globale VariablegDownloadLastDir
bereit, 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 Themen im Zusammenhang mit privatem Browsen für Sie. - Messung der Leistung mithilfe des PerfMeasurement.jsm-Code-Moduls
-
Das
PerfMeasurement.jsm
Code-Modul bietet eine API zur Messung von CPU-Level-Leistungsdaten im JavaScript-Code.
Verschiedene Änderungen an Code-Modulen
- Das
NetUtil.jsm
Code-Modul bietet nun 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 nun 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 Worker-Typ für privilegierten Code; dieser ermöglicht es Ihnen, Dinge wie js-ctypes aus Workern in Erweiterungen und Anwendungs-Code zu verwenden.
- Touch-Ereignisse
-
Unterstützung für (nicht standardisierte) Touch-Ereignisse wurde hinzugefügt; diese ermöglichen es Ihnen, mehrere Fingerbewegungen auf einem Touch-Bildschirm gleichzeitig zu verfolgen.
Andere 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 sich auf Erweiterungen auswirken, die mit Tabs interagieren. Zusätzlich zur Unterstützung von App-Tabs, ändern diese Änderungen auch die Tableiste in eine Standard-Werkzeugleiste, die es dem Benutzer ermöglicht, Werkzeugleisten-Schaltflächen darin zu ziehen.
- Die
TabClose
,TabSelect
, undTabOpen
Ereignisse steigen nicht mehr zum<xul:tabbrowser>
-Element (gBrowser
) auf. Ereignislistener für diese Ereignisse sollten demgBrowser.tabContainer
hinzugefügt werden, anstatt direktgBrowser
. - Das Tab-Kontextmenü ist nicht mehr ein anonymes Kind des
<xul:tabbrowser>
. Es kann daher direkt mit XUL-Overlays überlagert werden. Es kann auch direkter in JavaScript übergBrowser.tabContextMenu
zugegriffen werden. Siehe diesen Blogpost 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, festzustellen, welche Tabs im aktuellen Tab-Set sichtbar sind. Dies wird zum Beispiel von Firefox Panorama verwendet. - Die neue
showOnlyTheseTabs
Methode wurde hinzugefügt; dies wird von Firefox Panorama verwendet. - Die neue
getIcon
Methode wurde hinzugefügt, die es Ihnen ermöglicht, das Favicon eines Tabs zu erhalten, ohne das<xul:browser>
-Element öffnen zu müssen. - Der neue
tabbrowser.tabs
-Eigenschaft ermöglicht es Ihnen, einfach eine Liste der Tabs in einem<xul:tabbrowser>
-Element zu erhalten. - Die neuen
pinTab
undunpinTab
Methoden ermöglichen es Ihnen, Tabs anzuheften und zu lösen (also von App-Tabs zu regulären Tabs zu wechseln). - Die Methoden
getTabModalPromptBox
und das AttributtabModalPromptShowing
wurden dem<xul:tabbrowser>
hinzugefügt, um tab-modale Alerts zu unterstützen.
Änderungen an Pop-ups
- Das
<xul:popup>
-Element wird nicht mehr unterstützt; Sie sollten stattdessen<xul:menupopup>
verwenden. (Wenn Sie weiterhinpopup
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 den Knoten angibt, auf dem das Ereignis aufgetreten ist, das das Popup geöffnet hat. 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-Benachrichtigungspanele zu konfigurieren.
Remote XUL-Unterstützung entfernt
Remote XUL wird nicht mehr unterstützt; dies betrifft XUL-Dokumente, die über HTTP bereitgestellt werden; außerdem können XUL-Dokumente nicht mehr mit 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, die verwendet werden kann, um bestimmten Domains das Laden von Remote XUL zu erlauben.
Verschiedene XUL-Änderungen
- Das
readonly
-Attribut funktioniert nun korrekt für XBL-Felder. - Das
<xul:resizer>
-Element ermöglicht es nun, daselement
Attribut zu verwenden, um ein zu vergrößerndes Element zu spezifizieren, anstatt das Fenster zu vergrößern. - Das
<xul:resizer>
-Element hat jetzt eintype
-Attribut, das es Ihnen ermöglicht anzugeben, dass der Resizer für ein Fenster statt für ein Element 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 die neue:-moz-window-inactive
Pseudoklasse verwenden, um Hintergrundfenstern unterschiedliche Stile zuzuweisen. - Das
emptytext
Attribut ist nun veraltet; Sie sollten stattdessenplaceholder
verwenden. - Das
<xul:window>
-Element bietet jetzt einaccelerated
Attribut; wenn es wahr ist, ist es dem Hardware-Layer-Manager erlaubt, das Fenster zu beschleunigen. - Das
<xul:stack>
-Element unterstützt jetzt die Attributebottom
undright
. - Ereignisse werden jetzt während der
<xul:toolbox>
-Anpassung ausgelöst, sodass Sie Änderungen an Werkzeugleisten erkennen können. - Das
alternatingbackground
Attribut für<xul:tree>
-Elemente wird nicht mehr unterstützt; Sie können die:-moz-tree-row
Pseudoklasse verwenden. - Die Bookmarks Toolbar Overflow-Schaltfläche mit Anonid ChevronPopup ist nicht mehr anonym; sie 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, sodass in die Titelleiste gezeichnet werden kann. - Neue
TabPinned
undTabUnpinned
Ereignisse sind verfügbar, die es Ihnen ermöglichen zu erkennen, wann Tabs angeheftet und gelöst werden. - Das neue
TabAttrModified
-Ereignis wird gesendet, wenn die Attributelabel
,crop
,busy
,image
oderselected
eines Tabs geändert werden. <xul:tab>
-Elemente haben jetzt einpinned
Attribut, mit dem Sie feststellen können, ob ein Tab derzeit angeheftet ist oder nicht.- Die Klasse
setDirectionIndicator
auf<xul:tree>
-Elementen hat seit einiger Zeit nichts mehr bewirkt; jetzt wird sie überhaupt nicht mehr verwendet. - Das
<xul:window>
-Element hat jetzt einchromemargin
-Attribut, das es Ihnen erlaubt, den Abstand zwischen Chrome und Inhalt auf jeder Seite eines Fensters festzulegen; Sie können dies verwenden, um zum Beispiel in die Titelleiste zu zeichnen. - Das
<xul:window>
-Element hat jetzt eindisablechrome
Attribut; dies wird verwendet, um das meiste Chrome in einem Fenster auszublenden, wenn es zur Anzeige von In-Browser-UI verwendet wird, wie zum Beispielabout:addons
. - Das
<xul:window>
-Element hat jetzt eindisablefastfind
Attribut, das es Ihnen erlaubt, die Suchleiste in einem Fenster zu deaktivieren, wenn der Inhalt diese nicht unterstützt. Dies wird zum Beispiel von dem Add-ons-Panel verwendet. - Werkzeugleisten können jetzt außerhalb von Werkzeugkästen, aber dennoch als Mitglied des
<xul:toolbox>
betrachtet werden, indem dietoolboxid
Eigenschaft der<xul:toolbar>
gesetzt wird. Außerdem hat das<xul:toolbox>
Element jetzt eineexternalToolbars
Eigenschaft, die alle Werkzeugleisten auflistet, die als Mitglieder des Werkzeugkastens betrachtet werden. - Unterstützung für die Protokollierung 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. Wenn Sie Benutzerschnittstellen zur Statusleiste hinzugefügt haben, müssen Sie Ihre Erweiterung aktualisieren, um diese zu verwenden.
- Verbergen des Browser-Chromes
-
Sie können jetzt das Chrome des Browsers ausblenden, wenn es wünschenswert ist; zum Beispiel tut dies
about:addons
.
Speicher
Verschiedene Speicher-API-Änderungen
- Die
mozIStorageBindingParamsArray
Schnittstelle hat jetzt einlength
-Attribut, das die Anzahl dermozIStorageBindingParams
-Objekte im Array angibt. - Die
mozIStorageStatement.bindParameters()
Methode gibt jetzt einen Fehler zurück, wenn das angegebenemozIStorageBindingParamsArray
leer ist. - Die
mozIStorageConnection.clone()
Methode wurde hinzugefügt, die es ermöglicht, eine bestehende Datenbankverbindung zu klonen. - Die
mozIStorageConnection.asyncClose()
Methode wurde hinzugefügt, die es Ihnen ermöglicht, eine Datenbankverbindung asynchron zu schließen; Sie spezifizieren einen Rückruf, der benachrichtigt wird, wenn die Schließungsoperation abgeschlossen ist. - Die
mozIStorageConnection.setGrowthIncrement()
Methode wurde hinzugefügt, die es Ihnen ermöglicht, die Menge anzugeben, um die eine Datenbankdatei jedes Mal vergrößert wird, um SQLite bei der Reduzierung von Fragmentierungen zu helfen. - Der
SQLITE_CONSTRAINT
Fehler wird jetzt alsNS_ERROR_STORAGE_CONSTRAINT
anstelle vonNS_ERROR_FAILURE
gemeldet.
XPCOM
Zusätzlich zu den nachfolgend spezifisch genannten Änderungen ist es wichtig zu beachten, dass es keine eingefrorenen Schnittstellen mehr gibt. Alle Schnittstellen sind jetzt nicht eingefroren, unabhängig davon, was die Dokumentation möglicherweise sagt. Wir werden die Dokumentation im Laufe der Zeit aktualisieren.
- XPCOM-Änderungen in Gecko 2.0
-
Details über Änderungen an XPCOM, die sich auf die Kompatibilität in Firefox 4 auswirken.
- Components.utils.getGlobalForObject()
-
Diese neue Methode gibt das globale Objekt zurück, mit welchem ein Objekt assoziiert ist; dies ersetzt einen häufigen Anwendungsfall der jetzt entfernten
__parent__
.
Places
- Places-Abfrageergebnisse können nun von mehreren Beobachtern beobachtet werden, und Abfragen können asynchron ausgeführt werden. Das bedeutet, dass es einige Änderungen an den Schnittstellen
nsINavHistoryResult
,nsINavHistoryQueryOptions
undnsINavHistoryContainerResultNode
gibt. Noch bedeutender ist, dass die SchnittstellensINavHistoryResultViewer
innsINavHistoryResultObserver
umbenannt wurde. - Einige neue Benachrichtigungen wurden hinzugefügt, damit der Browser den Herunterfahrprozess des Places-Dienstes zuverlässiger verfolgen kann. Davon sind die meisten nur für den internen Gebrauch gedacht, aber die Benachrichtigung
places-connection-closed
ist verfügbar, um zu wissen, wann der Places-Dienst seinen Herunterfahrprozess abgeschlossen hat. - Der Array-Größenausgabeparameter 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 dies für Sie zu erledigen. Siehe Places-Informationen mit Ansichten anzeigen: Menüansicht für Details.
Schnittstellenänderungen
- Die Schnittstellen
nsIDocShell
undnsIWebBrowser
haben jetzt ein neuesisActive
-Attribut, das verwendet wird, um die Optimierung von Codepfaden für Dokumente zu ermöglichen, die derzeit nicht sichtbar sind. - Die Methode
nsIMemory.isLowMemory()
dernsIMemory
-Schnittstelle wurde veraltet. Sie sollten "memory-pressure"-Benachrichtigungen verwenden, um Speichermangelsituationen zu überwachen. - Die API zur Behandlung von Weiterleitungen auf HTTP-Channels hat sich geändert, um ihre Verarbeitung asynchron zu ermöglichen. Jeder Code, der die Weiterleitungshandhabung mit
nsIChannelEventSink.onChannelRedirect()
implementiert, muss aktualisiert werden, um stattdessennsIChannelEventSink.asyncOnChannelRedirect()
zu verwenden. Diese akzeptiert einen Rückruf-Handler, der aufgerufen werden muss, wenn eine Weiterleitung erfolgreich abgeschlossen ist. - Die Methode
nsINavHistoryResultObserver.batching()
wurde hinzugefügt, wodurch eine Möglichkeit zum Gruppieren von Places-Operationen in Stapel bereitgestellt wird, was die Anzahl der bereitgestellten Aktualisierungsbenachrichtigungen reduziert, was die Leistung verbessern kann, wenn Beobachter relativ aufwendige Aufgaben ausführen (wie z.B. Ansichten auffrischen). - Die lange veraltete
nsIPref
Schnittstelle wurde schließlich entfernt. Wenn Sie noch nicht aufnsIPrefService
umgestellt haben, ist jetzt der richtige Zeitpunkt dafür. - Die
nsISessionStore
undnsISessionStartup
Schnittstellen erhielten Änderungen, um die auf Abruf basierte Sitzungserneuerung zu unterstützen. Siehe die MethodensISessionStore.restoreLastSession()
. - Die
nsIPrincipal
MethodennsIPrincipal.subsumes()
undnsIPrincipal.checkMayLoad()
, sowie deren Attributeorigin
,csp
, undURI
sind jetzt aus Skripten verfügbar; vorher waren sie nur aus nativem Code zugänglich. - Die
nsIPrompt
-Schnittstelle unterstützt jetzt tab-modale Alarme; für Details siehe Verwendung von Tab-Modal-Prompts. - Die Methode
nsIEffectiveTLDService.getPublicSuffixFromHost()
lehnt jetzt Hostnamen ab, die mit einem Punkt (".") beginnen, korrekt ab. - Die Methode
mozIJSSubScriptLoader.loadSubScript()
hat jetzt ein optionales Argument, mit dem Sie die Zeichencodierung des Skripts angeben können; wenn keine angegeben wird, wird ASCII angenommen (wie bisher immer angenommen). - Die
nsIAccessProxy
-Schnittstelle wurde entfernt. Es war ein Implementierungsdetail, das seinen Nutzen überlebt hat. - Die Schnittstellen
nsIContentView
undnsIContentViewManager
wurden für Firefox Mobile hinzugefügt. Sie repräsentiert eine scrollbare Inhaltsansicht, 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 von INI-Dateien zu unterstützen.
Speicherverwaltung
- Unfehlbare Speicherzuweisung
-
Mozilla bietet jetzt unfehlbare Speicherzuweiser, die garantiert keinen Nullwert zurückgeben. Sie sollten diesen Artikel lesen, um zu erfahren, wie sie funktionieren und wie Sie ausdrücklich eine fehlerhafte gegenüber einer unfehlbaren Speicherzuweisung anfordern können.
Sonstige Änderungen
- Die meisten der in Firefox enthaltenen Ressourcen wurden in ein einziges JAR-Archiv,
omni.jar
, zusammengeführt, was die Startleistung verbessert, indem die Anzahl der E/A-Vorgänge reduziert wird. Einzelheiten finden Sie unter Über omni.jar. - Die Präferenz
accessibility.disablecache
wird nicht mehr unterstützt; sie war nur zu Debugging-Zwecken offen und wird nicht mehr verwendet. - Addons, deren GUID von einer Version zur anderen wechselt, können jetzt ordnungsgemäß aktualisiert werden.
- Im Rahmen der Entfernung von plattformspezifischen Verzeichnissen in Add-on-Bundles können Sie jetzt keine unterschiedlichen Standardpräferenzen mehr für jede Plattform bereitstellen.
- Standardmäßig werden Erweiterungen beim Installieren nicht mehr entpackt, 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, DLLs, die mit js-ctypes geladen werden, Such-Plugins, Wörterbücher und Fenstersymbole verwenden, müssen angeben, dass sie entpackt werden sollen. Erweiterungen, die SQLite-Datenbanken erstellen oder Dinge relativ zum Verzeichnis der Erweiterung von der Festplatte kopieren, müssen möglicherweise auch ihren Code ändern.
- Sie können jetzt Erweiterungen einschließen, die automatisch beim Anwendungsstart installiert werden innerhalb einer benutzerdefinierten Firefox Distribution.
Sonstige Änderungen
- Es wird nur die root chrome.manifest Datei geladen
-
Es wird jetzt nur die root
chrome.manifest
-Datei geladen; wenn Sie sekundäre Manifestdateien laden müssen, können Sie denmanifest
-Befehl in Ihrer rootchrome.manifest
verwenden, um sie zu laden. - Gopher-Unterstützung entfernt
-
Das Gopher-Protokoll wird nicht mehr nativ unterstützt. Die Unterstützung steht weiterhin über die OverbiteFF-Erweiterung zur Verfügung.
- Ereignisbehandlung im Inhaltsprozess
-
Um die Unterstützung von aus-Prozess-Plugins und anderen Mehrprozess-Funktionen zu unterstützen, 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 Browser-Neustart erforderlich ist.
- Standard-Plugin entfernt
-
Das Standard-Plugin wurde entfernt. Der Anwendungs-Plugins-Ordner wurde ebenfalls standardmäßig entfernt, jedoch besteht weiterhin die Unterstützung für die Installation von Plugins über diesen Ordner. Siehe Firefox Bug 533891.
- Erweiterungsmanager durch Addon-Manager ersetzt
-
nsIExtensionManager
wurde durch AddonManager ersetzt. - Child HWNDs werden nicht mehr verwendet
-
Firefox erstellt keine Child HWNDs mehr für den internen Gebrauch unter Windows. Wenn Sie eine Erweiterung geschrieben haben, die nativen Code verwendet, um diese HWNDs zu manipulieren, wird Ihre Erweiterung mit Firefox 4 nicht funktionieren. Sie müssen entweder aufhören, HWNDs zu verwenden, oder Ihren Code, der sich auf HWNDs verlässt, in ein NPAPI Plugin einwickeln. Das ist ein großer Aufwand, so dass Sie, wenn möglich, den direkten Einsatz von HWNDs vermeiden sollten.
- Gestenänderungen
-
Die Drei-Finger-Aufwärts- und -Abwärts-Wischgesten auf Trackpads wurden standardmäßig geändert, um die Firefox-Panorama-Ansicht (neé TabCandy) zu öffnen und zu schließen. Um diese zurück auf die vorherigen Befehle zum Scrollen nach oben und Scrollen nach unten zu ändern, öffnen Sie about:config und setzen
browser.gesture.swipe.down
aufcmd_scrollBottom
undbrowser.gesture.swipe.up
aufcmd_scrollTop
.