mozilla

Version 271031 von Erweiterungen für Firefox 3 aktualisieren

  • Adressname der Version: Erweiterungen_für_Firefox_3_aktualisieren
  • Titel der Version: Erweiterungen_für_Firefox_3_aktualisieren
  • ID der Version: 271031
  • Erstellt:
  • Autor: fscholz
  • Aktuelle Version? Nein
  • Kommentar 553 words added, 670 words removed

Inhalt der Version

{{ Fx_minversion_header("3") }} Dieser Artikel liefert nützliche Informationen für Entwickler, die ihre Erweiterungen aktualisieren möchten, um eine einwandfreie Funktion unter Firefox 3 zu gewährleisten.

Vorweg eine hilfreiche Anmerkung: Wenn die einzig notwendige Änderung an der Erweiterung der Eintrag maxVersion im Installationsmanifest ist und die Erweiterung auf addons.mozilla.org bereitgestellt wird, ist es nicht nötig eine neue Version der Erweiterung zu veröffentlichen. Im »Developer Control Panel« auf AMO kann die maxVersion, ohne einen neuen Upload, eingestellt werden. Dadurch kann auch vermieden werden, dass die Erweiterung nochmal überprüft werden muss.

Schritt 1: Installationsmanifest aktualisieren

Der erste Schritt - und für die meisten Erweiterungen der einzig Nötige - ist eine Aktualisierung der Installationsmanifestdatei, install.rdf, um die Erweiterung als Firefox 3 kompatibel zu kennzeichnen.

Als erstes muss die Zeile zur Kennzeichnung der maximal kompatiblen Firefox-Version gefunden werden (welche für Firefox 2 so aussehen sollte):

 <em:maxVersion>2.0.0.*</em:maxVersion>

Um als Firefox 3 kompatibel zu gelten, reicht die folgende Änderung:

 <em:maxVersion>3.0.*</em:maxVersion>

Danach muss die Erweiterung neu installiert werden.

Dabei sollte darauf geachtet werden, dass Firefox 3 keine extra ".0" in der Versionsnummer hat, anstatt "3.0.0.*, sollte nur "3.0.*" verwendet werden.

Es gab (und es wird weiterhin welche geben) eine Reihe von API Veränderungen, die dazu führen, dass einige Erweiterungen nicht weiter funktionieren. Es wird an einer kompletten Liste gearbeitet, die diese Veränderungen aufzählt.

Hinweis: Wenn die Erweiterung noch immer ein Install.js Skript, anstatt eines Installationsmanifests benutzt, sollte ein Wechsel jetzt getätigt werden. Firefox 3 unterstützt keine install.js Skripte in XPI Dateien mehr.

Das Installationsmanifest lokalisieren

Firefox 3 führt neue Eigenschaften ein, um lokalisierte Beschreibungen zu ermöglichen. Die alte Methode funktioniert nach wie vor, auch wenn die neue Firefox-Version erlaubt, sogar dann die lokalisierten Sprachdaten zu nutzen, wenn die Erweiterung deaktiviert oder noch zur Installation vorgesehen ist.

Schritt 2: Sichere Updates zur Verfügung stellen

Falls die Erweiterungen selbst bereitgestellt wird und nicht bei addons.mozilla.org angeboten wird, müssen sichere Updates selbst verwaltet werden. Dazu können die Updates entweder über eine SSL Webseite angeboten werden oder die Updates werden mit einem Kryptographieschlüssel signiert. Weitere Informationen dazu unter: Sichere Updates.

Schritt 3: Mit geänderten APIs umgehen

Mehrere APIs haben sich erheblich geändert. Die wichtigsten davon, die sich auf viele Erweiterungen auswirken, sind:

DOM

{{ :de/DOM/WRONG_DOCUMENT_ERR_note() }}

Lesezeichen & Chronik

Falls die Erweiterung in irgendeiner Art auf Lesezeichen oder die Chronik zugreift, sind umfangreichere Änderungen nötig, um die Kompatibilität mit Firefox 3 zu gewährleisten. Die alte API zum Zugriff auf diese Informationen wurde durch die neue Places Architektur ersetzt. Im Leitfaden zur Places Migration finden sich dazu weitere Details, auch wie die bestehende Erweiterung auf die »Places« API aktualisiert werden kann.

