Ausführen wenn Firefox geschlossen wird

  • Hallo zusammen,

    Gibt es eine Möglichkeit ein *.bat, *.cmd oder *.vbs file automatisch auszuführen, nachdem Firefox geschlossen wurde? Hintergrund ist, das ich mit den beiden about:config parametern browser.bookmarks.file und browser.bookmarks.autoExportHTML beim Schließen von Firefox automatisch einen Export der Bookmarks erstelle. Nun würde ich gerne im Anschluss diese Datei weiter verarbeiten. Kennt ihr dazu irgendeine Möglichkeit?

    Alternativ könnte ich mir vorstellen, das ich mir eventuell eine Extension erstelle, die direkt auf eine Art onClose Event reagiert und dann die Bookmarks als HTML Datei exportiert. Gibt es einen solchen Event/Trigger? Kann ich mit einer Extension eine Datei via WebDAV auf einen Server hochladen? Ich habe in der Dokumentation nichts zu WebDAV finden können.

  • Das einfachste wäre vermutlich, den Firefox über eine Batch zu starten. Z.B. so:

    start /wait [Pfad]\firefox.exe

    Damit wartet die Batch auf das Beenden des Firefox und führt dann erst nachfolgende Befehle aus. Du könntest also nach dem Beenden von Firefox automatisch das nachfolgende Programm mit den Bookmarks füttern.

    Greetz,
    DF

  • Die Möglichkeit Firefox über eine Batch zu starten habe ich aktuell in Benutzung. Das ist aber recht unschön, da man dabei immer das zusätzliche Fenster der CMD-Line offen hat. Ein VBS Script habe ich auch bereits versucht. Hier kann ich zumindest das Fenster verbergen aber auch das ist halt nur ein Workaround der eher unschön ist.

    Mittlerweile wäre mir eine Extension fast lieber. Allerdings werde ich bisher noch nicht aus der Doku schlau, wie ich das Firefox "Schließen" Event sauber abfangen kann. Ich habe bisher nur etwas gefunden, wo ich schließende Tabs auswerten kann aber nicht den kompletten Browser.

  • Versuche es mal die Befehle in eine *.cmd-Datei zu legen, anstatt in eine batch. Diese Datei startest du dann mit dem Befehl

    start /min deineDatei.cmd

    HP Chromebook 15a-nb0225ng, i3N-305, 8 GB LPDDR5-4800 MHz RAM (integriert), 256GB UFS, - chromeOS 126 (Stable Channel) - Linux Debian Bookworm: Firefox Nightly, Beta und Main Release (Mozilla PPA), Android 13: Firefox Nightly und Firefox (Main Release)

    Smartphone - Firefox Main Release, Firefox Nightly, Firefox Klar (Main Release)

  • Ich hab das jetzt nicht probiert aber startet das nicht ebenfalls ein "DOS"-Fenster aber minimiert es nur? Dann wäre immer noch der Button in der Taskleiste zu sehen. Ich möchte vom "Drumherum" aber rein gar nichts sehen, das soll total versteckt sein. Maximal in der Prozessliste kann das Ding meinetwegen auftauchen.

    Ich bin nebenher am Erstellen einer WebExtension. Das hab ich aber noch nie gemacht. Kann also dauern. Ich hangele mich gerade an der Doku von Mozilla entlang. Vielleicht schaff ich es ja. Wenn ja, seid ihr die ersten, die davon erfahren.

  • Normalerweise lässt Windows das komplette Verstecken einer Anwendung oder einer Shell nicht zu. In der Taskleiste sollte das Ding immer zu sehen sein. Dies hat Sicherheitsgründe, damit kein Programm unbemerkt werkeln kann.

    HP Chromebook 15a-nb0225ng, i3N-305, 8 GB LPDDR5-4800 MHz RAM (integriert), 256GB UFS, - chromeOS 126 (Stable Channel) - Linux Debian Bookworm: Firefox Nightly, Beta und Main Release (Mozilla PPA), Android 13: Firefox Nightly und Firefox (Main Release)

    Smartphone - Firefox Main Release, Firefox Nightly, Firefox Klar (Main Release)

  • Verstehe. Zumindest letzteres kann ich mit einem VBS Script umgehen. Ist aber eher umständlich für meine Zwecke.

    Wie auch immer. Mit der Extension bin ich etwas weiter gekommen. Aktuell schreibt diese bei klick auf den Toolbar Button eine Datei auf ein WebDAV Share. Den automatischen Event versuche ich später mal noch zu finden. Mein größtes Problem ist aktuell "permissions" in der manifest.json. Wenn ich das richtig verstanden habe, muss dort auch der URL stehen, wohin ich die Datei übertragen möchte. Ich kann zwar für meine privaten Zwecke dort einen URL hardcodieren. Das macht aber wenig Sinn, wenn ich die Extension später veröffentlichen möchte. Ich wollte aber auch die Angabe von "<all_urls>" vermeiden. Gibt es irgendwie die Möglichkeit einen bestimmten URL dynamisch dort einzutragen?

  • Vielleicht liest Sören ja mit :) Macht er ja eigentlich fast immer :) Anbei mal meine Vorstellung:

    Es wird eine Seite mit Optionen geben (existiert im Moment noch nicht, ist aber geplant). Dort trägt der geneigte User URL, Benutzername, Passwort und andere Optionen ein und speichert diese. Dieser eingetragene URL soll der URL sein, der dann als einziger unter "permissions" erlaubt ist. Alternativ habe ich jetzt erst mal "<all_urls>"", gegen "*://*/*", getauscht, damit ist nicht mehr ganz so viel erlaubt wie mit mit <all_urls>".

    Aktuell bin ich grad am erstellen des JSON Format's für den Export. Das erstellen und der Upload der Datei klappen bereits.

  • OK. Also habe ich keine andere Wahl. War halt nur so eine Idee, um Privacy Bedenken potentieller User von vornherein einzudämmen. Ich will ja nicht alle möglichen Daten haben. Aber wenn's nicht anders geht, dann tu ich das eben so. Danke schon mal für die Info.

    BTW: Kennst du eventuell eine Methode um das "Schließen" Event abzufragen? Aktuell habe ich den Export als Eventlistener auf einem Toolbar Button liegen, würde das aber lieber exportieren, sobald oder kurz bevor der Browser geschlossen wird. Optional kann der Button ja dennoch bleiben.

  • Es gibt kein Event für WebExtensions, um etwas auszuführen, wenn Firefox beendet werden soll, und ich bezweifle, dass Mozilla das jemals einführen wird. Das könnte echt Probleme verursachen. Chrome besitzt ein solches Event ebenfalls nicht, was die Wahrscheinlichkeit nicht vergrößert. Theoretisch wäre es zwar möglich, auf das letzte geschlossene Fenster zu schauen, aber du hast keine Garantie, dass dein Code ausgeführt wird. Wenn Firefox den Befehl erhält, beendet zu werden, wird Firefox beendet, ohne auf Erweiterungen zu warten.

  • Das ist... grrr... ich verstehe das Problem dahinter, dann könnte eine Extension das Schließen vom Firefox verhindern oder halt, wenn sie unsauber programmiert ist, zu einem Status bringen der von der Mainapplikation nicht mehr kontrollierbar ist. Dann mach ich das anders. Dann exportiere ich die Bookmarks immer dann wenn ein Bookmark hinzugefügt, gelöscht oder geändert wurde. Dafür habe ich Events gefunden. Etwas anderes fällt mir dann nicht mehr ein.

    Nun muss ich aber erst mal das JSON File in dem Format erstellen, was auch der Firefox verwendet für seine Exports. Alles was ich bisher habe sind sämtliche Nodes mit browser.bookmarks.getTree(). Das ist leider nicht so ganz identisch mit dem was im JSON steht.

  • Naja der überschreibt ja immer die gleiche Datei mit dem kompletten Export. Die Anzahl beunruhigt mich da weniger. Eher der Traffic zum WebDAV. Der feuert ja dann bei jedem Change ein komplettes Backup rüber.

    Bin grad noch über browser.bookmarks.export() gestolpert. Das soll angeblich die Bookmarks als HTML exportieren. (https://developer.mozilla.org/en-US/Add-ons/…ookmarks/export) aber dazu meint die Konsole dann wieder: "browser.bookmarks.export is not a function". Also muss ich doch anders rangehen.

  • Das sollte vermutlich kein Problem darstellen. Wenn ich einmal das fertige Output-Format habe, kann ich das gerne lokal und auf dem WebDAV speichern. Wenn ich etwas verwertbares fertig habe, melde ich mich bei euch.

    BTW: Firefox Mobil kann ich leider nicht unterstützen, da fehlt noch die API.

  • So langsam bin ich am verzweifeln. Der Export klappt recht gut, einlesen kann ich den Export auch wieder. Leider gibt es keine Möglichkeit den Export am Stück wieder zu importieren. Ich muss jedes JSON Objekt Stück für Stück einzeln neu als Bookmark erstellen. S ist soweit noch OK. Leider vergibt Firefox dabei für jede erstellte Node eine neue ID, statt die bisherige zu verwenden. Damit muss natürlich jedes Child diese neue ID als parentId verwenden. Nun ist es aber so das ich die neue ID nur innerhalb eines Promise von browser.bookmark.create auslesen kann. Bisher wusste ich nicht mal was ein Promise ist oder das es so etwas gibt. Ich habe aber keinen Weg finden können wie ich die neue ID außerhalb der Promise verwenden kann, denn außerhalb ist die ID nicht bekannt. Als Resultat werden nun alle Childs von Unterordnern immer bei "Weitere Lesezeichen" einsortiert. Eine Lösung habe ich trotz wirklich intensiver Suche bisher nicht finden können.

    Habt ihr eventuell eine Idee?

    Update: Ich habs hinbekommen. Hab ein anderes AddOn dafür auseinandergenommen und mir Teile des Codes geborgt und angepasst. Das heißt, exportieren und importieren der Bookmarks über WebDAV funktioniert. Es werden alle Bookmarks in der richtigen Reihenfolge und in den richtigen Ordnern wieder angelegt. Was wohl nicht gehen wird, ist das Speichern eines Backups auf dem lokalen Rechner. Dafür gibt es keine API. Maximal kann ich den Lesezeichen über den Umweg eines Downloads im Downloadordner lokal speichern. Vorerst kümmere ich mich aber noch um ein paar andere Details des Plugins. Aktuell funktioniert das Plugin mit SabreDAV 3.3(beta)/3.2.2 , NextCloud und vermutlich allen anderen WebDAV Servern.


    Und gerne auch mit einer Möglichkeit der lokalen Speicherung... ;)


    Wenn das soweit alles fertig ist, schaue ich mir das mit der lokalen Datei erneut an. Falls die oben genannte "Download" Variante ausreicht. Wenn nicht, müssen wir warten bis Mozilla eine andere Möglichkeit bietet. Die Variante das lokalen Backup an ein Third-Party Programm zu schicken, finde ich noch hässlicher, als den Download (dafür braucht es kein WebDAV).