Div. Skripte funktionieren im aktuellem Nightly nicht mehr

  • Da bin ich wieder!
    Habe das neue Appmenü für mich umgeschrieben.
    Es funktioniert auch, doch habe ich mal wieder ein Problem mit den Selektoren!

    Gefunden : menu.menu-iconic:nth-child(1) > menupopup:nth-child(6) > menuitem:nth-child(1)
    Es geht, aber ist doch irgendwie blöd!

    ID's hatte ich ja zugewiesen, klappt auch bei den Einträgen im Untermenü "Firefox Funktionen"
    Aber im Untermenü "Firefox Verzeichnisse" eben leider nicht!
    id: "AMProfil",

    Hier das beschriebene Skript:

    Nachtrag.
    Kaumgeschrieben und hier gejammert, fiel mir doch die Lösung ein:!:

    menuitem[label="Profil"] { ... ist es.

    Aber hat jemand eine Lösung für das UndoListInTabmenuToo-Skript?
    Bezüglich des Eintrags "Alle Tabs wieder öffnen".

    Mit <3lichem Gruß

    Mira

    2 Mal editiert, zuletzt von Mira_Belle (16. Januar 2025 um 21:31)

  • Arbeitet in Nightly

  • Nö, zu dritt.;)

    Denn sonst würde meine Version funktionieren.
    Wer mag sich das mal anschauen:

    Mfg.
    Endor

    Mitglied #4 hier: in Zeile 146, grob geraten, wüsste nicht wie ich das testen kann: bei gExternalApplications.exec(this.path, this.args).click(); zu gExternalApplications.exec(this.path, this.args); , also .click() rauswerfen.

    Ansonsten für den Bereich auch nochmal bei Sören's Vorschlägen schauen, die dritte Umsetzung.

  • Dann ist das ja logisch.

    Schon in Ordnung.

    da beziehst Du Dich aber auf eine Version, die längst überholt ist.

    Wie Sören dir bereits geantwortet hat: Nöö. Ich hatte durchaus bemerkt, dass Du ein geändertes Skript gepostet hast, es aber nicht heruntergeladen. Edit: Jetzt aber doch. Welche der zwei Versionen ist die neuere? Die zuletzt gepostete enthält jedenfalls viele Rechtschreibfehler und Übersetzungsschwächen (wenn man nicht sogar Fehler), die in der zuerst geposteten ausgemerzt wurden.

  • Endor & Horstmann:

    In meiner vorigen Antwort war mir nicht genau bewusst, womit ihr Probleme habt. Das ist mir erst später klar geworden. Nehmen wir das Beispiel Browsertools-Button, ich beziehe mich auf die am 7. Juni 2023 gepostete Version (als browsertoolbox.uc.js):

    Wir finden dort ab Zeile 22 ein einer Variable zugeordnetes Objekt (gekürzt um die hier nicht relevanten Teile):

    JavaScript
                    var props = {
                        // Kürzung
                        style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) + '");',
    
                        oncommand: '(' + onCommand.toString() + ')()'
                    };
                    for (var p in props)
                        toolbaritem.setAttribute(p, props[p]);
                    return toolbaritem;

    sowie ab Z. 39 die eigentliche Funktion:

    JavaScript
        function onCommand() {
            var document = event.target.ownerDocument;
            if (!document.getElementById('menu_browserToolbox')) {
                let { require } = ChromeUtils.importESModule("resource://devtools/shared/loader/Loader.sys.mjs", {});
                require("devtools/client/framework/devtools-browser");
            };
            document.getElementById('menu_browserToolbox').click();
        };

    Das kann man nun unter Entfernung oder auch unter Erhalt der eigenen Funktion zu einem addEventListener umbauen:

    a) Entfernung, im Prinzip wie in meiner vorherigen Antwort (die Einrückung stimmt jetzt nicht mehr, weil ich alles nur kopiert habe)

    b) die Funktion wird gar nicht angerührt (wobei, wie Horstmann selber schreibt, ein anderer Funktionsname deutlich besser wäre, openBox oder so):

    Ich bin selbst nicht darauf gekommen, aber Mitleser hat das so in seinem DeepL-Skript benutzt, vergleiche Posting vom 12. Januar 2025, dort mit der zusätzlichen Verbesserung, dass der Code nur bei Klick mit der linken Maustaste ausgeführt werden soll (zusätzliches if (event.button == 0) {…} um den Funktionsaufruf, beachtet dazu Sörens Hinweis: drei Gleichheitszeichen wären besser).

    Beachtet auch, dass in beiden Variationen am Ende von Zeile 24 (style: …) ein Komma entfernt werden musste. Und ich habe var in let geändert.

  • //
    Nur mal so als allgemeine Frage.
    Der user lenny2 hat in Beitrag Nr. 364 ein Skript gepostet, welches einwandfrei funktioniert.:thumbup:

    Wenn man aus dem Skript nur eine Funktion braucht, dann sind das nur 17 Zeilen die benötigt werden.
    Das von mir zur Zeit genutzte Skript External Applications uc.js hat dafür aber 127 Zeilen.

    Meine Frage:
    Hat die länge/größe von einem Skript Einfluss auf die Performance vom Firefox?

    Danke für jegliche Erklärung.

  • Hat die länge/größe von einem Skript Einfluss auf die Performance vom Firefox?

    Prinzipiell kann man das nicht beantworten. Es kommt immer darauf an, wie oft der (zusätzliche) Code zur Ausführung kommt und vor allem wann. Wenn der gesamte Code nur einmal beim Start eine gewisse Last erzeugt ist das sicherlich vernachlässigbar. Ständig oder periodisch aufgerufener Code erzeugt natürlich eine Dauerlast. Das muss wirklich konkret am Skript betrachtet werden. Wenn hingegen Ressourcen (in beträchtlichem Umfang!) durch den zusätzlichen Code beansprucht werden, dann kann sich das natürlich auch auf die Performance auswirken.

    Im konkreten Beispiel glaube ich nicht, dass die relativ kleinen Button-Icons so viel Ressourcen fressen, dass man das in irgendeiner Form spürt. Auch die notwendigen, zusätzlichen Abfragen der Buttons sind für die Performance unerheblich.

    Gruß BrokenHeart

    "success has many fathers, failure is an orphan"

  • zusätzlichen Abfragen der Buttons sind für die Performance unerheblich.

    Hallo BrokenHeart ..

    danke für deine Erklärung:thumbup:

    Ich nutze 2 dieser größeren Skripte.

    Einmal um den Thunderbird zu starten..1x am Tag, dann bleibt er offen

    Und mit dem anderen Skript rufe ich hin und wieder das Kartenspiel auf.;)

    Also lasse ich alles so wie es ist hier.

  • da beziehst Du Dich aber auf eine Version, die längst überholt ist.

    Wie Sören dir bereits geantwortet hat: Nöö. Ich hatte durchaus bemerkt, dass Du ein geändertes Skript gepostet hast, es aber nicht heruntergeladen. Edit: Jetzt aber doch. Welche der zwei Versionen ist die neuere? Die zuletzt gepostete enthält jedenfalls viele Rechtschreibfehler und Übersetzungsschwächen (wenn man nicht sogar Fehler), die in der zuerst geposteten ausgemerzt wurden.

    Sorry. Das ganz aktuelle von hier jetzt verwendete Appmenü-Skript habe ich nicht hier gepostet!
    In Beitrag #363 nur der Anfang!
    Damit ich besser vergleichen kann, wärst Du so nett und verlinkst die Beiträge?
    Jene ohne Übersetzungsschwächen (bzw. ohne Fehler). Bitte, Danke.

    Mit <3lichem Gruß

    Mira

  • Den Performance-Aspekt hat BrokenHeart ja schon beantwortet. Ich gehe jetzt bei einem klassischen Firefox-Script auch nicht davon aus, dass man die Auswirkungen des nicht „aufgeräumten“ Scripts tatsächlich spüren wird. Allerdings gibt es noch einen anderen Aspekt: Jeder Code ist potenziell Code, der Schwachstellen haben oder durch Änderungen seitens Mozilla inkompatibel werden und vielleicht sogar Probleme bereiten kann. Auch von der Code-Pflege her ist es einfacher, keinen Code mitzuschleppen, der nicht benötigt wird. Ich würde Anpassungen immer auf das absolute Minimum reduzieren, um so wenig wie möglich von dem abzuweichen, was Mozilla ausliefert.

  • Endor & Horstmann:

    In meiner vorigen Antwort war mir nicht genau bewusst, womit ihr Probleme habt. Das ist mir erst später klar geworden. Nehmen wir das Beispiel Browsertools-Button, ich beziehe mich auf die am 7. Juni 2023 gepostete Version (als browsertoolbox.uc.js):

    Vielen Dank für die ausführliche Erklärung!:thumbup:

    Mich hat diese Zeile verwirrt : oncommand: '(' + onCommand.toString() + ')()' , wusste einfach nicht wie ich das alternativ einbinden sollte, v.a. mit der irreführenden Verwendung von onCommand als Funktionsname.

  • Naja, aber auch nur teilweise.

    Hallo Sören.

    Ich habe dann noch eine Frage zu dem kleinen Skript.

    In Zeile 10 muss ich ein eigenes Icon angeben.

    In dem großen Skript wird das wohl automatisch aus der .exe Datei damit ausgelesen und eingefügt:

    item.setAttribute('image', 'moz-icon:file:///' + app.path + '?size=16');

    Lässt sich das auch in dem kleinen Skript so ändern?

  • Lässt sich das auch in dem kleinen Skript so ändern?

    Meinst du das so?

    Man beachte die notwendige, unterschiedliche Verwendung von slash/backslash in den Pfadangaben! Man könnte natürlich eine Pfadvariable nutzen und dann im Aufruf file.initWithPath die slashes vorher umdrehen - oder quick&dirty, so wie oben.

    Gruß BrokenHeart

    "success has many fathers, failure is an orphan"