Download-Manager

Die Download-Manager API hat sich durch den Wechsel vom RDF Datenspeicher zur Storage API ein wenig geändert. Der Wechsel sollte relativ einfach durchzuführen sein. Außerdem hat sich die API zum Überwachen des Downloadfortschritts geändert, um mehrere Download-Manager Listeners zu unterstützen. Unter {{ Interface("nsIDownloadManager") }}, {{ Interface("nsIDownloadProgressListener") }} und Downloads überwachen sind weitere Informationen verfügbar.

Passwort-Manager

Wenn die Erweiterung den Passwort-Manager benutzt, um auf Anmeldeinformationen zuzugreifen muss die Erweiterung auf die neue Login Manager API umgestellt werden.

  • Der Artikel Verwendung von nsILoginManager enthält Beispiele. Darunter findet sich auch eine Demo wie die Erweiterung sowohl den Passwort-Manager als auch den Login-Manager benutzen kann. Dadurch kann die Erweiterung von Firefox 3 und von früheren Versionen genutzt werden.
  • nsILoginInfo
  • nsILoginManager

Es kann aber auch der integrierte Speicher des Passwort-Managers überschrieben werden, falls eine eigene Implementierung in der Erweiterung angeboten werden soll. Weitere Details unter Ein Login-Manager Speichermodul erstellen.

Popups (Menü, Kontextmenü, Tooltips und Eingabefelder)

Das XUL Popup-System wurde im Firefox 3 stark verändert. Das Popup-System umfasst Hauptmenüs, Kontextmenüs und Popup Eingabefelder. Der Artikel zu Popups beschreibt detailliert wie das System funktioniert. Zu beachten ist außerdem, dass popup.{{ XULMeth("showPopup") }} zugunsten von popup.{{ XULMeth("openPopup") }} und popup.{{ XULMeth("openPopupAtScreen") }} als veraltet gekennzeichnet wurde.

Autovervollständigung

Die handleEnter() Methode im {{ Interface("nsIAutoCompleteController") }} Interface wurde um ein Argument erweitert. Dieses kennzeichnet, ob der abgesendete Text im Autovervollständigungspopup ausgewählt wurde oder, ob der Benutzer nach seiner Eingabe »Enter« gedrückt hat.

DOMParser

  • Wenn ein DOMParser instanziiert wird, erbt er das vom aufrufenden Code repräsentierte Dokument sowie documentURI und baseURI des aufrufenden Fensters.
  • Hat der Aufrufende Code UniversalXPConnect Privilegien, kann er Parameter an new DOMParser() übergeben. Werden weniger als drei Parameter übergeben werden die übrig gebliebenen standardmäßig mit null belegt.
    • Der erste Parameter ist das zu parsende Dokument und überschreibt den für gewöhnlich geerbten Standardwert.
    • Der zweite Parameter enthält documentURI.
    • Der dritte Parameter enthält baseURI.
  • Falls ein DOMParser durch einen Auftrag aufgerufen wird, wie z.B. durch createInstance(), nicht die init() Methode des DOM-Parsers aufgerufen wird und versucht wird eine Parseroperation zu starten, wird der DOMParser automatisch mit einem null Dokument und null Verweisen auf documentURI und baseURI erstellt und instanziiert.

Keine weitere Verwendung der internen String API

Die interne String API wird nicht weiter ausgeführt, stattdessen muss die externe String API benutzt werden. Einige nützliche Informationen dazu:

Entfernte Interfaces

Folgende Interfaces wurden aus, der im Firefox 3 enthaltenen, Gecko-Engine 1.9 entfernt. Wenn die Erweiterung eines davon nutzt, muss der Code aktualisiert werden:

  • nsIDOMPaintListener
  • nsIDOMScrollListener
  • nsIDOMMutationListener
  • nsIDOMPageTransitionListener
  • nsICloseAllWindows (Siehe {{ Bug("386200") }})

Schritt 4: Auf Chrome Änderungen überprüfen

Es gab einige Veränderungen im Chrome-Layout, die eventuell auch Erweiterungen betreffen.

