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 Web-Technologien und verbessert die Sicherheit weiter. Dieser Artikel bietet Informationen über diese Version und welche Funktionen sowohl für Webentwickler, Add-on-Entwickler als auch für Gecko-Plattform-Entwickler verfügbar sind.
Funktionen für Webentwickler
HTML
- Webformulare
-
Ein Überblick über Verbesserungen bei Webformularen. Zu diesen Änderungen gehören neue Eingabetypen im
<input>
-Element, Datenvalidierung und mehr. - HTML5-Sektionen
-
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 verstecken, die für den Benutzer zurzeit nicht relevant sind.
- Andere HTML5-Elemente
-
Gecko unterstützt jetzt auch die folgenden neuen HTML5-Elemente:
<mark>
,<figure>
und<figcaption>
. - WebSockets
-
Ein Leitfaden zur Nutzung der neuen WebSockets-API für die Echtzeitkommunikation zwischen einer Webanwendung und einem Server. Beachten Sie, dass die in Firefox 4 implementierten WebSockets nicht mit dem endgültigen Standard kompatibel sind und im Allgemeinen nicht verwendet werden sollten.
Canvas-Verbesserungen
Die folgenden Änderungen wurden an der CanvasRenderingContext2D
-Schnittstelle vorgenommen, um unsere <canvas>
-Implementierung näher an die Spezifikation heranzubringen:
- Wenn ein negativer Radius bei
arc()
angegeben wird, wird nun korrekt eineINDEX_SIZE_ERR
-Ausnahme ausgelöst. - Die Angabe von nicht-finiten Werten bei
createLinearGradient()
undcreateRadialGradient()
führt nun zuNOT_SUPPORTED_ERR
stattSYNTAX_ERR
. - Das Setzen von
miterLimit
auf einen negativen Wert löst keine Ausnahme mehr aus; stattdessen werden nicht-positive Werte ordnungsgemäß ignoriert. - Das Setzen von
lineWidth
auf einen negativen Wert löst keine Ausnahme mehr aus; statt dessen werden nicht-positive Werte ordentlich ignoriert. - Die
putImageData()
-Methode unterstützt jetzt die optionalen ParameterdirtyX
,dirtyY
,dirtyWidth
unddirtyHeight
.
Verschiedene HTML-Änderungen
<textarea>
-Elemente sind jetzt standardmäßig skalierbar; 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 spezifischemozGetAsFile()
-Methode von Mozilla, mit der Sie eine speicherbasierte Datei erhalten, die ein Bild des Canvas-Inhalts enthält. Einzelheiten finden Sie unterHTMLCanvasElement
. 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 nicht mehr den nicht standardmäßigendarker
-Wert.- Die Unterstützung für das veraltete
<spacer>
-Element, das in allen anderen Browsern fehlte, wurde entfernt. - Das
<isindex>
-Element, wenn es durch 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 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 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 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, was es ermöglicht,<length>
-Werte als mathematische Ausdrücke anzugeben. - Selektorgruppierung
-
Unterstützung für
:-moz-any
, um Selektoren zu gruppieren und Kombinatoren zu faktorisieren. - Unterstützung für Hintergrundbild-Subrechtecke
-
Die
-moz-image-rect()
-Funktion ermöglicht die Verwendung von Subrechtecken von Bildern alsbackground-image
. - CSS-Eigenschaften für Berührung
-
Unterstützung für Berührungseigenschaften wurde hinzugefügt. Einzelheiten und reale Artikelnamen folgen später.
- Verwenden 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
-
Änderungen wurden vorgenommen, welche Informationen über den Stil von besuchten Links mittels CSS-Selektoren erhalten werden können. Dies kann einige Webanwendungen beeinflussen.
Neue CSS-Eigenschaften
Eigenschaft | Beschreibung |
-moz-font-feature-settings |
Ermöglicht es Ihnen, erweiterte Funktionen von OpenType-Schriftarten anzupassen. |
-moz-tab-size |
Gibt die Breite in Leerzeichen eines Tabulators (U+0009) beim Darstellen von Text an. |
resize |
Ermöglicht es Ihnen zu steuern, in welchen Dimensionen ein Element verändert werden darf. |
Neue CSS-Pseudoklassen
Pseudoklasse | Beschreibung |
:-moz-handler-crashed |
Wird verwendet, um Elemente zu stylen, deren Plugins abgestürzt sind. |
:-moz-placeholder |
Wird auf Platzhaltertext in Formularfeldern angewendet. |
:-moz-submit-invalid |
Wird auf 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 Inhalte ungültig sind.
|
: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
deren Inhalte erfolgreich validieren.
|
Neue CSS-Pseudoselektoren
Pseudoselektor | Beschreibung |
:-moz-focusring |
Ermöglicht es Ihnen, das Erscheinungsbild eines Elements anzugeben, wenn Gecko der Meinung ist, dass eine Fokusanzeige gerendert werden sollte. |
Neue CSS-Funktionen
Funktion | Beschreibung |
:-moz-any |
Ermöglicht es Ihnen, Selektoren zu gruppieren und Kombinatoren zu faktorieren. |
-moz-calc |
Ermöglicht es Ihnen, <length> -Werte als
mathematische Ausdrücke anzugeben.
|
-moz-element |
Ermöglicht es Ihnen, ein beliebiges Element als Hintergrund
für background-image und
background zu verwenden.
|
-moz-image-rect |
Ermöglicht es Ihnen, ein Subrechteck eines Bildes als
background-image oder
background zu verwenden.
|
Umbenannte CSS-Eigenschaften
Alter Name | Neuer Name | Hinweise |
---|---|---|
-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 Seiten 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 aus Gründen der Vernunft und Leistung den Unschärferadius auf 300px. - Die
overflow
-Eigenschaft gilt nicht mehr für Tabellengruppenelemente (<thead>
,<tbody>
, und<tfoot>
). - Die
-moz-appearance
-Eigenschaft unterstützt jetzt den Wert-moz-win-borderless-glass
, der einem Element ein randloses Aero-Glass-Erscheinungsbild verleiht. - Das
-moz-device-pixel-ratio
-Medienmerkmal wurde hinzugefügt, das die Verwendung des Verhältnisses von Gerätepixeln pro CSS-Pixel in Media Queries ermöglicht. - Die Handhabung von CSS
<length>
-Einheiten durch Gecko wurde überarbeitet, um besser mit anderen Browsern übereinzustimmen und um absolute Längen genauer in Bildschirmpixel auf Grundlage der DPI des Geräts zu übersetzen.
Grafik und Video
- WebGL
-
Der sich entwickelnde WebGL-Standard wird jetzt von Firefox unterstützt.
- Optimierung der Grafikleistung
-
Tipps und Tricks, um das Beste aus der Grafik- und Videoleistung in Firefox 4 herauszuholen.
- 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-Animationen 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
buffered
-Attributs in Medien -
Das
buffered
-Attribut auf<video>
und<audio>
-Elementen wird jetzt unterstützt, wodurch Sie ermitteln 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. - Verbesserungen bei der SVG-Textpositionierung
-
Sie können jetzt Listen für die Werte der Eigenschaften
x
,y
,dx
unddy
auf SVG<text>
- und<tspan>
-Elementen angeben. Dies ermöglicht es Ihnen, die Positionierung jedes Zeichens in einer Zeichenfolge individuell zu steuern.
DOM
- JavaScript-typisierte Arrays
-
Unterstützung wurde für JavaScript-typisierte Arrays hinzugefügt; dies ermöglicht es Ihnen, Puffer mit Rohdaten mithilfe nativer Datentypen zu manipulieren. Mehrere APIs nutzen dies, einschließlich der File API, WebGL und WebSockets.
- Ermitteln von Begrenzungsrechtecken für Bereiche
-
Das
Range
-Objekt bietet jetzt die Methodenrange.getClientRects()
undrange.getBoundingClientRect()
. - Erfassen von Mausereignissen auf beliebigen Elementen
-
Unterstützung für die von Internet Explorer entstammten
setCapture()
- undreleaseCapture()
-APIs wurde hinzugefügt. Siehe Firefox-Bug 503943. - Bearbeiten des Browserverlaufs
-
Das existierende Dokumentverlauf-Objekt, das über das
window.history
-Objekt verfügbar ist, unterstützt jetzt die neuen HTML5pushState()
- undreplaceState()
-Methoden. - Animationen mit MozBeforePaint
-
Ein neues Ereignis wurde hinzugefügt, welches in Verbindung mit der
window.mozRequestAnimationFrame()
-Methode und derwindow.mozAnimationStartTime
-Eigenschaft eine Möglichkeit bietet, Animationen zu erstellen, die miteinander synchronisiert sind. - Touch- und Multitouch-Ereignisse
-
Unterstützung für Touch- und Multitouch-Ereignisse wurde hinzugefügt.
Änderungen an den DOM-Schnittstellen von HTML-Elementen
Mehrere HTML-Elemente haben ihre DOM-Schnittstellen auf die im 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> |
Verschiedene DOM-Änderungen
- Die Umbrüchelemente von
<textarea>
können 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 jetzt standardmäßig gemäß der HTML5-Spezifikation. Skripte mit demsrc
-Attribut werden sofort ausgeführt, sobald sie verfügbar sind (ohne die Reihenfolge einzuhalten) und Skripte ohne dassrc
-Attribut werden synchron ausgeführt. Um zu verhindern, 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ür XMLHttpRequest.
- Die
HTMLElement.isContentEditable
-Eigenschaft wurde implementiert. - Die
Document.currentScript
-Eigenschaft ermöglicht es Ihnen zu bestimmen, welches<script>
-Element 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, die aktuelle Textauswahl oder die Cursorposition in einem Browserfenster leicht zu ändern. - Unterstützung für das
window.directories
-Objekt und dasdirectories
-Merkmal fürwindow.open
, die in keinem anderen Browser unterstützt werden, wurde entfernt. Verwenden Sie stattdessenpersonalbar
. Firefox-Bug 474058 - Die
MouseEvent.mozInputSource
-Eigenschaft wurde zu den DOM-Benutzeroberflächenereignissen hinzugefügt; diese nicht standardisierte Eigenschaft ermöglicht es Ihnen, den Typ des Geräts zu ermitteln, das ein Ereignis erzeugt hat. - Das
Document
readystatechange
-Ereignis wurde implementiert. - Die
Document.createElement()
-Methode akzeptiert im Quirks-Modus keine<
und>
um den Tag-Namen mehr. - Die
Element.setCapture()
undDocument.releaseCapture()
Methoden wurden hinzugefügt, die es ermöglichen, dass Elemente weiterhin Mausereignisse verfolgen, selbst wenn sich der Mauszeiger nach einemmousedown
-Ereignis außerhalb ihres normalen Verfolgungsbereichs befindet. - Die
window.mozPaintCount
-Eigenschaft wurde hinzugefügt; sie ermöglicht es Ihnen zu bestimmen, wie oft ein Dokument gerendert wurde. Dies kann nützlich sein, um die Leistung Ihrer Webanwendung zu testen. - Das Sprachkennzeichen wurde aus
Navigator.appVersion
undNavigator.userAgent
entfernt. Verwenden Sie stattdessenNavigator.language
oder denAccept-Language
-Header. Firefox-Bug 572656 - Das
XMLHttpRequest
-Objekt gibt die Antwort jetzt als JavaScript-typisiertes Array und als Zeichenkette unter Verwendung der Gecko-spezifischenmozResponseArrayBuffer
-Eigenschaft. - Mausereignisse enthalten nun eine
mozPressure
-Eigenschaft, die anzeigt, wie viel Druck auf unterstützte druckempfindliche Eingabegeräte ausgeübt wird. - 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()
wirft nun eineSYNTAX_ERR
-Ausnahme, wenn der angegebene Selektorstring ungültig ist, anstatt irrtümlichfalse
zurückzugeben.- Sie können jetzt die SVG-Eigenschaftswerte eines Elements mit derselben Kurznotation wie bei CSS einstellen. Zum Beispiel:
element.style.fill = 'lime'
. Siehestyle
für Einzelheiten. - Das Dokumentenstamm-Element hat jetzt ein
privatebrowsingmode
-Attribut, das den Zustand des privaten Modus beschreibt, einschließlich eines Hinweises darauf, ob der private Modus temporär oder permanent für die Sitzung ist. - Der zweite Parameter der Methode
window.getComputedStyle()
ist jetzt optional, wie in jedem anderen großen Browser. - Das DOM-Objekt
StorageEvent
entspricht nun der neuesten Version der Spezifikation. - Die minimale erlaubte Verzögerung für die
setTimeout()
Methode ist jetzt eine Einstellung,dom.min_timeout_value
. - Das Ereignis
MozAfterPaint
wird standardmäßig nicht mehr gesendet, aufgrund eines potenziellen Sicherheitsproblems. Es kann durch Aktivieren einer Einstellung erneut aktiviert werden.
Sicherheit
- Content Security Policy (CSP)
-
Content Security Policy (CSP) ist ein Mozilla-Vorschlag, der es Webdesignern und Serveradministratoren ermöglicht, festzulegen, wie Inhalte auf ihren Websites interagieren. Ziel ist es, Angriffe wie Cross-Site-Scripting und Dateninjektionsangriffe zu erkennen und abzumildern.
- HTTP Strict Transport Security
-
HTTP Strict Transport Security ist eine Sicherheitsfunktion, die es einer Website ermöglicht, Browser mitzuteilen, dass sie nur mittels HTTPS kommunizieren sollen, anstatt HTTP zu verwenden.
- Der X-FRAME-OPTIONS-Antwortheader
-
Der in Internet Explorer 8 eingeführte X-FRAME-OPTIONS-HTTP-Antwortheader wird jetzt von Firefox unterstützt. Dies ermöglicht es Websites anzugeben, ob ihre Seiten in Frames verwendet werden können, und wenn ja, ob dies auf denselben Ursprung beschränkt werden soll.
- User-Agent-String Änderungen
-
Um die Menge an Daten und Entropie, die in HTTP-Anfragen gesendet werden, zu reduzieren (siehe Firefox-Bug 572650), wurden das Kryptostärke- und Sprachkennzeichen 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 zusätzliche Adhärenz zum ECMAScript 5-Standard haben.
Entwicklertools
- Verwendung der Web-Konsole
-
Das Web-Konsolen-Tool ist eine nützliche Debugging-Hilfe für Webentwickler und Erweiterungsentwickler gleichermaßen.
Hinweis:
Die Fehlerkonsole ist ab Gecko 2.0 standardmäßig deaktiviert. Sie können sie durch Ändern der devtools.errorconsole.enabled
-Einstellung auf true
und Neustart des Browsers wieder aktivieren.
Ä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 wesentliche Änderungen, die die Kompatibilität mit bestehenden Add-ons beeinträchtigen, daher lesen Sie unbedingt diesen Artikel.
Wenn Sie ein Theme-Entwickler sind, sollten Sie Theme-Änderungen in Firefox 4 lesen, um einige kritische Änderungen zu verstehen, deren Sie sich bewusst sein müssen.
JavaScript-Code-Module
- Services.jsm
-
Das
Services.jsm
-Code-Modul bietet Getter, die es einfach machen, Referenzen zu häufig verwendeten Diensten wie dem Voreinstellungsdienst oder dem Fenster-Mediator zu erhalten, unter anderem. - JS-ctypes API
-
Die JS-ctypes-API ermöglicht es, C-kompatible Fremdbibliotheksfunktionen 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 bietet Möglichkeiten, Add-ons zu installieren und zu entfernen.
- PopupNotifications.jsm
-
Das neue Popup-Benachrichtigungsmodul erleichtert es, attraktive, nicht-modale Benachrichtigungen an den Benutzer zu präsentieren. Wie Sie diese API verwenden können, sehen Sie in Verwendung von Popup-Benachrichtigungen.
- Code-Module von chrome:-URLs laden
-
Sie können jetzt JavaScript-Code-Module mit chrome:-URLs laden, sogar innerhalb von JAR-Dateien.
- DownloadLastDir.jsm
-
Das
DownloadLastDir.jsm
-Code-Modul bietet diegDownloadLastDir
-globale Variable, die eine Zeichenkette enthält, die Sie verwenden können, um den Pfad des Verzeichnisses zu erfahren, in das der letzte Download erfolgte. Dieses Modul kümmert sich um Probleme im Zusammenhang mit dem privaten Surfen für Sie. - Leistungsmessung mit dem PerfMeasurement.jsm-Code-Modul
-
Das
PerfMeasurement.jsm
-Code-Modul bietet eine API, um CPU-Level-Leistungsdaten im JavaScript-Code zu messen.
Verschiedene Änderungen an Code-Modulen
- Das
NetUtil.jsm
-Code-Modul bietet jetzt diereadInputStreamToString()
-Methode, die es Ihnen ermöglicht, beliebige Bytes aus einem Stream in eine Zeichenkette zu lesen, selbst wenn der Stream Nullen enthält. - Das XPCOMUtils.jsm-Code-Modul bietet jetzt die Helfer
IterSimpleEnumerator()
undIterStringEnumerator()
, um über XPCOM-Aufzähler zu iterieren. - Sie können jetzt Worker in JavaScript-Code-Modulen verwenden.
DOM-Änderungen
ChromeWorker
-
Ein neuer Workertyp für privilegierten Code; dies ermöglicht es Ihnen, Dinge wie js-ctypes aus Worker 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 Finger, die sich gleichzeitig auf einem Touchscreen bewegen, zu verfolgen.
Weitere DOM-Änderungen
- Die neue "document-element-inserted"-Benachrichtigung wird gesendet, wenn das Stammdokument-Element erstellt wird, jedoch bevor darauf irgendwelche Skripte 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 Tab-Leiste in eine Standard-Werkzeugleiste, die es dem Benutzer ermöglicht, deren Schaltflächen hineinzuziehen.
- Die Ereignisse
TabClose
,TabSelect
, undTabOpen
propagieren nicht mehr bis zum<xul:tabbrowser>
-Element (gBrowser
). Ereignis-Listener für diese Ereignisse sollten zugBrowser.tabContainer
hinzugefügt werden, anstatt direkt zugBrowser
. - Das Kontextmenü der Tabs 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 Blogbeitrag für weitere Details. - Die neue
visibleTabs
-Eigenschaft wurde hinzugefügt, die es Ihnen ermöglicht, 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
showOnlyTheseTabs
-Methode wurde hinzugefügt; diese wird von Firefox-Panorama verwendet. - Die neue
getIcon
-Methode ermöglicht es Ihnen, ein Favicon eines Tabs zu erhalten, ohne das<xul:browser>
-Element anzeigen zu müssen. - Die neue
tabbrowser.tabs
-Eigenschaft ermöglicht es Ihnen, leicht eine Liste der Tabs in einem<xul:tabbrowser>
-Element zu erhalten. - Die neuen Methoden
pinTab
undunpinTab
ermöglichen es Ihnen, Tabs als App-Tabs oder reguläre Tabs zu markieren bzw. nicht mehr zu markieren. - Die
getTabModalPromptBox
-Methode und dastabModalPromptShowing
-Attribut wurden zum<xul:tabbrowser>
hinzugefügt, um modale Tab-Hinweise zu unterstützen.
Änderungen an Popups
- Das
<xul:popup>
-Element wird nicht mehr unterstützt; Sie sollten<xul:menupopup>
stattdessen verwenden. (Wenn Sie weiterhinpopup
verwenden, werden Sie auf Störungen 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 nun einetriggerNode
-Eigenschaft, die den Knoten angibt, an dem das Ereignis aufgetreten ist, das das Popup geöffnet hat. Dies erforderte auch die Hinzufügung eines Auslöserereignisparameters zuropenPopup
-Methode. Zudem wurde dieanchorNode
-Eigenschaft hinzugefügt; sie gibt den Anker zurück, der beim Erstellen des Popups angegeben wurde. - Das
<xul:panel>
-Element bietet jetzt die Attributefade
undflip
, die verwendet werden, um das Verhalten von neuen "Pfeil"-Stil-Benachrichtigungsfenstern 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; zudem können Sie XUL-Dokumente nicht mehr mit file://
-URLs laden, es sei denn, Sie erstellen die Voreinstellung dom.allow_XUL_XBL_for_file
und setzen sie auf true
. Es gibt jedoch eine Whitelist-Funktion, die verwendet werden kann, um bestimmten Domains das Laden von Remote-XUL zu erlauben.
Verschiedene XUL-Änderungen
- Das
readonly
-Attribut funktioniert jetzt korrekt für XBL-Felder. - Das
<xul:resizer>
-Element ermöglicht es Ihnen jetzt, daselement
-Attribut zu verwenden, um ein Element zum Vergrößern anzugeben, anstatt das Fenster zu bearbeiten. - Das
<xul:resizer>
-Element hat nun eintype
-Attribut, das es Ihnen ermöglicht anzugeben, dass der Resizer für ein Fenster und nicht für ein Element ist, um zu verhindern, dass der Fenster-Resizer doppelt gezeichnet wird. - Das
"active"
-Attribut wird nicht mehr auf aktive XUL-Fenster gesetzt. Sie können stattdessen die neue:-moz-window-inactive
-Pseudoklasse verwenden, um verschiedenen Stilen für Hintergrundfenster zuzuweisen. - Das
emptytext
-Attribut ist jetzt veraltet; Sie solltenplaceholder
stattdessen verwenden. - Das
<xul:window>
-Element bietet jetzt einaccelerated
-Attribut an; wenn dies auf true gesetzt ist, darf der Hardware-Ebenenmanager das Fenster 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 den Werkzeugleisten erkennen können. - Das
alternatingbackground
-Attribut für<xul:tree>
-Elemente wird nicht mehr unterstützt; Sie können die Pseudoklasse:-moz-tree-row
stattdessen verwenden. - Die Überlauf-Schaltfläche der Lesezeichen-Symbolleiste 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 wurde). - XUL
<xul:window>
-Elemente haben jetzt dasdrawintitlebar
-Attribut; falls dies auftrue
gesetzt ist, umfasst der Inhaltsbereich des Fensters die Titelleiste, sodass in die Titelleiste gezeichnet werden kann. - Neue
TabPinned
- undTabUnpinned
-Ereignisse stehen zur Verfügung, sodass Sie erkennen können, wann Tabs angeheftet und gelöst werden. - Das neue
TabAttrModified
-Ereignis wird gesendet, wenn sich dielabel
,crop
,busy
,image
, oderselected
-Attribute eines Tabs ändern. <xul:tab>
-Elemente haben jetzt einpinned
-Attribut, das es Ihnen ermöglicht zu erkennen, ob ein Tab derzeit angeheftet ist.- Die
setDirectionIndicator
-Klasse 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 ermöglicht, den Abstand zwischen Chrome und Inhalt an jeder Seite eines Fensters festzulegen; dies können Sie verwenden, um zum Beispiel in die Titelleiste zu zeichnen. - Das
<xul:window>
-Element hat jetzt eindisablechrome
-Attribut; dies wird verwendet, um den größten Teil des Chrome in einem Fenster auszublenden, wenn es verwendet wird, um In-Browser-Benutzeroberflächen darzustellen, wie zum Beispielabout:addons
. - Das
<xul:window>
-Element verfügt jetzt über eindisablefastfind
-Attribut, das es Ihnen ermöglicht, die Suchleiste in einem Fenster zu deaktivieren, wenn der Inhalt es nicht unterstützt. Dies wird zum Beispiel von der Add-ons-Panel verwendet. - Werkzeugleisten können jetzt außerhalb von Toolboxes betrachtet werden, während sie immer noch als Mitglieder der
<xul:toolbox>
betrachtet werden können, indem Sie dietoolboxid
-Eigenschaft der<xul:toolbar>
setzen. Außerdem hat das<xul:toolbox>
-Element jetzt eineexternalToolbars
-Eigenschaft, die alle Werkzeugleisten auflistet, die als Mitglieder der Toolbox betrachtet 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. Falls Sie in der Vergangenheit eine Benutzeroberfläche zur Statusleiste hinzugefügt haben, sollten Sie Ihre Erweiterung aktualisieren, um diese zu verwenden.
- Ausblenden der Browser-Chrome
-
Sie können jetzt das Browser-Chrome ausblenden, wenn es wünschenswert ist, dies zu tun; zum Beispiel macht dies
about:addons
.
Speicherung
Verschiedene Änderungen der Speicher-API
- Die
mozIStorageBindingParamsArray
-Schnittstelle hat jetzt ein Länge-Attribut, das die Anzahl dermozIStorageBindingParams
-Objekte im Array angibt. - Die Methode
mozIStorageStatement.bindParameters()
gibt jetzt einen Fehler zurück, wenn die angegebenemozIStorageBindingParamsArray
leer ist. - Die Methode
mozIStorageConnection.clone()
wurde hinzugefügt, die es Ihnen erlaubt, eine bestehende Datenbankverbindung zu klonen. - Die Methode
mozIStorageConnection.asyncClose()
wurde hinzugefügt, die es Ihnen erlaubt, eine Datenbankverbindung asynchron zu schließen; Sie geben einen Rückruf an, der benachrichtigt wird, wenn der Schließvorgang abgeschlossen ist. - Die Methode
mozIStorageConnection.setGrowthIncrement()
wurde hinzugefügt, die es Ihnen erlaubt anzugeben, um wie viel eine Datenbankdatei vergrößert wird, um SQLite bei der Reduzierung der Fragmentierung zu helfen. - Der
SQLITE_CONSTRAINT
-Fehler wird jetzt alsNS_ERROR_STORAGE_CONSTRAINT
anstatt alsNS_ERROR_FAILURE
berichtet.
XPCOM
Zusätzlich zu den spezifischen Änderungen, die unten aufgeführt sind, ist es wichtig zu beachten, dass es keine eingefrorenen 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 zu Änderungen an XPCOM, die die Kompatibilität in Firefox 4 beeinträchtigen.
- 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__
.
Orte
- Rückfrage-Ergebnisse können jetzt von mehreren Beobachtern beobachtet werden und Abfragen können asynchron ausgeführt werden. Dies bedeutet, dass einige Änderungen an den
nsINavHistoryResult
,nsINavHistoryQueryOptions
, undnsINavHistoryContainerResultNode
Schnittstellen vorgenommen wurden. Bedeutender ist, dass diensINavHistoryResultViewer
-Schnittstelle innsINavHistoryResultObserver
umbenannt wurde. - Einige neue Benachrichtigungen wurden hinzugefügt, um es dem Browser zu ermöglichen, den Herunterfahr-Prozess des Places-Dienstes verlässlicher zu verfolgen. Von diesen sind die meisten nur für den internen Gebrauch bestimmt, aber die
places-connection-closed
-Benachrichtigung steht zur Verfügung, um zu wissen, wann der Places-Dienst seinen Herunterfahr-Prozess abgeschlossen hat. - Das Arraygrößen-Ausgabeparameter bei mehreren Places-Methoden ist jetzt optional.
- Unterstützung für
<menupopup type="places">
wurde entfernt. Stattdessen müssen Menüs mit Places-Informationen manuell erstellt und gefüllt werden, anstatt dass dies automatisch erfolgt. Siehe Places-Information mit Ansichten anzeigen: Menüansicht für Details.
Schnittstellenänderungen
- Die Schnittstellen
nsIDocShell
undnsIWebBrowser
haben jetzt ein neuesisActive
-Attribut, das verwendet wird, um Codepfade für Dokumente zu optimieren, die derzeit nicht sichtbar sind. - Die
nsIMemory
-MethodensIMemory.isLowMemory()
wurde veraltet. Sie sollten "memory-pressure"-Benachrichtigungen verwenden, um nach niedrigen Speichersituationen zu suchen. - Die API zur Verarbeitung von Weiterleitungen auf HTTP-Kanälen hat sich geändert, um sie asynchron verarbeiten zu können. Jeder Code, der die Weiterleitungsverarbeitung unter Verwendung von
nsIChannelEventSink.onChannelRedirect()
implementiert, muss aktualisiert werden, umnsIChannelEventSink.asyncOnChannelRedirect()
stattdessen zu verwenden. Dies akzeptiert einen Rückruf-Handler, der aufgerufen werden muss, wenn eine Weiterleitung erfolgreich abgeschlossen ist. - Die Methode
nsINavHistoryResultObserver.batching()
wurde hinzugefügt, die eine Möglichkeit bietet, Places-Operationen in Chargen zu gruppieren, wodurch die Anzahl der Update-Benachrichtigungen verringert wird, was die Leistung verbessern kann, wenn Beobachter relativ aufwendige Aufgaben ausführen (wie zum Beispiel das Aktualisieren von Ansichten). - Die längst veraltete
nsIPref
Schnittstelle wurde endlich entfernt. Wenn Sie noch nicht aufnsIPrefService
umgestellt haben, ist jetzt der richtige Zeitpunkt. - Die Schnittstellen
nsISessionStore
undnsISessionStartup
haben Änderungen erfahren, um die bedarfsabhängige Sitzungswiederherstellung zu unterstützen. Siehe die MethodensISessionStore.restoreLastSession()
. - Die Methoden
nsIPrincipal.subsumes()
undnsIPrincipal.checkMayLoad()
, sowie die Attributeorigin
,csp
, undURI
dernsIPrincipal
, sind jetzt vom Skript aus verfügbar; zuvor waren sie nur vom nativen Code aus verfügbar. - Die
nsIPrompt
-Schnittstelle unterstützt jetzt tab-modale Warnungen; siehe Verwendung von tab-modalen Aufforderungen für Details. - Die Methode
nsIEffectiveTLDService.getPublicSuffixFromHost()
wird jetzt korrekt alle Hostnamen ablehnen, die mit einem Punkt starten ("."). - Die Methode
mozIJSSubScriptLoader.loadSubScript()
hat jetzt ein optionales Argument, mit dem Sie den Zeichensatz des Skripts angeben können; wenn keiner angegeben wird, wird ASCII angenommen (dies wurde 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 stellen eine scrollbare Inhaltsansicht dar, deren Inhalte von einem separaten Prozess gezeichnet werden. - Die Schnittstelle
nsIDiskCacheStreamInternal
wurde hinzugefügt. - Die Schnittstelle
nsIExternalURLHandlerService
wurde hinzugefügt. - Die Schnittstelle
nsISyncJPAKE
wurde hinzugefügt. Siehe Firefox-Bug 601645. - Die Schnittstelle
nsIINIParserWriter
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 Speicher-Allokatoren, die garantiert kein null zurückgeben. Lesen Sie diesen Artikel, um zu erfahren, wie sie funktionieren und wie Sie wahlweise eine fehlbare oder unfehlbare Speicher-Allokation anfordern können.
Weitere Änderungen
- Die meisten der in Firefox enthaltenen Ressourcen wurden in ein einzelnes JAR-Archiv,
omni.jar
, zusammengefasst, das die Startleistung verbessert, indem die E/A reduziert wird. Details finden Sie unter About omni.jar. - Die Voreinstellung
accessibility.disablecache
wird nicht mehr unterstützt; sie wurde 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 Nebenwirkung der Entfernung von plattformspezifischen Verzeichnissen in Addon-Bundles können Sie keine unterschiedlichen Standardvoreinstellungen mehr für jede Plattform bereitstellen.
- Standardmäßig werden Addons bei der Installation nicht mehr entpackt, sondern direkt aus den XPI-Dateien ausgeführt. Addons können die unpack-Eigenschaft in der Installationsmanifest verwenden, um das alte Verhalten auszuwählen. Addons, die binäre Komponenten verwenden, DLLs, die mit js-ctypes geladen wurden, Such-Plugins, Wörterbücher und Fenstersymbole müssen angeben, dass sie entpackt werden müssen. Addons, die eine SQLite-Datenbank erstellen oder Dinge relativ zum Addons-Verzeichnis vom Dateisystem kopieren, müssen möglicherweise ebenfalls ihren Code ändern.
- Sie können jetzt Addons verwenden, die beim Starten der Anwendung automatisch installiert werden innerhalb einer angepassten Firefox-Distribution.
Weitere Änderungen
- Nur die root chrome.manifest Datei wird geladen
-
Nur die Root-
chrome.manifest
-Datei wird jetzt geladen; wenn Sie sekundäre Manifestdateien laden müssen, können Sie denmanifest
-Befehl in Ihrer Root-chrome.manifest
-Datei verwenden, um diese zu laden. - Gopher-Unterstützung entfernt
-
Das Gopher-Protokoll wird nativ nicht mehr unterstützt. Fortgesetzte Unterstützung ist über die OverbiteFF-Erweiterung verfügbar.
- Eventhandling im Inhaltsprozess
-
Um Plugins außerhalb des Prozesses und andere multiprozessfähige Funktionen zu unterstützen, wurde eine neue API eingeführt, um das Senden von Nachrichten zwischen Prozessen zu unterstützen.
- Gebootstrappte Addons
-
Sie können jetzt Addons 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-Plugin-Ordner wurde auch standardmäßig entfernt, jedoch wird die Installation von Plugins über diesen Ordner weiterhin unterstützt. Siehe Firefox-Bug 533891.
- Der Erweiterungs-Manager wurde durch den Add-on-Manager ersetzt
-
nsIExtensionManager
wurde durch den AddonManager ersetzt. - Child-HWNDs werden nicht mehr verwendet
-
Firefox erstellt keine Child-HWNDs mehr für interne Zwecke auf Windows. Wenn Sie eine Erweiterung geschrieben haben, die nativen Code verwendet, um diese HWNDs zu manipulieren, wird Ihre Erweiterung in Firefox 4 nicht funktionieren. Sie müssen entweder die Verwendung von HWNDs einstellen oder Ihren Code, der auf HWNDs angewiesen ist, in einem NPAPI-Plugin umschließen. Das ist viel Arbeit, daher, wenn Sie die Verwendung von HWNDs direkt vermeiden können, sollten Sie dies tun.
- Änderungen bei Gesten
-
Die drei Finger nach oben und unten Wischgesten auf Trackpads wurden standardmäßig geändert, um die Firefox-Panorama-Ansicht (ehemals TabCandy) zu öffnen und zu schließen. Um dies auf die vorherigen Scroll-nach-oben- und Scroll-nach-unten-Befehle zurückzusetzen, öffnen Sie about:config und stellen Sie
browser.gesture.swipe.down
aufcmd_scrollBottom
undbrowser.gesture.swipe.up
aufcmd_scrollTop
ein.