userChrome.js Scripte für den Fuchs (Diskussion)

  • bege
    erledigt:

    userChrome.js/Firefox 139/SaveTo.uc.js at master · Endor8/userChrome.js
    Skripte für die Firefox-Erweiterung userChromeJS. Contribute to Endor8/userChrome.js development by creating an account on GitHub.
    github.com

    Mfg.
    Endor

    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:139.0) Gecko/20100101 Firefox/139.0.4
    OS: Windows 10 pro 64 bit und Windows 10 Home 64 bit
    Meine Scripte Sammlung: https://github.com/Endor8/userChrome.js
    Kein Support per PN. Fragen bitte im Forum stellen!

  • Funktioniert hier einwandfrei. :/

    Ich habe den Grund gefunden. Beim Ausführen des Skripts in der Konsole erscheint der zusätzliche Button nicht. Beim normalen Aktivieren des Skripts erscheint der Button, das Skript funktioniert.

    Die Fehlermeldung erscheint hier allerdings auch.

    Ich bestätige :thumbdown:

    Mit dem Skript aus Beitrag Nr. 23 gibt es allerdings keine Fehlermeldung.

    Ich bestätige :thumbup:

  • Die Fehlermeldung erscheint hier allerdings auch.

    Die Fehlermeldung document.getElementById(...) is null habe ich bei vielen Skripten, die wie dies hier trotzdem funktionieren. Für mich nur eines von vielen Javascript-Rätseln. 😉

    Diese Fehlermeldung gibt's hier ab und zu bei eigenen Buttons (die sonst funktionieren), die in's Symbolleiste Anpassen Fenster gezogen wurden, also nicht in einer Toolbar sitzen. :/

    Oder halt wenn ein Element/ID sonstwie nicht gefunden werden kann, aber dann funktioniert hier das Script generell nicht.

  • Das Skript müsste angepasst werden. In dem aus Beitrag Nr. 23 gibt es nämlich keine.

    Mit diesem Code aus dem verlinkten Skript - eingefügt unter der Konfiguration - verschwindet die Fehlermeldung.

    JavaScript
            //[FF139+] ->
            if(!document.getElementById("unknownContentType")) 
            return;
            //<- [FF139+]

    An der Funktion ändert sich dadurch nichts, es gibt eben eine Fehlermeldung weniger. Wie gesagt gibt es diese Fehlermeldung bei einer ganzen Reihe von Skripten bei mir, die alle funktionieren, u.a. welche von alice0775.

    Sören Hentzschel Kannst du zu diesen Fehlermeldungen etwas sagen?

    Die Fehlermeldung document.getElementById(...) is null habe ich bei vielen Skripten, die wie dies hier trotzdem funktionieren. Für mich nur eines von vielen Javascript-Rätseln. 😉

  • An der Funktion ändert sich dadurch nichts, es gibt eben eine Fehlermeldung weniger. Wie gesagt gibt es diese Fehlermeldung bei einer ganzen Reihe von Skripten bei mir, die alle funktionieren, u.a. welche von alice0775.

    Das hatte ich in #16 erklärt:

    Zitat

    Der Fehler wird ausgegeben, weil bei Start des Scripts der entsprechende Save-Dialog noch nicht vorhanden ist.

    ...und damit auch der Button noch nicht existiert.

    Ist in diesem Fall auch nicht weiter tragisch, da die entsprechende Funktion ja bei einem Download nochmal aufgerufen wird und dann existiert auch der Dialog...

    Gruß BrokenHeart

    "success has many fathers, failure is an orphan"

  • Auch, wenn Scripts ansonsten zu funktionieren scheinen, empfehle ich, solche Fehler zu beheben. Denn man kann nicht grundsätzlich ausschließen, dass nach Auftreten eines Fehlers nicht irgendwelche Dinge nicht mehr korrekt ausgeführt werden. Und selbst, wenn es keine Probleme gibt, wird ja nur das Entdecken tatsächlicher Probleme erschwert, wenn in der Konsole unnötige Fehlermeldungen erscheinen.

  • Auch, wenn Scripts ansonsten zu funktionieren scheinen, empfehle ich, solche Fehler zu beheben. Denn man kann nicht grundsätzlich ausschließen, dass nach Auftreten eines Fehlers nicht irgendwelche Dinge nicht mehr korrekt ausgeführt werden. Und selbst, wenn es keine Probleme gibt, wird ja nur das Entdecken tatsächlicher Fehler erschwert, wenn in der Konsole unnötige Fehlermeldungen erscheinen.

    Ich habe versucht, das auf andere Skripte mit diesem Fehler zu übertragen. Bei Skripten, die sich auf Elemente aus einem anderen Skript beziehen, bekomme ich den Fehler, obwohl das Element des ersten Skripts definitiv bei der Ausführung des zweiten Skript vorhanden ist. (setTimeout so lang, dass ich sehen kann, wie das zweite Skript ausgeführt wird während das Element des ersten Skripts bereits vorhanden ist: Beispiel platzieren eines Buttons in der vom ersten Skript erzeugten Addonbar. Dennoch kommt für das zweite Skript der Fehler, dass die ID der Addonbar null ist, während der Button genau dort platziert wird.)

    Woran liegt das?

  • Woran liegt das?

    Konkret kann man das natürlich nicht bei jedem Skript sagen, aber wenn du verhinderst, dass das Skript zweimal aufgerufen wird, dann sollten sich solche Fehler in aller Regel vermeiden lassen. Daher bei jedem Skript z.B. diesen Code am Anfang einfügen:

    JavaScript
    if (!window.gBrowser){
    	return;
    }

    Gruß BrokenHeart

    "success has many fathers, failure is an orphan"

  • So sefinitiv ist das wohl nicht, Fehlermeldungen lügen nicht. ;) Es wäre vermutlich hilfreich, wenn du den Code teilen würdest, um den es geht.

    Die Fehlermeldung

    Zitat

    21:09:08.499 Uncaught TypeError: document.getElementById(...) is null
    init file:///C:/Users/bege/AppData/Roaming/Mozilla/Firefox/Profiles/487kit50.Quantum/chrome/JS/VersionInAddonBar.uc.js:34
    <anonymous> file:///C:/Users/bege/AppData/Roaming/Mozilla/Firefox/Profiles/487kit50.Quantum/chrome/JS/VersionInAddonBar.uc.js:37
    VersionInAddonBar.uc.js:34:18

    Die Add-on Bar (ID wird in Zeile 120 definiert)

    Das Skript, das einen Button in der Add-on Bar platziert und die Fehlermeldung erzeugt (die beanstandete ID wird in Zeile 18 definiert)


    Woran liegt das?

    Konkret kann man das natürlich nicht bei jedem Skript sagen, aber wenn du verhinderst, dass das Skript zweimal aufgerufen wird, dann sollten sich solche Fehler in aller Regel vermeiden lassen. Daher bei jedem Skript z.B. diesen Code am Anfang einfügen:

    JavaScript
    if (!window.gBrowser){
    	return;
    }

    Tatsächlich verschwindet die Fehlermeldung dadurch bei diesem Skript. Ich verstehe aber noch nicht, warum. Was meinst du mit "zweimal aufgerufen"? Passiert das bei dem Skript? Und trotz einer auch sehr langen timeout-Zeit?

    Edit: Mit einem anderen Skript habe ich es auch probiert. Ist für einen Nur-Bastler wie mich nicht einfach, die richtige Stelle dafür zu finden. Ganz am Anfang funktioniert es nicht immer, das legt mitunter das ganze Skript lahm. Aber mit probieren habe ich es herausgefunden.

    2 Mal editiert, zuletzt von bege (10. Juni 2025 um 21:35) aus folgendem Grund: Ein Beitrag von bege mit diesem Beitrag zusammengefügt.

  • Tatsächlich verschwindet die Fehlermeldung dadurch bei diesem Skript. Ich verstehe aber noch nicht, warum. Was meinst du mit "zweimal aufgerufen"? Passiert das bei dem Skript? Und trotz einer auch sehr langen timeout-Zeit?

    Ja! Jedes Skript wird über die von uns verwendete UserChrome-Logik zweimal aufgerufen. Warum das im Detail so ist, kann ich jetzt auch nicht sagen, müsste ich mir nochmal anschauen. aborix könnte das sicher ;(.

    Der Aufruf des Skripts ist ja in der Konsole auch doppelt vorhanden.


    Ganz am Anfang funktioniert es nicht immer, das legt mitunter das ganze Skript lahm.

    Ja, da war ich zu ungenau, sorry. Es sollte innerhalb der ersten aufgerufenen Funktion, also vor der ersten wirklichen Anweisung stehen. Meistens ist diese Abfrage ja eh in den bestehenden Skripten schon vorhanden, z.T. mit unterschiedlichen Methoden. Einfach da mal reinschauen.

    Gruß BrokenHeart

    "success has many fathers, failure is an orphan"

    Einmal editiert, zuletzt von BrokenHeart (10. Juni 2025 um 21:40) aus folgendem Grund: Ein Beitrag von BrokenHeart mit diesem Beitrag zusammengefügt.

  • Konkret kann man das natürlich nicht bei jedem Skript sagen, aber wenn du verhinderst, dass das Skript zweimal aufgerufen wird, dann sollten sich solche Fehler in aller Regel vermeiden lassen. Daher bei jedem Skript z.B. diesen Code am Anfang einfügen:

    JavaScript
    if (!window.gBrowser){
    	return;
    }

    Habe ich eigentlich überall in der Art in Scripts.

    Verstehe immer noch nicht, warum ein Button im Anpassen Fenster fast immer eine Fehlermeldung aufwirft.
    Das hier ist auf Mac, und zugegebenermassen 115esr, war aber schon ewig das gleiche Problem.

    Die utilities.js ist Teil der Scriptvorbereitung Dateien.

    Hier ein Beispielscript, und die relevanten Errors in der Konsole: