Dies ist eine Sammlung mit häufig gestellten Fragen zur Entwicklung von Erweiterungen. Die meisten werden derzeit wohl für den Firefox geschrieben. Viele, wenn nicht sogar alle, sollten relativ einfach an SeaMonkey, Thunderbird oder jede andere Anwendung angepasst werden können. Für Thunderbird gibt es außerdem HowTos sowie weitere FAQs.
Falls Sie sich fragen, wo Sie am besten beginnen sollten, versuchen Sie es mit unserem Tutorial Erweiterung_erstellen oder dem Getting started Tutorial auf MozillaZine . Sie können den Extension Wizard benutzen, um ein Template für den ersten Start zu erstellen.
Richten Sie sich außerdem eine Entwicklungsumgebung ein.
Debuggen
Sie sollten eine Entwicklungsumgebung einrichten bevor Sie versuchen eine Erweiterung zu debuggen.
Der Venkman JavaScript Debugger sollte in schwierigen Fällen nützlich sein. Vergessen Sie dabei nicht die "Debug -> Exclude Browser Files" Option zu deaktivieren, wenn Sie an einer Erweiterung arbeiten.
Wie finde ich Fehler in meinem Code?
Wenn die Option javascript.options.showInConsole auf true eingestellt ist werden alle Fehler in der Fehlerkonsole gemeldet. Wenn alle JavaScriptfehler in der Konsole geloggt werden, ist es einfacher die Bugs im Code zu verfolgen.
Wie kann ich den Ablauf meiner Erweiterung verfolgen?
Sie können alert(), dump() oder Components.utils.reportError() benutzen. Mithilfe von nsIConsoleService
können ebenfalls variable Daten sowie Debuggingtexte an die Fehlerkonsole gesendet werden. Alternativ kann die Venkman JavaScript Debugger Erweiterung benutzt werden.
Warum läuft mein Skript nicht wie erwartet?
Falls sich ihr Script nicht wie erwartet verhält, sollten Sie zu erst die Fehlerkonsole auf Fehler prüfen (sie oben).
Häufig wird versucht auf das DOM eines Fensters zuzugreifen noch bevor dieses vollständig geladen wurde. Das passiert, wenn der Initialisierungscode am Anfang des Skriptes eingebunden wird (u.a. außerhalb einer Funktion). Durch die Nutzung eines Loadevent-Listeners kann dieses Problem gelöst werden, da der Code erst ausgeführt wird wenn die Seite vollständig geladen wurde:
function exampleBrowserStartup(event) { // Packen Sie hier Ihren Code hinein } window.addEventListener("load", exampleBrowserStartup, false);
Falls Sie einen ähnlichen Fehler wie etwa »JavaScript error: chrome://myextension/content/overlay.js, line 47: missing ; before statement« sehen, verwenden Sie möglicherweise Funktionen oder Schreibweisen aus JavaScript 1.7, während Ihre Erweiterung unter einer früheren Version betrieben wird. Um sicherzustellen, dass Ihr Code unter JavaScript 1.7 läuft, schreiben Sie einfach:
<script type="application/x-javascript" src="overlay.js;version=1.7"/>
Warum kann ich auf die angezeigte Webseite nicht zugreifen?
Um auf die angezeigte Webseite von einem browser.xul overlay zuzugreifen, müssen Sie content.document statt document benutzen, da dieses das Browserfenster selbst repräsentiert. Weitere Details finden Sie unter Mit Fenstern im Chrome Code arbeiten
Außerdem verhindert der XPCNativeWrapper standardmäßig den Zugriff auf Script-definierte Objekte der Webseite und einige andere Dinge.
Warum kann ich kein XMLHttpRequest in meiner Erweiterung verwenden?
Wenn Sie versuchen Informationen einer Erweiterung über XMLHttpRequest zu senden oder zu empfangen, werden Sie möglicherweise Domain-übergreifend arbeiten. Normalerweise kann dies ein Problem darstellen, aber so lange Sie die Anfrage aus einem Chrome Fenster senden, befinden Sie sich innerhalb des Sicherheitsspielraum und können damit arbeiten.
Sie müssen sicherstellen, dass Sie das Domain-übergreifende XMLHttpRequest von einem JavaScript Code ausführen, der von einem XUL Fenster referenziert wird. Wenn Sie versuchen, die Anfrage in Beziehung zum Browser-Inhalt aufzurufen (als "document" des XUL Fenster) werden Sie einen »Zugang Verweigert« Fehler erhalten.
Ich bekomme einen XML-Parser-Fehler, aber die Datei sieht einwandfrei aus!
Eine häufiger Grund für Parser-Fehler (roter text mit einem -------------^ darunter) ist ein „&“ oder „<“ Zeichen im Script oder ein Attributwert mit einer speziellen Bedeutung in XML. Zum Beispiel:
<button oncommand="window.open('https://example.com/q?param1=value¶m2=val2')"/>
oder
<script>function lesser(a,b) { return a < b ? a : b; }</script>
Das Problem kann auf folgende Arten gelöst werden:
- Ersetze Sie das Zeichen mit seiner XML-konformen Repräsentation. (z.B.: „&“ wird zu „&“ und „<“ wird zu „<“)
- Falls es sich um einen Textknoten wie z.B. ein Script handelt, platzieren Sie diesen in CDATA Tags:
- Verschiebe Sie das Script in eine externe Datei und binden Sie diese ein:
<script><![CDATA[ function lesser(a,b) { return a < b ? a : b; } ]]></script>
<script type="application/x-javascript" src="our.js"/>
Beispiel Code
Der einfachste Weg ist es wohl eine passende Erweiterung (oder Teile von Mozilla selbst) zu finden, die genau das tut was man benötigt und dort in den Code schaut. (Die XPI und JAR Dateien sind im ZIP-Format komprimiert).
Außerdem gibt noch weitere Dokumentationen. Zu finden sind diese in der Liste relevanter Artikel auf MDC, Codeschnipsel und Beispielcode auf MozillaZine.
Wo finde ich weitere Hilfe?
Unter Erweiterungen/Andere Ressourcen und Erweiterungen/Community.
Bevor Sie nach Hilfe fragen, kontrollieren Sie Ihre Entwicklungsumgebung und überprüfen Sie die Fehlerkonsole auf relevante Einträge. Außerdem sollten Sie zumindest eine einfache Suche durchgeführt haben und diese FAQs gelesen haben.