Aktualisieren von Erweiterungen für Firefox 3
Dieser Artikel bietet Informationen, die für Entwickler nützlich sind, die ihre Erweiterungen aktualisieren möchten, um korrekt unter Firefox 3 zu funktionieren.
Bevor Sie fortfahren, gibt es einen hilfreichen Hinweis: Wenn die einzige Änderung, die Ihre Erweiterung benötigt, eine Erhöhung des maxVersion
-Feldes im Installationsmanifest ist und Sie Ihre Erweiterung bei addons.mozilla.org hosten, müssen Sie eigentlich keine neue Version Ihrer Erweiterung hochladen! Verwenden Sie das Entwickler-Kontrollpanel bei AMO, um die maxVersion
anzupassen. Auf diese Weise können Sie vermeiden, dass Ihre Erweiterung erneut überprüft werden muss.
Schritt 1: Aktualisieren Sie das Installationsmanifest
Der erste Schritt — und für die meisten Erweiterungen der einzige notwendige — ist, die Installationsmanifest-Datei, install.rdf
, zu aktualisieren, um die Kompatibilität mit Firefox 3 anzuzeigen.
Suchen Sie die Zeile, die die maximal kompatible Version von Firefox anzeigt (die für Firefox 2 möglicherweise so aussieht):
<em:maxVersion>2.0.*</em:maxVersion>
Ändern Sie sie so, dass sie die Kompatibilität mit Firefox 3 anzeigt:
<em:maxVersion>3.0.*</em:maxVersion>
Installieren Sie dann Ihre Erweiterung neu.
Beachten Sie, dass Firefox 3 die zusätzliche „.0“ in der Versionsnummer weglässt. Statt 3.0.0.*
verwenden Sie also einfach 3.0.*
.
Es gab (und wird weiterhin geben) eine Reihe von API-Änderungen, die vermutlich einige Erweiterungen beeinträchtigen werden. Wir arbeiten noch daran, eine vollständige Liste dieser Änderungen zusammenzustellen.
Hinweis:
Wenn Ihre Erweiterung noch ein Install.js
-Skript anstelle eines Installationsmanifests verwendet, müssen Sie jetzt auf ein Installationsmanifest umsteigen. Firefox 3 unterstützt install.js
-Skripte in XPI-Dateien nicht mehr.
Lokalisierungen zum Installationsmanifest hinzufügen
Firefox 3 unterstützt neue Eigenschaften im Installationsmanifest, um lokalisierte Beschreibungen anzugeben. Die alten Methoden funktionieren weiterhin, jedoch erlauben die neuen Methoden Firefox, die Lokalisierungen zu übernehmen, selbst wenn das Add-on deaktiviert und zur Installation anstehend ist. Weitere Einzelheiten finden Sie unter Lokalisieren von Erweiterungsbeschreibungen.
Schritt 2: Sicherstellen, dass Sie sichere Updates bereitstellen
Wenn Sie Addons selbst hosten und nicht auf einem sicheren Add-on-Hosting-Anbieter wie addons.mozilla.org, müssen Sie eine sichere Methode bereitstellen, um Ihr Add-on zu aktualisieren. Dies wird entweder das Hosting Ihrer Updates auf einer SSL-Website beinhalten oder das Verwenden kryptografischer Schlüssel zur Signierung der Update-Informationen. Lesen Sie Sichern von Updates für weitere Informationen.
Schritt 3: Umgang mit geänderten APIs
Mehrere APIs wurden in wesentlicher Weise geändert. Die bedeutendsten dieser Änderungen, die wahrscheinlich viele Erweiterungen betreffen, sind:
DOM
Knoten aus externen Dokumenten sollten mithilfe von document.importNode()
geklont (oder mithilfe von document.adoptNode()
angenommen) werden, bevor sie in das aktuelle Dokument eingefügt werden können. Weitere Informationen zu Node.ownerDocument
-Fragen finden Sie in den W3C DOM FAQ.
Firefox erzwingt diese Regel derzeit nicht (es tat dies für eine Weile während der Entwicklung von Firefox 3, aber zu viele Websites funktionieren nicht, wenn diese Regel durchgesetzt wird). Wir ermutigen Webentwickler, ihren Code zu korrigieren, um diese Regel für eine verbesserte zukünftige Kompatibilität einzuhalten.
Lesezeichen & Verlauf
Wenn Ihre Erweiterung auf Lesezeichen- oder Verlaufsdaten zugreift, muss sie erheblich überarbeitet werden, um mit Firefox 3 kompatibel zu sein. Die alten APIs für den Zugriff auf diese Informationen wurden durch die neue Places-Architektur ersetzt. Siehe den Places-Migrationsleitfaden, um Einzelheiten zur Aktualisierung Ihrer bestehenden Erweiterung auf die Verwendung der Places-API zu erhalten.
Download-Manager
Die Download-Manager-API hat sich leicht verändert durch den Übergang von einem RDF-Datenspeicher zur Verwendung der Storage-API. Dies sollte eine ziemlich einfache Umstellung sein. Darüber hinaus hat sich die API zur Überwachung des Download-Fortschritts geändert, um mehrere Download-Manager-Listener zu unterstützen. Weitere Informationen finden Sie unter nsIDownloadManager
, nsIDownloadProgressListener
und Überwachen von Downloads.
Passwort-Manager
Wenn Ihre Erweiterung auf Benutzer-Login-Informationen über den Passwort-Manager zugreift, muss sie aktualisiert werden, um die neue Login-Manager-API zu verwenden.
- Der Artikel Verwendung von nsILoginManager enthält Beispiele, einschließlich einer Demonstration, wie Sie Ihre Erweiterung so schreiben, dass sie sowohl mit dem Passwort-Manager als auch mit dem Login-Manager funktioniert, sodass sie sowohl mit Firefox 3 als auch mit früheren Versionen funktioniert.
nsILoginInfo
nsILoginManager
Sie können auch den eingebauten Passwort-Manager-Speicher überschreiben, wenn Sie Ihre eigene Passwortspeicherimplementierung in Ihren Erweiterungen bereitstellen möchten. Einzelheiten finden Sie unter Erstellen eines Login-Manager-Speichermoduls.
Popups (Menüs, Kontextmenüs, Tooltips und Panels)
Das XUL-Popup-System wurde in Firefox 3 stark überarbeitet. Das Popup-System umfasst Hauptmenüs, Kontextmenüs und Popup-Panels. Ein Leitfaden zur Verwendung von Popups wurde erstellt, der detailliert beschreibt, wie das System funktioniert. Zu beachten ist, dass popup.showPopup
zugunsten der neuen Methoden popup.openPopup
und popup.openPopupAtScreen
veraltet ist.
Autovervollständigung
Die Methode handleEnter()
des Interfaces nsIAutoCompleteController
wurde geändert, um ein Argument zu akzeptieren, das angibt, ob der Text aus dem Autovervollständigungspopup ausgewählt wurde oder durch Drücken von Enter nach dem Tippen durch den Benutzer.
DOMParser
-
Wenn ein
DOMParser
instanziiert wird, erbt er die Grundlagen des aufrufenden Codes sowie diedocumentURI
undbaseURI
des Fensters, aus dem der Konstruktor stammt. -
Wenn der Anrufer UniversalXPConnect-Berechtigungen hat, kann er Parameter an
new DOMParser()
übergeben. Wenn weniger als drei Parameter übergeben werden, werden die restlichen Parameter aufnull
gesetzt.- Der erste Parameter ist die Grundlage, die verwendet werden soll; dieser überschreibt die normalerweise geerbte Standardgrundlage.
- Der zweite Parameter ist die zu verwendende
documentURI
. - Der dritte Parameter ist die zu verwendende
baseURI
.
-
Wenn Sie einen
DOMParser
mithilfe eines Vertrags initialisieren, zum Beispiel durch Aufrufen voncreateInstance()
, und Sie dieinit()
-Methode desDOMParser
nicht aufrufen, wird beim Versuch, eine Parsing-Operation zu starten, derDOMParser
automatisch mit einer null-Fundstelle und null-Zeigern fürdocumentURI
undbaseURI
erstellt und initialisiert.
Verwendung der internen String-API einstellen
Die interne String-API wird nicht mehr exportiert; Sie müssen zur externen String-API wechseln. Diese Artikel bieten hilfreiche Informationen:
Entfernte Schnittstellen
Die folgenden Schnittstellen wurden aus Gecko 1.9, dem Antrieb von Firefox 3, entfernt. Wenn Ihre Erweiterung eine dieser Schnittstellen verwendet, müssen Sie Ihren Code aktualisieren:
nsIDOMPaintListener
nsIDOMScrollListener
nsIDOMMutationListener
nsIDOMPageTransitionListener
nsICloseAllWindows
(siehe Firefox Bug 386200)
Schritt 4: Überprüfung auf relevante Chrome-Änderungen
Es gab einige Änderungen am Chrome-Layout, die einige Erweiterungen betreffen könnten.
Neue Boxen
Es gab eine geringfügige Änderung am Chrome, die Änderungen an Ihrem Code erforderlich machen könnte. Ein neues vbox
wurde hinzugefügt, genannt "browser-bottombox", das die Suchleiste und die Statusleiste am unteren Rand des Browserfensters umschließt. Obwohl diese Änderung das Erscheinungsbild der Anzeige nicht beeinflusst, kann sie Ihre Erweiterung betreffen, wenn sie Chrome relativ zu diesen Elementen überlagert.
Zum Beispiel, wenn Sie zuvor einige Chrome-Elemente vor der Statusleiste überlagert haben, wie folgt:
<window id="main-window">
<something insertbefore="status-bar" />
</window>
Sollten Sie es jetzt so überlagern:
<vbox id="browser-bottombox">
<something insertbefore="status-bar" />
</vbox>
Oder verwenden Sie die folgende Technik, um Ihr Overlay sowohl auf Firefox 2 als auch auf Firefox 3 funktionsfähig zu machen:
<window id="main-window">
<vbox id="browser-bottombox" insertbefore="status-bar">
<something insertbefore="status-bar" />
</vbox>
</window>
Geänderte Boxen
Erweiterungen, die versuchen, auf die Box "appcontent" zu überlagern, versuchen, Chrome über dem Dokumentinhalt zu schweben, werden diese Materialien nicht mehr anzeigen. Sie sollten Ihre Erweiterung aktualisieren, um das neue <xul:panel>
XUL-Element zu verwenden. Wenn Sie möchten, dass das Panel nicht automatisch nach einer Verzögerung verschwindet, können Sie das Attribut noautohide
auf true
setzen.
Weitere Änderungen
Fügen Sie einfache Änderungen hinzu, die Sie beim Aktualisieren Ihrer Erweiterung auf die Arbeit mit Firefox 3 vornehmen mussten.
-
chrome://browser/base/utilityOverlay.js
wird aus Sicherheitsgründen nicht mehr unterstützt. Wenn Sie dies zuvor verwendet haben, sollten Sie aufchrome://browser/content/utilityOverlay.js
umsteigen. -
Implementierungen von
nsIAboutModule
müssen jetzt die MethodegetURIFlags
unterstützen. Siehe nsIAboutModule.idl für Dokumentation. Dies betrifft Erweiterungen, die neueabout:
-URIs bereitstellen. (Firefox Bug 337746) -
Das
<xul:tabbrowser>
-Element ist nicht mehr Teil des "Kits" (Firefox Bug 339964). Das bedeutet, dass dieses Element nicht mehr für XUL-Anwendungen und Erweiterungen verfügbar ist. Es wird weiterhin im Hauptfenster von Firefox (browser.xul) verwendet. -
Änderungen an
nsISupports_proxies
und möglicherweise an threading-bezogenen Schnittstellen müssen dokumentiert werden. -
Wenn Sie XML-Verarbeitungshinweise verwenden, wie z. B.
<?xml-stylesheet ?>
in Ihren XUL-Dateien, beachten Sie die Änderungen, die im Firefox Bug 319654 vorgenommen wurden:- XML-PIs werden jetzt in das DOM eines XUL-Dokuments eingefügt. Das bedeutet,
document.firstChild
ist nicht mehr garantiert das Root-Element. Wenn Sie das Root-Dokument in Ihrem Skript erhalten müssen, verwenden Sie stattdessendocument.documentElement
. <?xml-stylesheet ?>
und<?xul-overlay ?>
-Verarbeitungshinweise haben nun außerhalb des Dokumentprologs keine Auswirkungen mehr.
- XML-PIs werden jetzt in das DOM eines XUL-Dokuments eingefügt. Das bedeutet,
-
window.addEventListener("load", myFunc, true)
wird beim Laden von Webinhalten (Browser-Seitenladevorgänge) nicht mehr ausgelöst. Dies ist auf Firefox Bug 296639 zurückzuführen, der die Art und Weise ändert, wie Innen- und Außenfenster kommunizieren. Die einfache Lösung hier ist die Verwendung vongBrowser.addEventListener("load", myFunc, true)
, welches auch in Firefox 2 funktioniert. -
content.window.getSelection()
gibt ein Objekt zurück (das durchtoString()
in einen String umgewandelt werden kann), im Gegensatz zu dem nun veraltetencontent.document.getSelection()
, das einen String zurückgibt. -
event.preventBubble()
wurde in Firefox 2 veraltet und in Firefox 3 entfernt. Verwenden Sieevent.stopPropagation()
, das auch in Firefox 2 funktioniert. -
Timer, die mit
setTimeout()
undsetTimeout()
initiiert werden, werden jetzt von modalen Fenstern blockiert aufgrund des Fixes für Firefox Bug 52209. Sie können stattdessennsITimer
verwenden. -
Wenn Ihre Erweiterung es benötigt, dass eine nicht vertrauenswürdige Quelle (z. B. eine Website) auf das Chrome der Erweiterung zugreifen kann, müssen Sie die neue
contentaccessible
-Flagge verwenden.