Neue Boxen

Es wurden kleinere Änderungen an der Oberfläche vorgenommen, die Änderungen an der Erweiterung nötig machen könnten. Eine neue vbox mit dem Namen »browser-bottombox« wurde hinzugefügt, welche die »Find Bar« und die »Status Bar« am unteren Rand des Browsers umschließt. Auch wenn dies nicht die Anzeige selbst beeinflusst, kann dies deine Erweiterung betreffen falls diese »Overlays« verwendet, die Elemente ändern, die relativ zu besagten Elementen positioniert sind.

Zum Beispiel, wenn vorher etwas überlagert wurde, wie im folgendem Codeschnipsel:

<window id="main-window">
  <something insertbefore="status-bar" />
</window>

Sollte es nun so überlagert werden:

<vbox id="browser-bottombox">
  <something insertbefore="status-bar" />
</vbox>

Oder, um Firefox 2 und Firefox 3 gleichermaßen zu behandeln, kann der folgende Code zum Einsatz kommen:

<window id="main-window">
  <vbox id="browser-bottombox" insertbefore="status-bar">
    <something insertbefore="status-bar" />
  </vbox>
</window>

Veränderte Boxen

Erweiterungen, die auf die »appcontent« Box überlagern wollten, versuchten dies über das Floaten von Chrome-Inhalten über Dokumenteninhalten. Jetzt wird dann nicht mehr angezeigt. Die Erweiterung sollte auf das neue XUL panel Element aktualisiert werden. Falls es erwünscht ist, dass das Panel nach einer Verzögerung weiter angezeigt wird, sollte noautohide auf true gesetzt werden.

Weitere Änderungen

Einfache Änderungen, die Sie bei der Aktualisierung Ihrer Erweiterung auf Firefox 3 machen mussten, können Sie hier gerne eintragen!

  • chrome://browser/base/utilityOverlay.js wird aus Sicherheitsgründen nicht länger unterstützt. Falls dies vorher verwendet wurde, sollte auf chrome://browser/content/utilityOverlay.js. gewechselt werden.
  • Bei {{ Interface("nsIAboutModule") }} Implementierungen wird nun getURIFlags Methode benötigt. Siehe {{ Source("netwerk/protocol/about/public/nsIAboutModule.idl", "nsIAboutModule.idl") }} für weitere Dokumentation. Das betrifft Erweiterungen, die neue about: URIs verwenden. ({{ Bug("337746") }})
  • Das {{ XULElem("tabbrowser") }} Element ist kein Teil mehr von »toolkit« ({{ Bug("339964") }}). Das bedeutet, dass dieses Element nicht länger für XUL Anwendungen und Erweiterungen verfügbar ist. Es wird weiterhin in Firefox' Hauptfenster (browser.xul) benutzt.
  • Veränderungen an nsISupports proxies und möglicherweise ab Thread-bezogenen Interfaces muss noch dokumentiert werden.
  • Wenn XML Prozessanweisungen wie <?xml-stylesheet ?> in XUL Dateien verwendet werden, sollten Änderungen durch {{ Bug("319654") }} beachtet werden:
    1. XML Prozessanweisungen werden nun in das XUL DOM hinzugefügt. Das bedeutet, dass {{ Domxref("document.firstChild") }} nicht unbedingt mehr das Root-Element sein muss. Wenn das Wurzelelement angesprochen werden muss sollte {{ Domxref("document.documentElement") }} verwendet werden.
    2. <?xml-stylesheet ?> und <?xul-overlay ?> Prozessanweisungen haben jetzt außerhalb des Dokumentprologs keinen Effekt mehr.
  • window.addEventListener("load", myFunc, true) wird nicht ausgeführt, wenn Webinhalte geladen werden (Browser eine Seite lädt). Durch {{ Bug("296639") }} wurde die Art und Weise in der innere und äußere Fenster kommunizieren verändert. Ein einfacher Fix, der auch in Firefox 2 funktioniert: gBrowser.addEventListener("load", myFunc, true) wie hier beschrieben.
  • content.window.getSelection() gibt ein Objekt zurück (welches durch toString() zu einem String umgewandelt werden kann), im Gegensatz zu dem jetzt veraltetem content.document.getSelection(), welches einen String zurück gibt.
  • event.preventBubble() war Firefox 2 in deprecated und wurde in Firefox 3 entfernt. Es sollte event.stopPropagation() verwendet werden, was in Firefox 2 ebenso funktioniert.
  • Timers, die durch setTimeout() initialisiert wurden, werden nun von modalen Fenstern, durch den Fix von {{ Bug("52209") }}, geblockt. Es könnte nsITimer stattdessen verwendet werden.
  • Wenn die Erweiterung einer nicht vertrauten Quelle (z.B. eine Webseite) Zugang zu Chrome zulassen muss, sollte die neue contentaccessible Flag benutzt werden.

{{ languages( { "en": "en/Updating_extensions_for_Firefox_3", "fr": "fr/Mise_\u00e0_jour_des_extensions_pour_Firefox_3", "ja": "ja/Updating_extensions_for_Firefox_3", "pl": "pl/Aktualizacja_rozszerze\u0144_dla_Firefoksa_3", "ko": "ko/Updating_extensions_for_Firefox_3", "es": "es/Actualizar_extensiones_para_Firefox_3" } ) }}

Quelltext der Version

<p>{{ Fx_minversion_header("3") }} Dieser Artikel liefert nützliche Informationen für Entwickler, die ihre Erweiterungen aktualisieren möchten, um eine einwandfreie Funktion unter Firefox 3 zu gewährleisten.</p>
<p>Vorweg eine hilfreiche Anmerkung: Wenn die einzig notwendige Änderung an der Erweiterung der Eintrag <code>maxVersion</code> im Installationsmanifest ist und die Erweiterung auf <a class="link-https" href="https://addons.mozilla.org">addons.mozilla.org</a> bereitgestellt wird, ist es nicht nötig eine neue Version der Erweiterung zu veröffentlichen. Im »Developer Control Panel« auf <abbr title="Addons.Mozilla.Org">AMO</abbr> kann die <code>maxVersion</code>, ohne einen neuen Upload, eingestellt werden. Dadurch kann auch vermieden werden, dass die Erweiterung nochmal überprüft werden muss.</p>
<h3 id="Schritt_1:_Installationsmanifest_aktualisieren">Schritt 1: Installationsmanifest aktualisieren</h3>
<p>Der erste Schritt - und für die meisten Erweiterungen der einzig Nötige - ist eine Aktualisierung der <a href="/de/Installationsmanifest" title="de/Installationsmanifest">Installationsmanifestdatei</a>, <code>install.rdf</code>, um die Erweiterung als Firefox 3 kompatibel zu kennzeichnen.</p>
<p>Als erstes muss die Zeile zur Kennzeichnung der maximal kompatiblen Firefox-Version gefunden werden (welche für Firefox 2 so aussehen sollte):</p>
<pre class="eval"> <span class="nowiki">&lt;em:maxVersion&gt;2.0.0.*&lt;/em:maxVersion&gt;</span>
</pre>
<p>Um als Firefox 3 kompatibel zu gelten, reicht die folgende Änderung:</p>
<pre class="eval"> <span class="nowiki">&lt;em:maxVersion&gt;3.0.*&lt;/em:maxVersion&gt;</span>
</pre>
<p>Danach muss die Erweiterung neu installiert werden.</p>
<p>Dabei sollte darauf geachtet werden, dass Firefox 3 keine extra ".0" in der Versionsnummer hat, anstatt "3.0.0.*, sollte nur "3.0.*" verwendet werden.</p>
<p>Es gab (und es wird weiterhin welche geben) eine Reihe von API Veränderungen, die dazu führen, dass einige Erweiterungen nicht weiter funktionieren. Es wird an einer kompletten Liste gearbeitet, die diese Veränderungen aufzählt.</p>
<div class="note"><strong>Hinweis:</strong> Wenn die Erweiterung noch immer ein <code><a href="/de/Install.js" title="de/Install.js">Install.js</a></code> Skript, anstatt eines <a href="/de/Installationsmanifest" title="de/Installationsmanifest">Installationsmanifests</a> benutzt, sollte ein Wechsel jetzt getätigt werden. Firefox 3 unterstützt keine <code>install.js</code> Skripte in XPI Dateien mehr.</div>
<h4 id="Das_Installationsmanifest_lokalisieren">Das Installationsmanifest lokalisieren</h4>
<p>Firefox 3 führt neue Eigenschaften ein, um <a href="/de/Lokalisierung_von_Erweiterungsbeschreibungen" title="de/Lokalisierung_von_Erweiterungsbeschreibungen">lokalisierte Beschreibungen</a> zu ermöglichen. Die alte Methode funktioniert nach wie vor, auch wenn die neue Firefox-Version erlaubt, sogar dann die lokalisierten Sprachdaten zu nutzen, wenn die Erweiterung deaktiviert oder noch zur Installation vorgesehen ist.</p>
<h3 id="Schritt_2:_Sichere_Updates_zur_Verf.C3.BCgung_stellen">Schritt 2: Sichere Updates zur Verfügung stellen</h3>
<p>Falls die Erweiterungen selbst bereitgestellt wird und nicht bei <a class="link-https" href="https://addons.mozilla.org">addons.mozilla.org</a> angeboten wird, müssen sichere Updates selbst verwaltet werden. Dazu können die Updates entweder über eine SSL Webseite angeboten werden oder die Updates werden mit einem Kryptographieschlüssel signiert. Weitere Informationen dazu unter: <a href="/de/Erweiterungsversionierung,_Updates_und_Kompatibilität#Sichere_Updates" title="de/Erweiterungsversionierung,_Updates_und_Kompatibilität#Sichere_Updates">Sichere Updates</a>.</p>
<h3 id="Schritt_3:_Mit_ge.C3.A4nderten_APIs_umgehen">Schritt 3: Mit geänderten APIs umgehen</h3>
<p>Mehrere APIs haben sich erheblich geändert. Die wichtigsten davon, die sich auf viele Erweiterungen auswirken, sind:</p>
<h4 id="DOM" name="DOM">DOM</h4>
<p>{{ :de/DOM/WRONG_DOCUMENT_ERR_note() }}</p>
<h4 id="Lesezeichen_&amp;_Chronik">Lesezeichen &amp; Chronik</h4>
<p>Falls die Erweiterung in irgendeiner Art auf Lesezeichen oder die Chronik zugreift, sind umfangreichere Änderungen nötig, um die Kompatibilität mit Firefox 3 zu gewährleisten. Die alte API zum Zugriff auf diese Informationen wurde durch die neue <a href="/de/Places" title="de/Places">Places</a> Architektur ersetzt. Im <a href="/de/Leitfaden_zur_Places_Migration" title="de/Leitfaden_zur_Places_Migration">Leitfaden zur Places Migration</a> finden sich dazu weitere Details, auch wie die bestehende Erweiterung auf die »Places« API aktualisiert werden kann.</p>
<h4 id="Download-Manager">Download-Manager</h4>
<p>Die Download-Manager API hat sich durch den Wechsel vom RDF Datenspeicher zur <a href="/de/Storage" title="de/Storage">Storage</a> API ein wenig geändert. Der Wechsel sollte relativ einfach durchzuführen sein. Außerdem hat sich die API zum Überwachen des Downloadfortschritts geändert, um mehrere Download-Manager Listeners zu unterstützen. Unter {{ Interface("nsIDownloadManager") }}, {{ Interface("nsIDownloadProgressListener") }} und <a href="/de/Downloads_überwachen" title="de/Downloads_überwachen">Downloads überwachen</a> sind weitere Informationen verfügbar.</p>
<h4 id="Passwort-Manager">Passwort-Manager</h4>
<p>Wenn die Erweiterung den Passwort-Manager benutzt, um auf Anmeldeinformationen zuzugreifen muss die Erweiterung auf die neue Login Manager API umgestellt werden.</p>
<ul> <li>Der Artikel <a href="/de/Verwendung_von_nsILoginManager">Verwendung von nsILoginManager</a> enthält Beispiele. Darunter findet sich auch eine Demo wie die Erweiterung sowohl den Passwort-Manager als auch den Login-Manager benutzen kann. Dadurch kann die Erweiterung von Firefox 3 und von früheren Versionen genutzt werden.</li> <li><code><a href="/de/nsILoginInfo" title="de/nsILoginInfo">nsILoginInfo</a></code></li> <li><code><a href="/de/nsILoginManager" title="de/nsILoginManager">nsILoginManager</a></code></li>
</ul>
<p>Es kann aber auch der integrierte Speicher des Passwort-Managers überschrieben werden, falls eine eigene Implementierung in der Erweiterung angeboten werden soll. Weitere Details unter <a href="/de/Ein_Login-Manager_Speichermodul_erstellen" title="de/Ein_Login-Manager_Speichermodul_erstellen">Ein Login-Manager Speichermodul erstellen</a>.</p>
<h4 id="Popups_(Men.C3.BC,_Kontextmen.C3.BC,_Tooltips_und_Eingabefelder)">Popups (Menü, Kontextmenü, Tooltips und Eingabefelder)</h4>
<p>Das XUL Popup-System wurde im Firefox 3 stark verändert. Das Popup-System umfasst Hauptmenüs, Kontextmenüs und Popup Eingabefelder. Der Artikel zu <a href="/de/XUL/Popup_Leitfaden" title="de/XUL/Popup_Leitfaden">Popups</a> beschreibt detailliert wie das System funktioniert. Zu beachten ist außerdem, dass <code>popup.{{ XULMeth("showPopup") }}</code> zugunsten von <code>popup.{{ XULMeth("openPopup") }}</code> und <code>popup.{{ XULMeth("openPopupAtScreen") }}</code> als veraltet gekennzeichnet wurde.</p>
<h4 id="Autovervollst.C3.A4ndigung" name="Autovervollst.C3.A4ndigung">Autovervollständigung</h4>
<p>Die <code><a href="/de/NsIAutoCompleteController#Enter_behandeln.28.29" title="de/NsIAutoCompleteController#Enter_behandeln.28.29">handleEnter()</a></code> Methode im {{ Interface("nsIAutoCompleteController") }} Interface wurde um ein Argument erweitert. Dieses kennzeichnet, ob der abgesendete Text im Autovervollständigungspopup ausgewählt wurde oder, ob der Benutzer nach seiner Eingabe »Enter« gedrückt hat.</p>
<h4 id="DOMParser">DOMParser</h4>
<ul> <li>Wenn ein <code>DOMParser</code> instanziiert wird, erbt er das vom aufrufenden Code repräsentierte Dokument sowie <code>documentURI</code> und <code>baseURI</code> des aufrufenden Fensters.</li> <li>Hat der Aufrufende Code UniversalXPConnect Privilegien, kann er Parameter an <code>new DOMParser()</code> übergeben. Werden weniger als drei Parameter übergeben werden die übrig gebliebenen standardmäßig mit <code>null</code> belegt. <ul> <li>Der erste Parameter ist das zu parsende Dokument und überschreibt den für gewöhnlich geerbten Standardwert.</li> <li>Der zweite Parameter enthält <code>documentURI</code>.</li> <li>Der dritte Parameter enthält <code>baseURI</code>.</li> </ul> </li> <li>Falls ein <code>DOMParser</code> durch einen Auftrag aufgerufen wird, wie z.B. durch <code>createInstance()</code>, nicht die <code>init()</code> Methode des DOM-Parsers aufgerufen wird und versucht wird eine Parseroperation zu starten, wird der <code>DOMParser</code> automatisch mit einem <code>null</code> Dokument und <code>null</code> Verweisen auf <code>documentURI</code> und <code>baseURI</code> erstellt und instanziiert.</li>
</ul>
<h4 id="Keine_weitere_Verwendung_der_internen_String_API">Keine weitere Verwendung der internen String API</h4>
<p>Die interne String API wird nicht weiter ausgeführt, stattdessen muss die externe String API benutzt werden. Einige nützliche Informationen dazu:</p>
<ul> <li><a href="/de/Externe_Strings">Externe Strings</a></li> <li><a href="/de/XPCOM_Glue">XPCOM Glue</a></li> <li><a href="/de/Von_interner_Verlinkung_zu_fester_Verlinkung_wechseln">Von interner Verlinkung zu fester Verlinkung wechseln</a></li>
</ul>
<h4 id="Entfernte_Interfaces">Entfernte Interfaces</h4>
<p>Folgende Interfaces wurden aus, der im Firefox 3 enthaltenen, Gecko-Engine 1.9 entfernt. Wenn die Erweiterung eines davon nutzt, muss der Code aktualisiert werden:</p>
<ul> <li><code>nsIDOMPaintListener</code></li> <li><code>nsIDOMScrollListener</code></li> <li><code>nsIDOMMutationListener</code></li> <li><code>nsIDOMPageTransitionListener</code></li> <li><code>nsICloseAllWindows</code> (Siehe {{ Bug("386200") }})</li>
</ul>
<h3 id="Schritt_4:_Auf_Chrome_.C3.84nderungen_.C3.BCberpr.C3.BCfen">Schritt 4: Auf <em>Chrome</em> Änderungen überprüfen</h3>
<p>Es gab einige Veränderungen im <em>Chrome</em>-Layout, die eventuell auch Erweiterungen betreffen.</p>
<h4 id="Neue_Boxen">Neue Boxen</h4>
<p>Es wurden kleinere Änderungen an der Oberfläche vorgenommen, die Änderungen an der Erweiterung nötig machen könnten. Eine neue <code>vbox</code> mit dem Namen »browser-bottombox« wurde hinzugefügt, welche die »Find Bar« und die »Status Bar« am unteren Rand des Browsers umschließt. Auch wenn dies nicht die Anzeige selbst beeinflusst, kann dies deine Erweiterung betreffen falls diese »Overlays« verwendet, die Elemente ändern, die relativ zu besagten Elementen positioniert sind.</p>
<p>Zum Beispiel, wenn vorher etwas überlagert wurde, wie im folgendem Codeschnipsel:</p>
<pre>&lt;window id="main-window"&gt;
  &lt;something insertbefore="status-bar" /&gt;
