browser.runtime.onStartup wird anscheinend nicht ausgeführt

  • Hallo auch,

    wie ich soeben bemerkt habe, wird in meiner WebExtension der Code in browser.runtime.onStartup nicht ausgeführt, wenn ich der Browser gestartet wird. Das Problem ist leider auch, das ich nicht wüsste wie ich das debuggen soll. Ich kann ja erst die Webkonsole öffnen, wenn der Browser gestartet ist und zu diesem Zeitpunkt sollte browser.runtime.onStartup bereits durch sein. Habt ihr eventuell Ideen wie ich entweder die Stelle debuggen kann oder warum der Code nicht ausgeführt wird?

  • Soweit ich das Tickets auf Bugzilla nachvollziehen kann sollten Fehler von browser.runtime.onStartup schon im Browser Log geloggt werden. Wie bemerkst du den dass es nicht funktioniert? Hast du auch schon mal versucht den onStartup Code isoliert in einer Erweiterung zu testen um Einfluss von anderem Code auszuschliessen?

  • Hallo miku23. In meiner background.js habe ich einen Listener für browser.runtime.onStartup eingebaut -> browser.runtime.onStartup.addListener(onStartupCheck);

    In der Funktion onStartupCheck prüfe ich nun ob der Anwender überhaupt beim Bowserstart etwas tun will. Dafür hole ich mir die vom Anwender gesetzten Werte mittels browser.storage.local.get(). Ist die entsprechende Option true, wird die eigentliche Aktion ausgeführt. Bei false soll nichts weiter gemacht werden. Die eigentliche Funktion wird auch von anderen Events benutzt und arbeitet dort wie erwartet. Die Extension findet ihr unter https://addons.mozilla.org/addon/davmarks/.

    Ist mein erster Versuch mit Webextensions. Mag also sein, das das alles etwas umständlich ist.

  • Hast du evtl. keine permission für storage bzw. für die in onStartupCheck auszuführende Funktion?

    Windows 10 | FF 62.0 (64-Bit) / FF 61.0 (64-Bit) / FF 63.0 (64-Bit)

  • Doch, doch. Das passt alles soweit. Ich verwende die gleichen Funktionen auch an anderen Stellen. Dort funktioniert sie wie erwartet. Ich würde ja auch eine Alternative verwenden. Ich will ja nur das Code XY ausgeführt wird, wenn der Browser startet oder das Plugin geladen wird. Da kenne ich aber nur die Events, für Plugin Update oder Neuinstallation. Das ist also auch keine Lösung.

  • OK. Das ist ein guter Tipp. Gilt das auch für temporär geladene AddOn's ? Ich will ja nicht all zu groß in die Extension Entwicklung einsteigen. Daher schaut das bei mir aktuell so aus, das ich ein Verzeichnis habe mit den Dateien der Erweiterung. Wenn ich am AddOn etwas ändern möchte, lade ich dann das geänderte AddOn über about:debugging und den Button "AddOn temporär laden". Dort probiere ich dann meine Änderungen aus und wenn ich zufrieden bin packe ich das Verzeichnis zu einem Zip und lade es auf AMO hoch. Bleibt mir dann das temporär geladene AddOn über einen Browserneustart erhalten und der Startup Event wird ausgeführt? Oder gilt die geöffnete Konsole als Browser Instanz und überspringt daher den Startup Event? Das hab ich aus der Doku nicht so ganz heraus lesen können. Chrome scheint sich da auch wieder anders zu verhalten, was die Sache nicht einfacher macht.

  • Wenn du web-ext nutzt, kannst du Firefox mit temporär installierter Erweiterung so starten:

    web-ext run --browser-console

    Die Verwendung von web-ext ist eh sinnvoller als about:debugging, weil du sonst bei jeder Änderung die Erweiterung von Hand neu laden musst. Mit web-ext passiert das automatisch.

    Ob die Konsole geöffnet ist oder nicht, dürfte sich nicht auf das Startup-Event auswirken.

  • Nein, web-ext nutze ich nicht. Nur einen normal installierten Firefox. Ich wollte es mir ersparen node-js zu installieren. Viel zu viel Aufwand nur für eine Extension. Ich habe den Sinn hinter node-js noch nie verstanden.

    Auch wenn das jetzt vielleicht abgehoben klingt, aber ich will das ehrlich gesagt auch nicht haben. Bitte nicht missverstehen. Soll auch keinesfalls abwertend sein. Es gibt sicher den ein oder anderen für den node-js Sinn macht. Aber für jemanden wie mich, der nur hin und wieder eine Extension oder etwas anderes baut, ist das wie mit Kanonen auf Spatzen zu schießen. Aber das ist nur meine persönliche Meinung.

  • node.js gehört zu den Basisvoraussetzungen für Frontend-Entwickler und da die Entwicklung von Firefox-Erweiterungen mit Frontend-Technologien geschieht, wird node.js auch hier vorausgesetzt. Die Abneigung gegenüber node.js ist für mich ehrlich gesagt nicht nachvollziehbar, weil es ja nicht weh tut, wenn es da ist. Aber du kannst eben die Vorteile nutzen, wenn du es mal brauchst - wie in diesem Fall.

    web-ext ist auch der einzige Weg, wenn du Firefox mit temporär geladener Erweiterung starten möchtest. Das ist über about:debugging nicht möglich.

  • Du könntest es evtl. statt mit browser.runtime.onStartup damit probieren:

    Windows 10 | FF 62.0 (64-Bit) / FF 61.0 (64-Bit) / FF 63.0 (64-Bit)

  • Ich bin aber kein Entwickler, ich bin normaler User, der zugegeben, hin und wieder die ein oder andere Funktion selber basteln möchte. Als mehr, als einen Bastler würde ich mich daher nicht bezeichnen. Node.js wird auch bei anderen Sachen vorausgesetzt, bisher konnte ich mich da aber immer erfolgreich davor drücken. Ich hab es ein paar mal versucht node.js auf meinem Rasperry Pi Server (Headless Raspbian) zu installieren, aber es hat mir jedes Mal irgendwelche Konfigurationen zerschossen, so das ich es fürchte, wie der Teufel das Weihwasser. Hat mich dann immer Stunden gekostet die verkorkste Kiste wieder zum funktionieren zu bringen. Die Firefox Extension bastle ich zwar nicht auf dem Pi, sondern auf Windows aber man macht dann automatisch einen Bogen um bestimmte Schlagwörter.

    Du kannst mich gerne über eine private Nachricht versuchen von den Vorteilen von node.js zu überzeugen. Ich würde es durchaus versuchen. Aktuell tendiere ich aber dazu es ohne zu versuchen. Wenn am Rechner irgendwas vermurkst wird, reißt mir meine Frau die Rübe runter. Ich nutze den nicht alleine. Aber wie gesagt, ist dann ein anderes Thema, ich glaube nicht das das andere hier interessiert :)


  • Du könntest es evtl. statt mit browser.runtime.onStartup damit probieren:

    Hmm das schaut nach einer ganz normalen Funktion aus. init() würde also jedes Mal ausgerufen, wenn die background.js ausgeführt wird. Zumindest beim ersten Start also auf jeden Fall. Ich probiere das mal aus. Ich kenne mich ja nicht mit Webextensions aus aber gibt es sonst noch Situationen/Events zu denen background.js ausgeführt wird oder wird diese nur einmalig bei Laden der Extension ausgeführt? Ich will ja vermeiden das init(); zum falschen Zeitpunkt ausgeführt wird...

  • Ja, das ist eine normale Funktion. Aber da wird ja nichts mehr ausgeführt, wenn der entsprechende Parameter nicht true ist. So könntest du zumindest einfach testen, ob deine storage-Anfrage korrekt ist.

    Windows 10 | FF 62.0 (64-Bit) / FF 61.0 (64-Bit) / FF 63.0 (64-Bit)

  • Ich bin aber kein Entwickler, ich bin normaler User, der zugegeben, hin und wieder die ein oder andere Funktion selber basteln möchte.

    In Bezug auf deine Erweiterung bist du kein "normaler User", sondern Entwickler wie jeder andere Erweiterungs-Entwickler auch. ;)

    Als mehr, als einen Bastler würde ich mich daher nicht bezeichnen. Node.js wird auch bei anderen Sachen vorausgesetzt, bisher konnte ich mich da aber immer erfolgreich davor drücken. Ich hab es ein paar mal versucht node.js auf meinem Rasperry Pi Server (Headless Raspbian) zu installieren, aber es hat mir jedes Mal irgendwelche Konfigurationen zerschossen, so das ich es fürchte, wie der Teufel das Weihwasser. Hat mich dann immer Stunden gekostet die verkorkste Kiste wieder zum funktionieren zu bringen. Die Firefox Extension bastle ich zwar nicht auf dem Pi, sondern auf Windows aber man macht dann automatisch einen Bogen um bestimmte Schlagwörter.

    Installationsdatei herunterladen und installieren. Da kann eigentlich nicht mehr schief gehen als bei der Installation jeder anderen Anwendung auf Windows.

    Du kannst mich gerne über eine private Nachricht versuchen von den Vorteilen von node.js zu überzeugen. Ich würde es durchaus versuchen. Aktuell tendiere ich aber dazu es ohne zu versuchen.

    Ich will da gar keine große Überzeugungsarbeit leisten. Entweder willst du die Vorteile von web-ext nutzen oder du willst darauf verzichten. Letztlich ist es deine Erweiterung und damit deine Arbeitsweise.

    Ich kann dir zeigen, wofür ich node-Kommandos bei meinen Erweiterungen nutze:
    https://github.com/cadeyrn/enterp…ge.json#L43-L54

    - Erweiterung für AMO packen
    - Code-Dokumentation generieren
    - Linting (HTML, JavaScript, CSS, WebExtension oder alles auf einmal)
    - Firefox mit temporär installierter Erweiterung starten (Nightly, Beta, Stable oder ESR)

    Der Vorteil vom Start über web-ext ist wie gesagt, dass du nicht andauernd von Hand deine Erweiterung neu laden musst, wenn du etwas am Code änderst. Bei Änderungen an der Erweiterung wird die Erweiterung selbst neu geladen und du siehst sofort, was du getan hast. Ohne diese Funktion hätte ich nicht nur länger für meine Erweiterungen gebraucht, ich hätte wahrscheinlich keine Erweiterung überhaupt zu Ende gebracht, so nervig, wie ich das finden würde.

  • :) OK, du hast mich fast überzeugt. Ergo, ich werd mir node.js am WE auf einem separaten Laptop installieren und schauen was sich damit vereinfachen lässt. Gibt's dabei keine Probleme, werd ich es wohl zumindest auf Windows auch auf dem normalen Laptop nutzen. Aber auf dem Raspberry Pi kommt mir das Ding nicht wieder drauf. Da lieber soll die Entwicklung für Roundcube Plugins umständlich sein, als das ich mir den Server erneut kaputt-konfiguriere. Soviel mache ich da ja auch nicht und bisher ging es auch gut ohne node.js.

  • Ist zwar jetzt ein bissel offtopic, aber da der Kollege ebenfalls node.js testen will:
    Ich habe es mir eben auch installiert, obwohl ich mich auch bisher dagegen gewehrt habe.
    Ging soweit alles recht problemlos, obwohl mir bei der anschliessenden Installation von web-ext Fehlermeldungen angezeigt wurden. Aber nachdem ich mir dann noch diese Konfigurationsdatei .web-ext-config.js angelegt habe, passt das ganz gut für mich. :)
    Schaut bei mir übrigens so aus, falls es wen interessiert:

    Code
    module.exports = {
    	run: {
    		// path to firefox
    		firefox: 'C:/Program Files/Firefox Developer Edition/firefox.exe',
    		// profile name
    		firefoxProfile: 'dev-edition-default',
    		// open browser console
    		browserConsole: true
    	}
    };

    Windows 10 | FF 62.0 (64-Bit) / FF 61.0 (64-Bit) / FF 63.0 (64-Bit)

  • Ich habe web-ext noch nie mit einer Konfigurationsdatei genutzt, aber ich vermute mal, dass bei dieser Konfiguration:

    web-ext run

    … ausreichend ist statt

    web-ext run --browser-console

    … was ich vorhin schrieb, wenn man mit Browserkonsole starten will - oder man verwendet weiterhin den längeren Befehl, wenn man in der Konfiguration browserConsole auf false setzt. ;)