Entwicklung von eigenen Extensions

  • Hallo,
    ich würde gerne eine eigene Extension für den FF zum Thema Webseitenspeicherung entwickeln. Zu diesem Zweck habe ich bereits div. Tutorials zum Thema Extension-Development durchgearbeitet.
    Im Prinzip habe ich auch den Aufbau einer Extension verstanden und könnte jetzt starten. Allerdings fehlen mir noch elementare Kenntnisse der durch Java-Script steuerbaren Objekte des FF.
    Wer kennt eine brauchbare Referenz der vorhandenen Funkitionen/Objekte?

    Vielen Dank für Eure Hilfe!

  • Mit dem Programm Doxygen kann man sich die Dokumentation aus dem Quelltext erstellen lassen. Allerdings scheint da doch manchmal was zu fehlen (ist mir bisher einmal aufgefallen, bei nsIUri). Das habe ich dann bei xulplanet gefunden.

    Viel Erfolg beim Programmieren

  • Vielen Dank für Eure Antworten!
    Die Seiten die Orkan empfohlen hat kannte ich leider schon. Die Lücken kann ich bestätigen. Hier fehlt m.E. genau was ich suche...Trotzdem Danke für Deine Hilfe...

    Das Tool Doxigen verstehe ich so, dass ich die API von FF damit dokumentieren kann und mir so eine eigene Doku erzeuge? Richtig verstanden??

    Xulplanet sieht ganz brauchbar aus, allerdings habe ich bei der Durchsicht dort auch nicht genau das gefunden was ich suche...

    Deshalb meine Frage nochmal etwas präziser.
    Ich möchte gerne über einen Knopf in einer FF Symbol-Leiste (wie das geht weiss ich) die angezeigte Seite inkl. aller Bilder etc. lokal speichern. Dabei soll der Dateiname entspechend einer festen Vorgabe über die geöffnete Domain vergeben werden (z.B. zuerst das Datum, dann der Domainname und evtl. je Domain noch ein spezieller Ordner zum speichern als Ziel). Man soll also beim Speichern nicht jedes Mal nach dem Pfad gefragt werden. Knopf drücken-> Seite wird gespeichert -> Fertig. Die Liste der Domains kann dabei fest in das Addin programmiert werden für die gewünschten Seiten.
    Der Preferences Toolbar (früher auch über Xulplanet beziehbar) bietet in Ansätzen so eine Funktion an. Allerdings verstehe ich den Aufbau nicht so ganz.
    Ich glaube dort wird eine Funktion namens "internalSave" verwendet:
    //internalSave(aURL, aDocument, aDefaultFileName, aContentDisposition,
    // aContentType, aShouldBypassCache, aFilePickerTitleKey,
    // aChosenData, aReferrer, aSkipPrompt)

    Leider fand sich keine Doku und die Experimente mit dem Code-Snippet funkten gerade bei der Übergabe des Namens nicht so wirklich.
    Auch könnte man z.B. noch eine Funktion einbauen, die die Bilder der Webseite in einen anderen Ordner sichert.
    Meine Frage ist nun also, welche Objekte spreche ich im FF zum Sichern einer Webseite (mit Bildern) bzw. zum Sichern nur der Bilder an?
    Vielleicht hat einer von Euch ja schon konkrete Erfahrungen mit einer ähnlichen Fragestellung sammeln können......

  • Zitat von rainbow

    Leider fand sich keine Doku und die Experimente mit dem Code-Snippet funkten gerade bei der Übergabe des Namens nicht so wirklich.

    Du hast recht. Da gibt es keine Doku. Nur den Code.

    Zitat

    Auch könnte man z.B. noch eine Funktion einbauen, die die Bilder der Webseite in einen anderen Ordner sichert.
    Meine Frage ist nun also, welche Objekte spreche ich im FF zum Sichern einer Webseite (mit Bildern) bzw. zum Sichern nur der Bilder an?

    Nun, erst einmal wirst du die Bilder der aktuellen Seite finden müssen. Dafür kannst du das Array content.document.images verwenden. Dann musst du nach deinen Vorgaben den Speicherort der Dateien festlegen. Mit dem Wissen kannst du dann internalSave verwenden:

    Code
    // url ist string mit der Adresse des Bilds
    // file ist ein nsILocalFile-Objekt, wohin das Bild gespeichert werden soll
    // docURI ist ein nsIURI-Objekt der Adresse der Seite (makeURI(content.location.href))
    internalSave(url, null, null, null, false, null, new AutoChosen(file, makeURI(url), docURI, false);
  • Hallo Leute,
    wo finde ich eine Doku für z.B. dieses Konstrukt:
    document.getElementById('content').browsers;
    oder dieses:
    document.commandDispatcher.focusedWindow;
    Wo kann ich die Methoden/Eigenschafen von den Objekten herausfinden?

    Vielen Dank für Eure Hilfe!

  • Am einfachsten benutzt du den DOM-Inspektor.

    Erstmal inspziertst du das Hauptfenster, und suchst dort das Element mir der id 'content'. Dann siehst du, dass es sich um ein 'tabbrowser' handelt. Wähle jetzt die Javascript-Ansicht und suche die browsers-Eigenschaft. Dann siehst du, dass Browsers ein Array von XUL-Elementen vom Typ 'browser' ist. Deren Eigenschaften kannst du wiederrum inspizieren.

    Bei command-Dispatcher gehst das genauso. Rufe die Javascript-Ansicht vom document-Element (ganz oben) auf und du kannst alle Eigenschaften wie z.B. den CommandDisplatcher ansehen.

  • Hallo JonHa,
    Danke für Deine Antwort!
    Ich habe das mal probiert.
    Einiges habe ich verstanden & gefunden, anderes nicht.
    Beispielsweise referenziert:
    chrome://browser/content/browser.xul in der URL Zeile vom DOM Insp.
    wohl schon die Objekte content und browser???
    var browsers = document.getElementById('content').browsers;
    Ansonsten finde ich sie nämlich in der JS Ansicht nicht.
    Leider kann ich wohl in der js Ansicht nicht suchen, was fatal ist. Ist das Teil Buggy??? (FF 2.0.0.7)
    Was ich auch nicht finde, ist der folgende Zusammenhang:
    var webNav = browsers[i].webNavigation;
    var url = webNav.currentURI.spec;

    webNavigation habe ich in der js Ansicht auch nach intensivster Suche nicht gefunden. Somit auch nicht currentURI und spec schon garnicht. Was machen diese Objekte bzw. was mache ich falsch ???:roll:

    Ich weiss schon, daß die Zeile die aktuelle URL abgreift, was sie auch soll. Hintergrund ist, dass ich ein fertiges Script so verändern möchte, dass die URL und weitere Parameter nicht mehr aus dem aktuellen Tab genommen werden, sondern über alle vorhandenen Tabs iteriert wird. Also
    ALT:
    var focusedWindow = document.commandDispatcher.focusedWindow;

    NEU soll sein:
    var webNav = browsers[i].webNavigation;
    var url = webNav.currentURI.spec;

    Jeweils muss ich bei diesem "Umzug" natürlich die Eigenschaften wie URL etc. erneut zur Verfügung stellen, deshalb muss ich zuerst mal rausfinden, welche es gibt.

  • Zitat von rainbow


    Beispielsweise referenziert:
    chrome://browser/content/browser.xul in der URL Zeile vom DOM Insp.
    wohl schon die Objekte content und browser???


    Nein, das hat damit nichts zu tun. Das ist einfach dier Pfad, hinter dem sich die Benutzeroberfläche befindet, analog zu http://example.com/content/browser.htm

    Zitat

    Leider kann ich wohl in der js Ansicht nicht suchen, was fatal ist.

    Die Eigenschaften sind alphabetisch sortiert.

    Zitat

    Ist das Teil Buggy??? (FF 2.0.0.7)


    Es gibt AFAIK ein paar Anzeigefehler, aber nichts, was wirklich stören würde.

    Zitat


    Was ich auch nicht finde, ist der folgende Zusammenhang:
    var webNav = browsers[i].webNavigation;
    var url = webNav.currentURI.spec;

    webNavigation habe ich in der js Ansicht auch nach intensivster Suche nicht gefunden. Somit auch nicht currentURI und spec schon garnicht. Was machen diese Objekte bzw. was mache ich falsch ???:roll:


    Dazu müsste ich erstmal wissen, wie weit du kommst. Selektiere erstmal dein <browser>-Element und in den Eigenschaften findest du dann sicher auch die webNavigation-Eigenschaft. Es ist IMHO hilfreich, wenn man erstmal mit dem DOM-Inspektor kleine (selbstgebastelte) Webseiten inspiziert, bei denen man weiß, wie die aufgebaut sind, sodass man da alles nachvollziehen kann. Die Firefox-Benutzeroberfläche ist ja relativ kompliziert aufgebaut und da braucht es auch schon etwas Zeit, bis man sich zurechtgefunden hat und weiß, wo in dem Baum die einzelnen Elemente sind.