&lt;/window&gt;
</pre>
<p>Sollte es nun so überlagert werden:</p>
<pre>&lt;vbox id="browser-bottombox"&gt;
  &lt;something insertbefore="status-bar" /&gt;
&lt;/vbox&gt;
</pre>
<p>Oder, um Firefox 2 und Firefox 3 gleichermaßen zu behandeln, kann der folgende Code zum Einsatz kommen:</p>
<pre>&lt;window id="main-window"&gt;
  &lt;vbox id="browser-bottombox" insertbefore="status-bar"&gt;
    &lt;something insertbefore="status-bar" /&gt;
  &lt;/vbox&gt;
&lt;/window&gt;
</pre>
<h4 id="Ver.C3.A4nderte_Boxen">Veränderte Boxen</h4>
<p>Erweiterungen, die auf die »appcontent« Box überlagern wollten, versuchten dies über das Floaten von Chrome-Inhalten über Dokumenteninhalten. Jetzt wird dann nicht mehr angezeigt. Die Erweiterung sollte auf das neue XUL panel Element aktualisiert werden. Falls es erwünscht ist, dass das Panel nach einer Verzögerung weiter angezeigt wird, sollte <code>noautohide</code> auf <code>true</code> gesetzt werden.</p>
<h3 id="Weitere_.C3.84nderungen">Weitere Änderungen</h3>
<p><em>Einfache Änderungen, die Sie bei der Aktualisierung Ihrer Erweiterung auf Firefox 3 machen mussten, können Sie hier gerne eintragen!</em></p>
<ul> <li><code><a class=" external" href="chrome://browser/base/utilityOverlay.js" rel="freelink">chrome://browser/base/utilityOverlay.js</a></code> wird aus Sicherheitsgründen nicht länger unterstützt. Falls dies vorher verwendet wurde, sollte auf <code><a class=" external" href="chrome://browser/content/utilityOverlay.js" rel="freelink">chrome://browser/content/utilityOverlay.js</a></code>. gewechselt werden.</li> <li>Bei {{ Interface("nsIAboutModule") }} Implementierungen wird nun <code>getURIFlags</code> Methode benötigt. Siehe {{ Source("netwerk/protocol/about/public/nsIAboutModule.idl", "nsIAboutModule.idl") }} für weitere Dokumentation. Das betrifft Erweiterungen, die neue <code>about:</code> URIs verwenden. ({{ Bug("337746") }})</li> <li>Das {{ XULElem("tabbrowser") }} Element ist kein Teil mehr von »toolkit« ({{ Bug("339964") }}). Das bedeutet, dass dieses Element nicht länger für XUL Anwendungen und Erweiterungen verfügbar ist. Es wird weiterhin in Firefox' Hauptfenster (browser.xul) benutzt.</li> <li>Veränderungen an <a href="/de/NsISupports_proxies" title="de/NsISupports_proxies">nsISupports proxies</a> <a class="external" href="http://groups.google.com/group/mozilla.dev.platform/browse_thread/thread/78236a4b312a2de4/939240fc3f5123a8?lnk=st&amp;rnum=1#939240fc3f5123a8"></a> und möglicherweise ab Thread-bezogenen Interfaces muss noch dokumentiert werden.</li> <li>Wenn XML Prozessanweisungen wie <code>&lt;?xml-stylesheet ?&gt;</code> in XUL Dateien verwendet werden, sollten Änderungen durch {{ Bug("319654") }} beachtet werden: <ol> <li>XML Prozessanweisungen werden nun in das XUL DOM hinzugefügt. Das bedeutet, dass {{ Domxref("document.firstChild") }} nicht unbedingt mehr das Root-Element sein muss. Wenn das Wurzelelement angesprochen werden muss sollte {{ Domxref("document.documentElement") }} verwendet werden.</li> <li><code>&lt;?xml-stylesheet ?&gt;</code> und <code>&lt;?xul-overlay ?&gt;</code> Prozessanweisungen haben jetzt außerhalb des Dokumentprologs keinen Effekt mehr.</li> </ol> </li> <li><code>window.addEventListener("load", myFunc, true)</code> wird nicht ausgeführt, wenn Webinhalte geladen werden (Browser eine Seite lädt). Durch {{ Bug("296639") }} wurde die Art und Weise in der innere und äußere Fenster kommunizieren verändert. Ein einfacher Fix, der auch in Firefox 2 funktioniert: <code>gBrowser.addEventListener("load", myFunc, true)</code> wie <a href="/de/Codeschnipsel/Tabbed_browser#Detecting_page_load">hier</a> beschrieben.</li> <li><code>content.window.getSelection()</code> gibt ein Objekt zurück (welches durch <code>toString()</code> zu einem String umgewandelt werden kann), im Gegensatz zu dem jetzt veraltetem <code>content.document.getSelection()</code>, welches einen String zurück gibt.</li> <li><code>event.preventBubble()</code> war Firefox 2 in deprecated und wurde in Firefox 3 entfernt. Es sollte <a href="/de/DOM/event.stopPropagation" title="de/DOM/event.stopPropagation"><code>event.stopPropagation()</code></a> verwendet werden, was in Firefox 2 ebenso funktioniert.</li> <li>Timers, die durch <code>setTimeout()</code> initialisiert wurden, werden nun von modalen Fenstern, durch den Fix von {{ Bug("52209") }}, geblockt. Es könnte <code>nsITimer</code> stattdessen verwendet werden.</li> <li>Wenn die Erweiterung einer nicht vertrauten Quelle (z.B. eine Webseite) Zugang zu Chrome zulassen muss, sollte die neue <a href="/de/Chrome_Registration#contentaccessible" title="de/Chrome_Registration#contentaccessible"><code>contentaccessible</code> Flag</a> benutzt werden.</li>
</ul>
<p>{{ languages( { "en": "en/Updating_extensions_for_Firefox_3", "fr": "fr/Mise_\u00e0_jour_des_extensions_pour_Firefox_3", "ja": "ja/Updating_extensions_for_Firefox_3", "pl": "pl/Aktualizacja_rozszerze\u0144_dla_Firefoksa_3", "ko": "ko/Updating_extensions_for_Firefox_3", "es": "es/Actualizar_extensiones_para_Firefox_3" } ) }}</p>
Zu dieser Version zurücksetzen