Aktualisieren von Erweiterungen für Firefox 3
Dieser Artikel bietet Informationen, die für Entwickler nützlich sein werden, die ihre Erweiterungen aktualisieren möchten, um ordnungsgemäß unter Firefox 3 zu funktionieren.
Bevor wir fortfahren, gibt es einen nützlichen Hinweis: Wenn die einzige Änderung, die Ihre Erweiterung benötigt, darin besteht, das maxVersion
-Feld im Installationsmanifest zu aktualisieren, und Sie Ihre Erweiterung auf addons.mozilla.org hosten, müssen Sie tatsächlich keine neue Version Ihrer Erweiterung hochladen! Verwenden Sie das Entwickler-Kontrollfeld bei AMO, um die maxVersion
anzupassen. Auf diese Weise können Sie vermeiden, dass Ihre Erweiterung erneut überprüft werden muss.
Schritt 1: Aktualisieren des Installationsmanifests
Der erste Schritt — und für die meisten Erweiterungen der einzige notwendige — ist das Aktualisieren der install manifest-Datei, install.rdf
, um die Kompatibilität mit Firefox 3 anzuzeigen.
Suchen Sie die Zeile, die die maximale kompatible Version von Firefox angibt (die für Firefox 2 so aussehen könnte):
<em:maxVersion>2.0.*</em:maxVersion>
Ändern Sie sie, um die Kompatibilität mit Firefox 3 anzuzeigen:
<em:maxVersion>3.0.*</em:maxVersion>
Installieren Sie dann Ihre Erweiterung erneut.
Beachten Sie, dass Firefox 3 das zusätzliche ".0" in der Versionsnummer entfernt hat, sodass Sie anstelle von 3.0.0.*
nur 3.0.*
verwenden müssen.
Es gab (und wird weiterhin) eine Reihe von API-Änderungen geben, die wahrscheinlich 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 install manifest verwendet, müssen Sie jetzt auf ein Installationsmanifest umstellen. Firefox 3 unterstützt keine install.js
-Skripte mehr in XPI-Dateien.
Lokalisierungen zum Installationsmanifest hinzufügen
Firefox 3 unterstützt neue Eigenschaften im Installationsmanifest zur Angabe lokalisierter Beschreibungen. Die alten Methoden funktionieren noch, jedoch ermöglichen die neuen Firefox, die Lokalisierungen sogar dann zu erkennen, wenn das Add-on deaktiviert und zur Installation ansteht. Weitere Details finden Sie unter Lokalisierung von Erweiterungsbeschreibungen.
Schritt 2: Stellen Sie sicher, dass Sie sichere Updates bereitstellen
Wenn Sie Add-ons selbst hosten und nicht auf einem sicheren Add-on-Hosting-Anbieter wie addons.mozilla.org, müssen Sie eine sichere Methode zum Aktualisieren Ihres Add-ons bereitstellen. Dies beinhaltet entweder das Hosten Ihrer Updates auf einer SSL-Website oder die Verwendung 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 bedeutender Weise geändert. Die wichtigsten davon, die wahrscheinlich eine große Anzahl von Erweiterungen betreffen werden, sind:
DOM
Knoten von externen Dokumenten sollten mit document.importNode()
(oder mit document.adoptNode()
übernommen) geklont werden, bevor sie in das aktuelle Dokument eingefügt werden können. Weitere Informationen zu den Node.ownerDocument
-Problemen finden Sie in den W3C DOM FAQ.
Firefox erzwingt diese Regel derzeit nicht (es wurde eine Zeit lang während der Entwicklung von Firefox 3 durchgesetzt, aber zu viele Websites brechen, wenn diese Regel durchgesetzt wird). Wir ermutigen Webentwickler, ihren Code zu reparieren, um diese Regel für eine verbesserte zukünftige Kompatibilität einzuhalten.
Lesezeichen & Verlauf
Wenn Ihre Erweiterung auf Lesezeichen- oder Verlaufsdaten in irgendeiner Weise zugreift, wird sie erhebliche Arbeit benötigen, 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 für Details zur Aktualisierung Ihrer vorhandenen Erweiterung auf die Places-API.
Download-Manager
Die Download-Manager-API hat sich aufgrund des Übergangs von einem RDF-Datenspeicher zur Verwendung der Storage-API leicht geändert. Dies sollte ein ziemlich einfacher Übergang sein. Darüber hinaus hat sich die API zur Überwachung des Download-Fortschritts geändert, um mehrere Download-Manager-Listener zu unterstützen. Siehe nsIDownloadManager
, nsIDownloadProgressListener
und Monitoring downloads für weitere Informationen.
Passwort-Manager
Wenn Ihre Erweiterung Benutzeranmeldeinformationen über den Passwort-Manager abruft, muss sie aktualisiert werden, um die neue Login-Manager-API zu verwenden.
- Der Artikel Using 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, damit 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 eine eigene Passwortspeicherung in Ihren Erweiterungen bereitstellen möchten. Siehe Creating a Login Manager storage module für Details.
Popups (Menüs, Kontextmenüs, Tooltips und Panels)
Das XUL-Popup-System wurde in Firefox 3 stark modifiziert. Das Popup-System umfasst Hauptmenüs, Kontextmenüs und Popup-Panels. Ein Leitfaden zur Nutzung von Popups wurde erstellt, der erklärt, wie das System funktioniert. Ein Hinweis: popup.showPopup
wurde zugunsten der neuen popup.openPopup
und popup.openPopupAtScreen
abgelehnt.
Autovervollständigung
Die Methode handleEnter()
der nsIAutoCompleteController
-Schnittstelle wurde geändert, um ein Argument zu akzeptieren, das angibt, ob der Text aus dem Autovervollständigen-Popup ausgewählt oder vom Benutzer durch Drücken der Eingabetaste nach dem Eingeben von Text ausgewählt wurde.
DOMParser
-
Wenn ein
DOMParser
instanziiert wird, erbt er das Prinzip der aufrufenden Code sowie diedocumentURI
undbaseURI
des Fensters, aus dem der Konstruktor stammt. -
Wenn der Aufrufer UniversalXPConnect-Berechtigungen hat, kann er Parameter an
new DOMParser()
übergeben. Wenn weniger als drei Parameter übergeben werden, werden die verbleibenden Parameter aufnull
gesetzt.- Der erste Parameter ist das zu verwendende Prinzip; dies überschreibt das normalerweise geerbte Standardprinzip.
- Der zweite Parameter ist die zu verwendende
documentURI
. - Der dritte Parameter ist die zu verwendende
baseURI
.
-
Wenn Sie einen
DOMParser
unter Verwendung eines Vertrags initialisieren, etwa durch Aufrufen voncreateInstance()
, und Sie dieinit()
-Methode desDOMParser
nicht aufrufen, wird bei dem Versuch, einen Parsing-Vorgang einzuleiten, derDOMParser
automatisch mit einem null-Prinzip undnull
-Zeigern fürdocumentURI
undbaseURI
erstellt und initialisiert.
Verwendung der internen String-API beenden
Die interne String-API wird nicht mehr exportiert; Sie müssen zur externen String-API migrieren. Diese Artikel bieten hilfreiche Informationen:
Entfernte Schnittstellen
Die folgenden Schnittstellen wurden aus Gecko 1.9 entfernt, das Firefox 3 antreibt. 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üfen Sie relevante Änderungen am Chrome
Es gab einige Änderungen am Chrome-Layout, die einige Erweiterungen betreffen können.
Neue Boxen
Es gab eine kleine Änderung am Chrome, die Änderungen in Ihrem Code erfordern könnte. Eine neue vbox
wurde hinzugefügt, genannt "browser-bottombox", die die Suchleiste und die Statusleiste am unteren Rand des Browserfensters umgibt. Obwohl dies das Erscheinungsbild der Anzeige nicht beeinflusst, kann es Ihre Erweiterung betreffen, wenn sie Chrome relativ zu diesen Elementen überlagert.
Zum Beispiel, wenn Sie zuvor einige Chrome 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 die folgende Technik verwenden, um Ihre Überlagerung sowohl unter Firefox 2 als auch 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 das "appcontent"-Box zu überlagern, um Chrome über den Dokumentinhalt zu schweben, zeigen dieses Material nicht mehr an. Sie sollten Ihre Erweiterung aktualisieren, um das neue <xul:panel>
XUL-Element zu verwenden. Wenn Sie verhindern möchten, dass das Panel nach einer Verzögerung automatisch verschwindet, können Sie das Attribut noautohide
auf true
setzen.
Andere Änderungen
Fügen Sie hier einfache Änderungen hinzu, die Sie beim Aktualisieren Ihrer Erweiterung zur 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 zuchrome://browser/content/utilityOverlay.js
wechseln. -
nsIAboutModule
Implementierungen 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 "toolkit" (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 zu Threading-bezogenen Schnittstellen müssen dokumentiert werden. -
Wenn Sie XML-Verarbeitungsanweisungen, wie
<?xml-stylesheet ?>
in Ihren XUL-Dateien verwenden, beachten Sie die Änderungen im Firefox-Bug 319654:- XML-PIs werden nun zu einem XUL-Dokument-DOM hinzugefügt. Das bedeutet,
document.firstChild
ist nicht mehr garantiert das Wurzelelement. Wenn Sie das Wurzeldokument in Ihrem Skript benötigen, verwenden Siedocument.documentElement
stattdessen. <?xml-stylesheet ?>
und<?xul-overlay ?>
Verarbeitungsanweisungen haben jetzt keine Wirkung mehr außerhalb des Dokumentprologs.
- XML-PIs werden nun zu einem XUL-Dokument-DOM hinzugefügt. Das bedeutet,
-
window.addEventListener("load", myFunc, true)
wird nicht ausgelöst, wenn Webinhalte geladen werden (Browser-Seitenladungen). Dies liegt an Firefox-Bug 296639, der die Art und Weise ändert, wie innere und äußere Fenster kommunizieren. Die einfache Lösung besteht darin,gBrowser.addEventListener("load", myFunc, true)
zu verwenden, was 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 jetzt veraltetencontent.document.getSelection()
, das einen String zurückgibt. -
event.preventBubble()
wurde in Firefox 2 abgelehnt und wurde in Firefox 3 entfernt. Verwenden Sieevent.stopPropagation()
, das auch in Firefox 2 funktioniert. -
Timer, die mit
setTimeout()
undsetTimeout()
initiiert werden, werden jetzt durch modale Fenster blockiert, aufgrund der in Firefox-Bug 52209 vorgenommenen Korrektur. Sie können stattdessennsITimer
verwenden. -
Wenn Ihre Erweiterung es erfordert, dass eine nicht vertrauenswürdige Quelle (z.B. eine Website) auf das Chrome der Erweiterung zugreifen kann, müssen Sie das neue
contentaccessible
-Flag verwenden.