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: 271030
  • Erstellt:
  • Autor: fscholz
  • Aktuelle Version? Nein
  • Kommentar checkpoint save; 184 words added, 117 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 deine Erweiterung auf irgendeine Art auf Lesezeichen oder die Chronik zugreift sind beträchtliche Änderungen nötig um sie Firefox 3 kompatibel zu machen. Die alte API zum Zugriff auf diese Informationen wurde durch die neue Places Architektur ersetzt. Im Leitfaden zur Places Migration findest du weitere Details wie deine bestehende Erweiterung auf die Places API aktualisiert werden kann.

Download-Manager

Die Download-Manager API hat sich durch den Wechsel vom RDF Datenspeicher zur Speicher API ein wenig geändert. Dieser Wechsel sollte relativ einfach durchzuführen sein. Zusätzlich hat sie die API zum Überwachen des Downloadfortschrittes geändert um mehrere Download-Manager Beobachter zu unterstützen. Unter {{ Interface("nsIDownloadManager") }}, {{ Interface("nsIDownloadProgressListener") }}und Downloads überwachen findest du weitere Informationen.

Passwort-Manager

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

  • Der Artikel nsILoginManager benutzen Beispiele. Darunter eine Veranschaulichung wie du mit deiner Erweiterung sowohl den Passwort-Manager als auch den Login-Manager benutzen kannst. Dadurch kann deine Erweiterung von Firefox 3 und früheren Versionen genutzt werden.
  • nsILoginInfo
  • nsILoginManager

Du kannst aber auch den integrierten Passwort-Manager Speicher ersetzen falls du eine eigene Passwortspeicher Implementierung in deiner Erweiterung anbieten möchtest. Weiter Details unter Ein Login-Manager Speichermodul erstellen.

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

Das XUL Popup System wurde im Firefox 3 stark geändert. Das Popup System umfasst Hauptmenüs, Kontextmenüs und Popup Eingeabefelder. Ein Leitfaden wie Popups genutzt werden wurde erstellt und beschreibt detailliert wie das System funktioniert. Ein wichtiger Hinweis wäre noch, 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 hatte.

DOMParser

* When a <code>DOMParser</code> is instantiated, it inherits the calling code's principal and the <code>documentURI</code> and <code>baseURI</code> of the window the constructor came from. * If the caller has UniversalXPConnect privileges, it can pass parameters to <code>new DOMParser()</code>. If fewer than three parameters are passed, the remaining parameters will default to <code>null</code>. ** The first parameter is the principal to use; this overrides the default principal normally inherited. ** The second parameter is the <code>documentURI</code> to use. ** The third parameter is the <code>baseURI</code> to use. * If you initialize a <code>DOMParser</code> using a contract, such as by calling <code>createInstance()</code>, and you don't call the <code>DOMParser</code>'s <code>init()</code> method, attempting to initiate a parsing operation will automatically create and initialize the <code>DOMParser</code> with a null principal and <code>null</code> pointers for <code>documentURI</code> and <code>baseURI</code>.

  • 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 defaultmäß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 den baseURI.
    • Der dritte Parameter enthält den baseURI.
  • Falls du einen DOMParser durch einen Auftrag, wie z.B. durch createInstance(), instanziierst und du nicht die init() Methode des DOM-Parsers aufrufst und versuchst eine Parseroperation zu starten wird der DOMParser automatisch mit einem null Dokument und null Verweisen auf documentURI und baseURI erstellt und instanziiert.

Entfernte Interfaces

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

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

Step 4: Check for relevant chrome changes

Es wurden kleinere Änderungen an der Oberfläche vorgenommen, die Änderungen im Code nötig machen. Es wurde eine neue vbox mit dem Namen "browser-bottombox" 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 ändert, die relativ zu besagten Elementen positioniert sind.

For example, if you previously overlaid some chrome before the status bar, like this:

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

You should now overlay it like this:

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

Or use the following technique to make your overlay work on both Firefox 2 and Firefox 3:

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

{{ Note("This change is effective for Firefox 3 beta 4 and the pre-beta 4 nightlies.") }}

Other changes

Add simple changes you had to make while updating your extension to work with Firefox 3 here.

  • chrome://browser/base/utilityOverlay.js is no longer supported for security reasons. If you were previously using this, you should switch to chrome://browser/content/utilityOverlay.js.
  • {{ Interface("nsIAboutModule") }} implementations are now required to support the getURIFlags method. See {{ Source("netwerk/protocol/about/public/nsIAboutModule.idl", "nsIAboutModule.idl") }} for documentation. This affects extensions that provide new about: URIs. ({{ Bug("337746") }})
  • The {{ XULElem("tabbrowser") }} element is no longer part of "toolkit" ({{ Bug("339964") }}). This means this element is no longer available to XUL applications and extensions. It continues to be used in the main Firefox window (browser.xul).
  • Changes to nsISupports proxies and possibly to threading-related interfaces need to be documented.
  • If you use XML processing instructions, such as <?xml-stylesheet ?> in your XUL files, be aware of the changes made in {{ Bug("319654") }}:
    1. XML PIs are now added to a XUL document's DOM. This means {{ Domxref("document.firstChild") }} is no longer guaranteed to be the root element. If you need to get the root document in your script, use {{ Domxref("document.documentElement") }} instead.
    2. <?xml-stylesheet ?> and <?xul-overlay ?> processing instructions now have no effect outside the document prolog.
  • window.addEventListener("load", myFunc, true) is not fired when loading web content (browser page loads). This is due to {{ Bug("296639") }} which changes the way inner and outer windows communicate. The simple fix here is to use gBrowser.addEventListener("load", myFunc, true) as described here and works in Firefox 2 as well.
  • content.window.getSelection() gives an object (which can be converted to a string by toString()), unlike the now deprecated content.document.getSelection() which returns a string
  • event.preventBubble() was deprecated in Firefox 2 and has been removed in Firefox 3. Use event.stopPropagation(), which works in Firefox 2 as well.
  • Timers that are initiated using setTimeout() are now blocked by modal windows due to the fix made for {{ Bug("52209") }}. You may use nsITimer instead.
  • If your extension needs to allow an untrusted source (e.g., a web site) to access the extension's chrome, then you must use the new contentaccessible flag.

