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 erhöht die Sicherheit weiter. Dieser Artikel bietet Informationen über diese Version und welche Funktionen sowohl für Webentwickler, Add-on-Entwickler als auch Gecko-Plattform-Entwickler verfügbar sind.
Funktionen für Webentwickler
HTML
- Webformulare
-
Ein Blick auf Verbesserungen an Webformularen. Unter diesen Änderungen sind neue Eingabetypen im
<input>
-Element, Datenvalidierung und mehr. - HTML5 Abschnitte
-
Gecko unterstützt jetzt die neuen HTML5-Elemente im Zusammenhang mit Abschnitten in einem Dokument:
<article>
,<section>
,<nav>
,<aside>
,<hgroup>
,<header>
und<footer>
. - HTML5 verstecktes Attribut
-
Dieses Attribut, das allen Elementen gemeinsam ist, wird verwendet, um Inhalte auf einer Webseite zu verbergen, die für den Benutzer derzeit nicht relevant sind.
- Andere HTML5-Elemente
-
Gecko unterstützt jetzt auch die folgenden neuen HTML5-Elemente:
<mark>
,<figure>
und<figcaption>
. - WebSockets
-
Ein Leitfaden zur Verwendung der neuen WebSockets-API für die Echtzeitkommunikation zwischen einer Webanwendung und einem Server. Beachten Sie, dass WebSockets, wie in Firefox 4 implementiert, nicht mit dem finalen Standard kompatibel ist und generell nicht verwendet werden sollte.
Canvas-Verbesserungen
Die folgenden Änderungen wurden an der CanvasRenderingContext2D
-Schnittstelle vorgenommen, um unsere <canvas>
-Implementierung näher an die Spezifikation heranzuführen:
- Das Angeben eines negativen Radius beim Aufrufen von
arc()
löst jetzt korrekt eineINDEX_SIZE_ERR
-Ausnahme aus. - Das Angeben nicht-finitieller Werte bei
createLinearGradient()
undcreateRadialGradient()
löst nunNOT_SUPPORTED_ERR
anstelle vonSYNTAX_ERR
aus. - 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; 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 jetzt standardmäßig skalierbar; Sie können dieresize
CSS-Eigenschaft verwenden, um dies zu deaktivieren.canvas.getContext
undcanvas.toDataURL
lösen keine Ausnahme mehr aus, wenn sie mit nicht erkannten Argumenten aufgerufen werden.- Das
<canvas>
-Element unterstützt jetzt die Mozilla-spezifische MethodemozGetAsFile()
, mit der Sie eine speicherbasierte Datei, die ein Bild des Canvas-Inhalts enthält, erhalten können. Weitere Informationen finden Sie unterHTMLCanvasElement
. Canvas2DContext.lineCap
undCanvas2DContext.lineJoin
lösen keine Ausnahme mehr aus, wenn ein nicht erkannter Wert gesetzt wird.Canvas2DContext.globalCompositeOperation
löst keine Ausnahme mehr aus, wenn ein nicht erkannter Wert gesetzt wird und unterstützt nicht mehr den nicht standardmäßigen Wertdarker
.- Unterstützung für das veraltete
<spacer>
-Element, das in allen anderen Browsern fehlte, wurde entfernt. - Das
<isindex>
-Element, wenn es durch Aufrufen vonDocument.createElement()
erstellt wurde, 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 Verwenden von Dateien in 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>
-Elementen werden jetzt ausgeführt, was in vorherigen Versionen von Firefox nicht der Fall war. Dies entspricht der Spezifikation und dem Verhalten anderer Browser.
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. Dadurch können Sie<length>
-Werte als mathematische Ausdrücke angeben. - Selektor-Gruppierung
-
Unterstützung für
:-moz-any
, um Selektoren zu gruppieren und Kombinatoren zu faktorisieren. - Unterstützung für Unterrechtecke von Hintergrundbildern
-
Die Funktion
-moz-image-rect()
ermöglicht es, Unterrechtecke von Bildern alsbackground-image
zu verwenden. - CSS-Touch-Eigenschaften
-
Unterstützung für Touch-Eigenschaften wird hinzugefügt. Details und echte Artikelnamen kommen 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. - Datenschutz und der :visited-Selektor
-
Es wurden Änderungen daran vorgenommen, welche Informationen über den Stil besuchter Links mithilfe von CSS-Selektoren erhalten werden können. Dies könnte einige Webanwendungen betreffen.
Neue CSS-Eigenschaften
Eigenschaft | Beschreibung |
-moz-font-feature-settings |
Ermöglicht die Anpassung erweiterter Funktionen von OpenType-Schriften. |
-moz-tab-size |
Gibt die Breite in Leerzeichen von einem Tabulatorzeichen (U+0009) beim Rendern von Text an. |
resize |
Ermöglicht es Ihnen, die Dimensionen zu steuern, in denen ein Element skaliert werden darf. |
Neue CSS-Pseudoklassen
Pseudoklasse | Beschreibung |
:-moz-handler-crashed |
Wird angewendet, um Elemente zu stylen, deren Plugins abgestürzt sind. |
:-moz-placeholder |
Wird auf Platzhaltertext in Formfeldern angewendet. |
:-moz-submit-invalid |
Wird auf den Submit-Button in Formularen angewendet, wenn eines oder mehrere der 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
das required -Attribut nicht spezifizieren.
|
:required |
Wird automatisch auf <input> -Felder angewendet, die
das required -Attribut spezifizieren.
|
:valid |
Wird automatisch auf <input> -Felder angewendet, wenn
deren Inhalte erfolgreich validieren.
|
Neue CSS-Pseudo-Selektoren
Pseudo-Selektor | Beschreibung |
:-moz-focusring |
Ermöglicht es, das Aussehen eines Elements zu spezifizieren, wenn Gecko der Meinung ist, dass eine Fokusanzeige gerendert werden sollte. |
Neue CSS-Funktionen
Funktion | Beschreibung |
:-moz-any |
Ermöglicht das Gruppieren von Selektoren und die Faktorisierung von Kombinatoren. |
-moz-calc |
Ermöglicht es, <length> -Werte als
mathematische Ausdrücke anzugeben.
|
-moz-element |
Ermöglicht die Verwendung eines beliebigen Elements als Hintergrund für
background-image und
background .
|
-moz-image-rect |
Ermöglicht die Verwendung eines Unterrechtecks eines Bildes als
background-image oder
background .
|
Umbenannte CSS-Eigenschaften
Alter Name | Neuer Name | Anmerkungen |
---|---|---|
-moz-background-size |
background-size |
Der Name -moz-background-size wird nicht mehr unterstützt. |
-moz-border-radius |
border-radius |
Der alte Name wird für eine begrenzte Zeit unterstützt, um Ihnen Zeit zu geben, Ihre Websites zu aktualisieren. Rendering-Änderungen wurden auch vorgenommen, um die neueste Spezifikation zu erfüllen. |
-moz-box-shadow |
box-shadow |
Verschiedene CSS-Änderungen
- Die
text-shadow
-Eigenschaft begrenzt jetzt den Unschärferadius aus Vernunft- und Leistungsgründen auf 300px. - Die
overflow
-Eigenschaft gilt nicht mehr für Table-Group-Elemente (<thead>
,<tbody>
und<tfoot>
). - Die
-moz-appearance
-Eigenschaft unterstützt jetzt den Wert-moz-win-borderless-glass
, der einem Element einen randlosen Aero Glass-Effekt verleiht. - Das
-moz-device-pixel-ratio
-Medienmerkmal wurde hinzugefügt, sodass das Verhältnis der Gerät-Pixel zu CSS-Pixel in Media Queries verwendet werden kann. - Geckos Umgang mit CSS
<length>
-Einheiten wurde überarbeitet, um besser auf andere Browser abgestimmt zu sein und absolute Längen basierend auf der DPI des Geräts genauer in Bildschirm-Pixel umzurechnen.
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.
- SVG als Bilder und CSS-Hintergründe verwenden
-
Sie können jetzt SVG mit dem
<img>
-Element sowie als CSS-background-image
verwenden. - Medien-
buffered
-Attribut-Unterstützung -
Das
buffered
-Attribut auf<video>
- und<audio>
-Elementen wird jetzt unterstützt, was Ihnen ermöglicht, festzustellen, 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 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. So können Sie die Positionierung jedes Zeichens in einer Zeichenfolge individuell steuern.
DOM
- JavaScript-typisierte Arrays
-
Unterstützung für JavaScript-typisierte Arrays wurde hinzugefügt; dies ermöglicht die Manipulation von Puffer, die rohe Daten mit nativen Datentypen enthalten. Mehrere APIs nutzen dies, einschließlich der File API, WebGL und WebSockets.
- Abrufen von Begrenzungsrechtecken für Bereiche
-
Das
Range
-Objekt verfügt jetzt über die Methodenrange.getClientRects()
undrange.getBoundingClientRect()
. - Erfassen von Mausereignissen auf beliebigen Elementen
-
Unterstützung für die in Internet Explorer entstandenen APIs
setCapture()
undreleaseCapture()
wurde hinzugefügt. Siehe Firefox-Bug 503943. - Manipulation der Browserhistorie
-
Das bestehende Document-Historienobjekt, verfügbar über das
window.history
-Objekt, 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 zur Erstellung von Animationen bietet, die mit einer synchronisiert sind. - Touch- und Multitouch-Ereignisse
-
Unterstützung für Touch- und Multitouch-Ereignisse wurde hinzugefügt.
DOM-Schnittstellen für HTML-Elemente haben sich geändert
Für mehrere HTML-Elemente wurden die DOM-Schnittstellen auf die in der HTML5-Spezifikation geforderten Schnittstellen 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 über daswrap
-DOM-Attribut gesteuert werden. Firefox Bug 41464 <script>
-Elemente, die mitDocument.createElement()
erstellt und in ein Dokument eingefügt wurden, verhalten sich jetzt standardmäßig gemäß der HTML5-Spezifikation. Skripte mit demsrc
-Attribut werden ausgeführt, sobald sie verfügbar sind (ohne Beibehaltung der Reihenfolge), und Skripte ohne src-Attribut werden synchron ausgeführt. Um einzufügen, dass Skripte mit dem src-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>
-Elementskript derzeit ausgeführt wird. Die neuenbeforescriptexecute
- undafterscriptexecute
-Ereignisse werden vor und nach der Ausführung eines Skript-Elements ausgelöst. - Die
mozSourceNode
-Eigenschaft wurde demDataTransfer
-Objekt hinzugefügt. - Die
Selection.modify()
-Methode wurde demSelection
-Objekt hinzugefügt; damit können Sie leicht die aktuelle Textauswahl oder die Cursorposition in einem Browserfenster ä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. Verwendungpersonalbar
stattdessen. Firefox-Bug 474058 - Die
MouseEvent.mozInputSource
-Eigenschaft wurde zu DOM-Benutzungsschnittstellenereignissen hinzugefügt; diese nicht standardmäßige Eigenschaft ermöglicht es Ihnen, den Typ des Geräts zu bestimmen, das ein Ereignis erzeugt hat. - Das
Document
-readystatechange
-Ereignis wurde implementiert. - Die
Document.createElement()
-Methode akzeptiert keine<
und>
mehr um den Tag-Namen im Quirks-Modus. - Die
Element.setCapture()
undDocument.releaseCapture()
-Methoden wurden hinzugefügt, wodurch Elemente weiterhin Mausereignisse verfolgen können, selbst wenn die Maus außerhalb ihres normalen Verfolgungsbereichs ist, nachdem einmousedown
-Ereignis aufgetreten ist. - Die
window.mozPaintCount
-Eigenschaft wurde hinzugefügt; damit können Sie feststellen, wie oft ein Dokument gezeichnet wurde. Dies kann beim Testen der Leistung Ihrer Webanwendung nützlich sein. - Das Sprach-Token wurde aus
Navigator.appVersion
undNavigator.userAgent
entfernt. Verwenden SieNavigator.language
oder denAccept-Language
-Header stattdessen. Firefox-Bug 572656 - Das
XMLHttpRequest
-Objekt gibt jetzt die Antwort als JavaScript-typisiertes Array und als String aus, indem die Gecko-spezifischemozResponseArrayBuffer
-Eigenschaft benutzt wird. - Mausereignisse enthalten jetzt eine
mozPressure
-Eigenschaft, die den Druckpegel auf unterstützten druckempfindlichen Eingabegeräten anzeigt. - Die
URL.createObjectURL()
undURL.revokeObjectURL()
-Methoden ermöglichen es, Objekt-URLs zu erstellen, die auf lokale Dateien verweisen. - Die
DOMImplementation.createHTMLDocument()
-Methode ermöglicht es, ein neues HTML-Dokument zu erstellen. Node.mozMatchesSelector()
löst jetzt eineSYNTAX_ERR
-Ausnahme aus, wenn der angegebene Selektor-String ungültig ist, anstatt fälschlicherweisefalse
zurückzugeben.- Sie können jetzt die SVG-Eigenschaften eines Elements mit derselben Kurzsyntax wie bei CSS festlegen. Zum Beispiel:
element.style.fill = 'lime'
. Siehestyle
für Einzelheiten. - Das Dokumentenstamm hat jetzt ein
privatebrowsingmode
-Attribut, das den Status des privaten Browsermodus beschreibt, einschließlich eines Hinweises darauf, ob der private Browsing-Modus temporär oder permanent für die Sitzung ist. - Der zweite Parameter der
window.getComputedStyle()
-Methode ist jetzt optional, wie bei allen anderen großen Browsern. - Das DOM
StorageEvent
-Objekt entspricht jetzt der neuesten Version der Spezifikation. - Die minimale erlaubte Verzögerung für die
setTimeout()
- undsetTimeout()
-Methode ist jetzt eine Einstellung,dom.min_timeout_value
. - Das
MozAfterPaint
-Ereignis wird standardmäßig nicht mehr gesendet, aufgrund eines möglichen Sicherheitsproblems. Es kann durch eine Einstellung wieder aktiviert werden.
Sicherheit
- Content Security Policy (CSP)
-
Content Security Policy (CSP) ist ein Mozilla-Vorschlag, der Webdesigner und Serveradministratoren helfen soll, wie Inhalte auf ihren Websites interagieren. Ziel ist es, Angriffe wie Cross-Site-Scripting und Dateninjektionsangriffe zu erkennen und zu mindern.
- HTTP Strict Transport Security
-
HTTP Strict Transport Security ist eine Sicherheitsfunktion, die es einer Website erlaubt, Browser anzuweisen, dass nur über HTTPS kommuniziert werden soll, anstelle der Verwendung von HTTP.
- Der X-FRAME-OPTIONS-Antwortheader
-
Der X-FRAME-OPTIONS HTTP-Antwortheader, der in Internet Explorer 8 eingeführt wurde, wird nun von Firefox unterstützt. Dadurch können Websites angeben, ob ihre Seiten in Frames verwendet werden können und, falls ja, ob dies auf denselben Ursprung beschränkt werden soll.
- Änderungen am User Agent-String
-
Um die Menge an Daten und Entropie zu verringern, die in HTTP-Anfragen gesendet wird (siehe Firefox-Bug 572650), wurden die Tokens für Krypto-Stärke und Sprache aus dem User Agent-String entfernt.
JavaScript
Für einen Überblick über die in JavaScript 1.8.5 implementierten Änderungen siehe Neu in JavaScript 1.8.5. JavaScript in Firefox 4 wird eine zusätzliche Übereinstimmung mit dem ECMAScript 5-Standard aufweisen.
Entwicklerwerkzeuge
- Verwendung der Web-Konsole
-
Das Web-Konsolen-Werkzeug ist eine nützliche Debugging-Hilfe sowohl für Webentwickler als auch für Erweiterungsentwickler.
Hinweis:
Die Fehlerkonsole ist standardmäßig in Gecko 2.0 deaktiviert. Sie können sie wieder aktivieren, indem Sie die Einstellung devtools.errorconsole.enabled
auf true
ändern und den Browser neu starten.
Änderungen für Mozilla- und Add-on-Entwickler
Für hilfreiche Tipps zum Aktualisieren bestehenden Erweiterungen für Firefox 4 siehe Aktualisieren von Erweiterungen für Firefox 4. Es gibt mehrere wichtige Änderungen, die die Kompatibilität mit bestehenden Add-ons brechen, daher lesen Sie den Artikel unbedingt.
Wenn Sie ein Theme-Entwickler sind, sollten Sie die Theme-Änderungen in Firefox 4 lesen, um einige wichtige Änderungen zu verstehen, deren Kenntnis Sie benötigen.
JavaScript-Code-Module
- Services.jsm
-
Das
Services.jsm
-Code-Modul bietet Getter, die es einfach machen, Referenzen auf häufig verwendete Services zu erhalten, wie den Präferenzdienst oder den Fenstervermittler, unter anderem. - JS-ctypes-API
-
Die JS-ctypes-API ermöglicht es, C-kompatible fremde Bibliotheksfunktionen ohne die Verwendung von XPCOM aufzurufen.
- Add-ons-Manager
-
Der neue Add-ons-Manager bietet Informationen über installierte Add-ons, Unterstützung für deren Verwaltung und bietet Möglichkeiten, 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 Sie diese API verwenden in Verwenden von Popup-Benachrichtigungen.
- Laden von Code-Modulen über Chrome: URLs
-
Sie können jetzt JavaScript-Code-Module mit chrome:-URLs laden, sogar innerhalb von JAR-Dateien.
- DownloadLastDir.jsm
-
Das
DownloadLastDir.jsm
-Code-Modul bietet die globale VariablegDownloadLastDir
, die einen String enthält, den Sie verwenden können, um den Pfad des Verzeichnisses zu erfahren, in das der letzte Download erfolgt ist. 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 Leistungsdaten auf CPU-Ebene in JavaScript-Code zu messen.
Verschiedene Änderungen an Code-Modulen
- Das
NetUtil.jsm
-Code-Modul bietet jetzt die MethodereadInputStreamToString()
, die es 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 die IterSimpleEnumerator()- und IterStringEnumerator()-Helper an, um über XPCOM-Enumeratoren zu iterieren.
- Sie können jetzt Arbeiter in JavaScript-Code-Modulen verwenden.
DOM-Änderungen
ChromeWorker
-
Ein neuer Typ von Arbeiter für privilegierten Code; dies ermöglicht die Verwendung von Dingen wie js-ctypes aus Arbeitern in Erweiterungen und Anwendungs-Code.
- Touch-Ereignisse
-
Unterstützung für (nicht standardmäßige) Touch-Ereignisse wurde hinzugefügt; diese ermöglichen es Ihnen, mehrere Finger gleichzeitig auf einem Touchscreen zu verfolgen.
Andere DOM-Änderungen
- Die neue "document-element-inserted"-Benachrichtigung wird gesendet, wenn ein Dokument-Stammelement erstellt wird, jedoch bevor irgendwelche Skripte darauf ausgeführt werden.
XUL
Änderungen am <xul:tabbrowser>
-Element
Mehrere Änderungen wurden am <xul:tabbrowser>
-Element vorgenommen, die Erweiterungen betreffen, die mit Tabs interagieren. Zusätzlich zur Unterstützung von App-Tabs, diese Änderungen ändern auch die Tableiste in eine Standard-Werkzeugleiste, die es dem Benutzer ermöglicht, Werkzeugleisten-Buttons hineinzuziehen.
- Die
TabClose
-,TabSelect
- undTabOpen
-Ereignisse werden nicht mehr zum<xul:tabbrowser>
-Element (gBrowser
) hochgebubbelt. Ereignis-Hörer für diese Ereignisse sollten zugBrowser.tabContainer
hinzugefügt werden, anstatt direkt zugBrowser
. - 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
zugänglich sein. Siehe diesen Blogbeitrag für mehr Details. - Die neue
visibleTabs
-Eigenschaft wurde hinzugefügt, um ein Array der aktuell sichtbaren Tabs zu erhalten; dies ermöglicht es Ihnen zu bestimmen, welche Tabs im aktuellen Tab-Set sichtbar sind. Dies wird 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 Ihnen ermöglicht, das Favicon eines Tabs zu erhalten, ohne das<xul:browser>
-Element ins Spiel zu bringen. - Die neue
tabbrowser.tabs
-Eigenschaft wurde hinzugefügt, die es Ihnen ermöglicht, einfach eine Liste der Tabs in einem<xul:tabbrowser>
-Element zu erhalten. - Die neuen Methoden
pinTab
undunpinTab
ermöglichen es, Tabs anzuheften oder abzupinnen (d.h. sie zwischen App-Tabs und regulären Tabs zu wechseln). - Die Methode
getTabModalPromptBox
und das AttributtabModalPromptShowing
wurden dem<xul:tabbrowser>
hinzugefügt, um Tab-modale Alarme zu unterstützen.
Änderungen an Popups
- Das
<xul:popup>
-Element wird nicht mehr unterstützt; Sie sollten stattdessen<xul:menupopup>
verwenden. (Wenn Siepopup
weiterhin verwenden, werden Sie auf Probleme stoßen, da das Element keine besondere Bedeutung mehr hat. Beispielsweise kann<xul:menuseparator>
transparent erscheinen, wenn es in einem<xul:popup>
verwendet wird.) - Das
<xul:menupopup>
-XUL-Element hat jetzt einetriggerNode
-Eigenschaft, die 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; diese gibt den Anker zurück, der bei der Erstellung des Popups angegeben wurde. - Das
<xul:panel>
-Element bietet jetzt die Attributefade
undflip
, die verwendet werden, um das Verhalten neuer "Pfeil"-Stil-Benachrichtigungspanels zu konfigurieren.
Unterstützung für Remote-XUL entfernt
Remote-XUL wird nicht mehr unterstützt; dies betrifft XUL-Dokumente, die über HTTP angeboten werden; zudem können Sie XUL-Dokumente nicht mehr mit file://
-URLs laden, es sei denn, Sie erstellen die Präferenz dom.allow_XUL_XBL_for_file
und setzen sie auf true
. Es gibt jedoch eine Whitelist-Funktion, die verwendet werden kann, um bestimmte Domains zuzulassen, Remote-XUL zu laden.
Verschiedene XUL-Änderungen
- Das
readonly
-Attribut funktioniert jetzt korrekt für XBL-Felder. - Das
<xul:resizer>
-Element ermöglicht es jetzt, daselement
-Attribut zu verwenden, um ein Element zum Skalieren anzugeben, anstatt das Fenster zu skalieren. - Das
<xul:resizer>
-Element hat jetzt eintype
-Attribut, das angibt, dass der Skalierer für ein Fenster anstelle eines Elements bestimmt ist, um zu verhindern, dass der Fenster-Skalierer zweimal gezeichnet wird. - Das Attribut "active" wird nicht mehr auf aktive XUL-Fenster gesetzt. Stattdessen können Sie die neue Pseudoklasse
:-moz-window-inactive
verwenden, um unterschiedliche Stile auf Hintergrundfenster anzuwenden. - Das
emptytext
-Attribut ist jetzt veraltet; Sie sollten stattdessenplaceholder
verwenden. - Das
<xul:window>
-Element bietet jetzt einaccelerated
-Attribut; wenn es wahr ist, darf der Hardware-Ebenen-Manager das Fenster beschleunigen. - Das
<xul:stack>
-Element unterstützt jetzt die Attributebottom
undright
. - Ereignisse werden jetzt während der Anpassung von
<xul:toolbox>
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 stattdessen die Pseudoklasse:-moz-tree-row
verwenden. - Der Überlauf-Button der Lesezeichen-Symbolleiste mit anonid chevronPopup ist nicht mehr anonym; er hat jetzt die ID "PlacesChevron".
- Das
<xul:tabs>
-Element hat jetzt einetabbox
-Eigenschaft, die die alte_tabbox
-Eigenschaft ersetzt, die veraltet ist (und nie dokumentiert wurde). - XUL
<xul:window>
-Elemente haben jetzt dasdrawintitlebar
-Attribut; wenn dies wahr ist, beinhaltet 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, festzustellen, wann Tabs angeheftet und nicht mehr angeheftet werden. - Das neue
TabAttrModified
-Ereignis wird ausgelöst, wenn die Attributelabel
,crop
,busy
,image
oderselected
eines Tabs geändert werden. <xul:tab>
-Elemente haben jetzt einpinned
-Attribut, das Ihnen ermöglicht, festzustellen, ob ein Tab derzeit angeheftet ist oder nicht.- Die setDirectionIndicator-Klasse auf
<xul:tree>
-Elementen hat schon seit einiger Zeit nichts mehr bewirkt; jetzt wird sie überhaupt nicht mehr verwendet. - Das
<xul:window>
-Element bietet jetzt daschromemargin
-Attribut, mit dem Sie den Rand zwischen Chrome und Inhalt auf jeder Seite eines Fensters festlegen können; Sie können dies verwenden, um in die Titelleiste zu zeichnen, zum Beispiel. - Das
<xul:window>
-Element hat jetzt dasdisablechrome
-Attribut; dies wird verwendet, um den Großteil des Chrome in einem Fenster auszublenden, wenn es zum Anzeigen von In-Browser-Benutzeroberflächen, wieabout:addons
, verwendet wird. - Das
<xul:window>
-Element hat jetzt dasdisablefastfind
-Attribut, das Ihnen ermöglicht, die Suchleiste in einem Fenster zu deaktivieren, wenn der Inhalt sie nicht unterstützt. Dies wird beispielsweise vom Add-ons-Panel verwendet. - Werkzeugleisten können nun extern zu Werkzeugkästen sein, während sie noch als Mitglied des
<xul:toolbox>
betrachtet werden, indem dietoolboxid
-Eigenschaft der<xul:toolbar>
festgelegt wird. Außerdem bietet das<xul:toolbox>
-Element jetzt dieexternalToolbars
-Eigenschaft, die alle Werkzeugleisten auflistet, die als Mitglieder des Werkzeugkastens betrachtet werden. - Unterstützung zum Debuggen von XUL-Vorlagen durch Logging wurde hinzugefügt.
Änderungen der Benutzeroberfläche, 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, falls Sie zuvor Benutzeroberflächenelemente zur Statusleiste hinzugefügt haben.
- Verstecken von Browser-Chrome
-
Sie können jetzt das Chrome des Browsers verbergen, wenn es wünschenswert ist; beispielsweise macht
about:addons
dies.
Speicher
Verschiedene Speicher-API-Änderungen
- Die
mozIStorageBindingParamsArray
-Schnittstelle hat jetzt ein Längenattribut, 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 vorhandene Datenbankverbindung zu klonen. - Die
mozIStorageConnection.asyncClose()
-Methode wurde hinzugefügt, die es ermöglicht, eine Datenbankverbindung asynchron zu schließen; Sie geben einen Rückruf an, der benachrichtigt wird, wenn der Schließvorgang abgeschlossen ist. - Die
mozIStorageConnection.setGrowthIncrement()
-Methode wurde hinzugefügt, die es ermöglicht, anzugeben, um wie viel eine Datenbankdatei jeweils vergrößert wird, um SQLite dabei zu helfen, Fragmentierungen zu reduzieren. - Der
SQLITE_CONSTRAINT
-Fehler wird jetzt alsNS_ERROR_STORAGE_CONSTRAINT
gemeldet, anstatt alsNS_ERROR_FAILURE
.
XPCOM
Zusätzlich zu den unten genannten spezifischen Änderungen ist es wichtig zu beachten, dass es keine eingefrorenen Schnittstellen mehr gibt. Alle Schnittstellen sind jetzt nicht mehr eingefroren, unabhängig davon, was die Dokumentation sagen mag. Wir werden die Dokumentation im Laufe der Zeit aktualisieren.
- XPCOM-Änderungen in Gecko 2.0
-
Einzelheiten zu Änderungen an XPCOM, die die Kompatibilität in Firefox 4 betreffen.
- Components.utils.getGlobalForObject()
-
Diese neue Methode gibt das globale Objekt zurück, mit dem ein Objekt verknüpft ist; dies ersetzt einen häufigen Anwendungsfall des jetzt entfernten
__parent__
.
Places
- Places-Abfrageergebnisse können jetzt von mehreren Beobachtern beobachtet und Abfragen können asynchron ausgeführt werden. Das bedeutet, dass es einige Änderungen an den Schnittstellen
nsINavHistoryResult
,nsINavHistoryQueryOptions
undnsINavHistoryContainerResultNode
gegeben hat. Wesentlich entscheidender ist jedoch, dass die SchnittstellensINavHistoryResultViewer
innsINavHistoryResultObserver
umbenannt wurde. - Einige neue Benachrichtigungen wurden hinzugefügt, um dem Browser zu ermöglichen, den Herunterfahrprozess des Places-Dienstes zuverlässiger zu verfolgen. Davon sind die meisten nur für den internen Gebrauch; jedoch ist die
places-connection-closed
-Benachrichtigung verfügbar, um zu wissen, wann der Places-Dienst seinen Herunterfahrprozess abgeschlossen hat. - Der Ausgabenparameter der Array-Größe in mehreren Places-Methoden ist jetzt optional.
- Unterstützung für
<menupopup type="places">
wurde entfernt. Stattdessen müssen Sie ein Menü mit Places-Informationen manuell erstellen und füllen, anstatt es für Sie erledigen zu lassen. Siehe Anzeigen von Places-Informationen mit Ansichten: Menüansicht für Einzelheiten.
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 "memory-pressure"-Benachrichtigungen verwenden, um auf Niedriger-Speicher-Situationen zu achten. - Das API für die Verarbeitung von Weiterleitungen auf HTTP-Kanälen hat sich geändert, um sie asynchron zu verarbeiten. Jeder Code, der Weiterleitungsverarbeitungen unter Verwendung von
nsIChannelEventSink.onChannelRedirect()
implementiert, muss aktualisiert werden, um stattdessennsIChannelEventSink.asyncOnChannelRedirect()
zu verwenden. Dies akzeptiert einen Rückrufhandler, der aufgerufen werden muss, wenn eine Weiterleitung erfolgreich abgeschlossen wurde. - Die
nsINavHistoryResultObserver.batching()
-Methode wurde hinzugefügt, die es Ihnen ermöglicht, Places-Operationen in Batchs zu gruppieren und die Anzahl der zu liefernden Update-Benachrichtigungen zu reduzieren, was die Leistung verbessern kann, wenn Beobachter relativ involvierte Aufgaben ausführen (wie das Aktualisieren von Ansichten). - Die seit langem veraltete
nsIPref
-Schnittstelle wurde endlich entfernt. Wenn Sie noch nicht zunsIPrefService
gewechselt haben, ist jetzt der richtige Zeitpunkt. - Die
nsISessionStore
- undnsISessionStartup
-Schnittstellen haben Änderungen erfahren, um die Sitzungswiederherstellung bei Bedarf zu unterstützen. Siehe diensISessionStore.restoreLastSession()
-Methode. - Die Methoden
nsIPrincipal.subsumes()
undnsIPrincipal.checkMayLoad()
dernsIPrincipal
-Schnittstelle sowie die Attributeorigin
,csp
undURI
sind jetzt aus dem Skript verfügbar; zuvor waren sie nur aus nativem Code verfügbar. - Die
nsIPrompt
-Schnittstelle unterstützt jetzt tab-modale Alarme; siehe Verwendung von Tab-modalen Alarmen für Details. - Die Methode
nsIEffectiveTLDService.getPublicSuffixFromHost()
lehnt jetzt korrekt Hostnamen, die mit einem Punkt (".") beginnen, ab. - Die Methode
mozIJSSubScriptLoader.loadSubScript()
hat jetzt ein optionales Argument bekommen, das es Ihnen ermöglicht, den Zeichensatz des Skripts anzugeben; wenn keiner angegeben ist, wird ASCII angenommen (wie immer angenommen wurde). - Die
nsIAccessProxy
-Schnittstelle wurde entfernt. Es war ein Implementierungsdetail, das seine Nützlichkeit überlebt hat. - Die
nsIContentView
- undnsIContentViewManager
-Schnittstellen wurden für Firefox Mobile hinzugefügt. Es stellt eine scrollfähige Inhaltsansicht dar, deren Inhalte tatsächlich von einem separaten Prozess gezeichnet werden. - Die
nsIDiskCacheStreamInternal
-Schnittstelle wurde hinzugefügt. - Die
nsIExternalURLHandlerService
-Schnittstelle wurde hinzugefügt. - Die
nsISyncJPAKE
-Schnittstelle wurde hinzugefügt. Siehe Firefox Bug 601645. - Die
nsIINIParserWriter
-Schnittstelle wurde in Gecko 1.9.2.4 hinzugefügt, um das Schreiben in INI-Dateien zu unterstützen.
Speicherverwaltung
- Unfehlbare Speicherzuweisung
-
Mozilla bietet jetzt unfehlbare Speicherzuweisungen an, die garantiert nicht null zurückgeben. Sie sollten diesen Artikel lesen, um zu verstehen, wie sie funktionieren und wie Sie explizit fallible von unfehlbare Speicherzuweisungen anfordern können.
Sonstige Änderungen
- Die meisten der in Firefox enthaltenen Ressourcen wurden in ein einzelnes JAR-Archiv,
omni.jar
, kombiniert, was die Startleistung verbessert, indem die I/O reduziert wird. Lesen Sie Über omni.jar für Details. - Die Einstellung
accessibility.disablecache
wird nicht mehr unterstützt; sie wurde nur zu Debugging-Zwecken freigegeben und wird nicht mehr verwendet. - Add-ons, deren GUID sich von einer Version zur anderen ändert, können jetzt korrekt aktualisiert werden.
- Als Nebeneffekt der Entfernung der plattformspezifischen Verzeichnisse in Add-on-Bundles können Sie keine unterschiedlichen Standardpräferenzen für jede Plattform mehr bereitstellen.
- Standardmäßig werden Erweiterungen nicht mehr entpackt, wenn sie installiert werden, sondern direkt aus der XPI-Datei ausgeführt. Erweiterungen können die unpack-Eigenschaft im Installationsmanifest verwenden, um das alte Verhalten auszuwählen. Erweiterungen, die Binärkomponenten, DLLs, die mit js-ctypes geladen werden, Such-Plugins, Wörterbücher und Fenster-Icons verwenden, müssen angeben, dass sie entpackt werden müssen. Erweiterungen, die SQLite-Datenbanken erstellen oder Dinge relativ zum Verzeichnis der Erweiterung vom Dateisystem kopieren, müssen möglicherweise auch ihren Code ändern.
- Sie können jetzt Erweiterungen hinzufügen, die automatisch bei Anwendungsstart 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 Ihr rootchrome.manifest
einfügen, um sie zu laden. - Unterstützung für das Gopher-Protokoll entfernt
-
Das Gopher-Protokoll wird nicht mehr nativ unterstützt. Fortgesetzte Unterstützung ist über die OverbiteFF-Erweiterung verfügbar.
- Inhaltsprozess-Ereignisbehandlung
-
Um die Unterstützung für out-of-process-Plugins und andere Multi-Prozess-Funktionen zu ermöglichen, wurde eine neue API eingeführt, um das Senden von Nachrichten über Prozesse hinweg zu unterstützen.
- Gestartete Erweiterungen
-
Sie können jetzt Erweiterungen erstellen, die installiert, deinstalliert und aktualisiert (oder herabgestuft) werden können, ohne einen Browserneustart zu erfordern.
- Standard-Plugin entfernt
-
Das Standard-Plugin wurde entfernt. Der Anwendungs-Plugins-Ordner wurde ebenfalls standardmäßig entfernt, jedoch existiert weiterhin die Unterstützung für die Installation von Plugins über diesen Ordner. Siehe Firefox-Bug 533891.
- Erweiterungs-Manager durch Add-on-Manager ersetzt
-
nsIExtensionManager
wurde durch AddonManager ersetzt. - Child HWNDs nicht mehr verwendet
-
Firefox erstellt keine Child-HWNDs mehr zur internen Verwendung unter Windows. Wenn Sie eine Erweiterung geschrieben haben, die nativen Code verwendet, um diese HWNDs zu manipulieren, wird Ihre Erweiterung unter Firefox 4 nicht funktionieren. Sie müssen entweder die Verwendung von HWNDs einstellen oder Ihren Code, der sich auf HWNDs verlässt, in ein NPAPI-Plugin einhüllen. Das erfordert viel Arbeit, also wenn Sie die direkte Verwendung von HWNDs vermeiden können, sollten Sie es tun.
- Gesten-Änderungen
-
Die Drei-Finger-Aufwärts- und Abwärts-Wischgesten auf Trackpads wurden geändert, um standardmäßig die Firefox-Panoramaansicht (ehemals TabCandy) zu öffnen und zu schließen. Um diese auf die vorherigen Befehle "zum Anfang scrollen" und "zum Ende scrollen" zurückzusetzen, öffnen Sie about:config und setzen
browser.gesture.swipe.down
aufcmd_scrollBottom
undbrowser.gesture.swipe.up
aufcmd_scrollTop
.