{{ 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>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>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>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">Sichere Updates</a>.</p>
<h3>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 name="DOM">DOM</h4>
<p>{{ :de/DOM/WRONG_DOCUMENT_ERR_note() }}</p>
<h4 name="Lesezeichen_&amp;_Chronik">Lesezeichen &amp; Chronik</h4>
<p>Falls deine Erweiterung auf irgendeine Art auf Lesezeichen oder die Chronik zugreift sind beträchtliche Änderungen nötig um sie Firefox 3 kompatibel zu machen. 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> findest du weitere Details wie deine bestehende Erweiterung auf die Places API aktualisiert werden kann.</p>
<h4 name="Download-Manager">Download-Manager</h4>
<p>Die Download-Manager API hat sich durch den Wechsel vom RDF Datenspeicher zur <a href="/de/Speicher" title="de/Speicher">Speicher</a> API ein wenig geändert. Dieser Wechsel sollte relativ einfach durchzuführen sein. Zusätzlich hat sie die API zum Überwachen des Downloadfortschrittes geändert um mehrere Download-Manager Beobachter zu unterstützen. Unter {{ Interface("nsIDownloadManager") }}, {{ Interface("nsIDownloadProgressListener") }}und <a href="/de/Downloads_überwachen" title="de/Downloads_überwachen">Downloads überwachen</a> findest du weitere Informationen.</p>
<h4 name="Passwort-Manager">Passwort-Manager</h4>
<p>Wenn deine Erweiterung den Passwort-Manager benutzt um auf Anmeldeinformationen zuzugreifen muss deine Erweiterung auf die neue Login Manager API umgestellt werden.</p>
<ul> <li>Der Artikel <a href="/de/NsILoginManager_benutzen" title="de/NsILoginManager_benutzen">nsILoginManager benutzen</a> Beispiele. Darunter eine Veranschaulichung wie du mit deiner Erweiterung sowohl den Passwort-Manager als auch den Login-Manager benutzen kannst. Dadurch kann deine Erweiterung von Firefox 3 und 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>Du kannst aber auch den integrierten Passwort-Manager Speicher ersetzen falls du eine eigene Passwortspeicher Implementierung in deiner Erweiterung anbieten möchtest. Weiter 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 name="Popups_.28Men.C3.BC.2C_Kontextmen.C3.BC.2C_Tooltips_und_Eingabefelder.29">Popups (Menü, Kontextmenü, Tooltips und Eingabefelder)</h4>
<p>Das XUL Popup System wurde im Firefox 3 stark geändert. Das Popup System umfasst Hauptmenüs, Kontextmenüs und Popup Eingeabefelder. Ein Leitfaden wie <a href="/de/XUL/Popup_Leitfaden" title="de/XUL/Popup_Leitfaden">Popups</a> genutzt werden wurde erstellt und beschreibt detailliert wie das System funktioniert. Ein wichtiger Hinweis wäre noch, 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 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 hatte.</p>
<h4 name="DOMParser">DOMParser</h4>
<p><span class="comment">* When a &lt;code&gt;DOMParser&lt;/code&gt; is instantiated, it inherits the calling code's principal and the &lt;code&gt;documentURI&lt;/code&gt; and &lt;code&gt;baseURI&lt;/code&gt; of the window the constructor came from. * If the caller has UniversalXPConnect privileges, it can pass parameters to &lt;code&gt;new DOMParser()&lt;/code&gt;. If fewer than three parameters are passed, the remaining parameters will default to &lt;code&gt;null&lt;/code&gt;. ** The first parameter is the principal to use; this overrides the default principal normally inherited. ** The second parameter is the &lt;code&gt;documentURI&lt;/code&gt; to use. ** The third parameter is the &lt;code&gt;baseURI&lt;/code&gt; to use. * If you initialize a &lt;code&gt;DOMParser&lt;/code&gt; using a contract, such as by calling &lt;code&gt;createInstance()&lt;/code&gt;, and you don't call the &lt;code&gt;DOMParser&lt;/code&gt;'s &lt;code&gt;init()&lt;/code&gt; method, attempting to initiate a parsing operation will automatically create and initialize the &lt;code&gt;DOMParser&lt;/code&gt; with a null principal and &lt;code&gt;null&lt;/code&gt; pointers for &lt;code&gt;documentURI&lt;/code&gt; and &lt;code&gt;baseURI&lt;/code&gt;.</span></p>
<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 defaultmäß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 den <code>baseURI</code>.</li> <li>Der dritte Parameter enthält den <code>baseURI</code>.</li> </ul> </li> <li>Falls du einen <code>DOMParser</code> durch einen Auftrag, wie z.B. durch <code>createInstance()</code>, instanziierst und du nicht die <code>init()</code> Methode des DOM-Parsers aufrufst und versuchst 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 name="Entfernte_Interfaces">Entfernte Interfaces</h4>
<p>Folgende Interfaces wurden aus, der im Firefox 3 enthaltenen, Gecko-Engine 1.9 entfernt. Wenn deine Erweiterung eines davon nutzt muss dein 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 name="Step_4:_Check_for_relevant_chrome_changes">Step 4: Check for relevant chrome changes</h3>
<p>Es wurden kleinere Änderungen an der Oberfläche vorgenommen, die Änderungen im Code nötig machen. Es wurde eine neue <code>vbox</code> mit dem Namen "browser-bottombox" 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 ändert, die relativ zu besagten Elementen positioniert sind.</p>
<p>For example, if you previously overlaid some chrome before the status bar, like this:</p>
<pre>&lt;window id="main-window"&gt;
  &lt;something insertbefore="status-bar" /&gt;
&lt;/window&gt;
</pre>
<p>You should now overlay it like this:</p>
<pre>&lt;vbox id="browser-bottombox"&gt;
  &lt;something insertbefore="status-bar" /&gt;
&lt;/vbox&gt;
</pre>
<p>Or use the following technique to make your overlay work on both Firefox 2 and Firefox 3:</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>
<p>{{ Note("This change is effective for Firefox 3 beta 4 and the pre-beta 4 nightlies.") }}</p>
<h3 name="Other_changes">Other changes</h3>
<p><em>Add simple changes you had to make while updating your extension to work with Firefox 3 here.</em></p>
<ul> <li><code><a class=" external" href="chrome://browser/base/utilityOverlay.js" rel="freelink">chrome://browser/base/utilityOverlay.js</a></code> is no longer supported for security reasons. If you were previously using this, you should switch to <code><a class=" external" href="chrome://browser/content/utilityOverlay.js" rel="freelink">chrome://browser/content/utilityOverlay.js</a></code>.</li> <li>{{ Interface("nsIAboutModule") }} implementations are now required to support the <code>getURIFlags</code> method. See {{ Source("netwerk/protocol/about/public/nsIAboutModule.idl", "nsIAboutModule.idl") }} for documentation. This affects extensions that provide new <code>about:</code> URIs. ({{ Bug("337746") }})</li> <li>The {{ XULElem("tabbrowser") }} element is no longer part of "toolkit" ({{ Bug("339964") }}). This means this element is no longer available to XUL applications and extensions. It continues to be used in the main Firefox window (browser.xul).</li> <li>Changes to <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> and possibly to threading-related interfaces need to be documented.</li> <li>If you use XML processing instructions, such as <code>&lt;?xml-stylesheet ?&gt;</code> in your XUL files, be aware of the changes made in {{ Bug("319654") }}: <ol> <li>XML PIs are now added to a XUL document's DOM. This means {{ Domxref("document.firstChild") }} is no longer guaranteed to be the root element. If you need to get the root document in your script, use {{ Domxref("document.documentElement") }} instead.</li> <li><code>&lt;?xml-stylesheet ?&gt;</code> and <code>&lt;?xul-overlay ?&gt;</code> processing instructions now have no effect outside the document prolog.</li> </ol> </li> <li><code>window.addEventListener("load", myFunc, true)</code> is not fired when loading web content (browser page loads). This is due to {{ Bug("296639") }} which changes the way inner and outer windows communicate. The simple fix here is to use <code>gBrowser.addEventListener("load", myFunc, true)</code> as described <a href="/de/Code_snippets/Tabbed_browser#Detecting_page_load" title="de/Code_snippets/Tabbed_browser#Detecting_page_load">here</a> and works in Firefox 2 as well.</li> <li><code>content.window.getSelection()</code> gives an object (which can be converted to a string by <code>toString()</code>), unlike the now deprecated <code>content.document.getSelection()</code> which returns a string</li> <li><code>event.preventBubble()</code> was deprecated in Firefox 2 and has been removed in Firefox 3. Use <a href="/de/DOM/event.stopPropagation" title="de/DOM/event.stopPropagation"><code>event.stopPropagation()</code></a>, which works in Firefox 2 as well.</li> <li>Timers that are initiated using <code>setTimeout()</code> are now blocked by modal windows due to the fix made for {{ Bug("52209") }}. You may use <code>nsITimer</code> instead.</li> <li>If your extension needs to allow an untrusted source (e.g., a web site) to access the extension's chrome, then you must use the new <a href="/de/Chrome_Registration#contentaccessible" title="de/Chrome_Registration#contentaccessible"><code>contentaccessible</code> flag</a>.</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