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

  • Das, und base64 Dingens (Fachbegriff) Icons, va die aus den 90ern...

    Base64-Grafiken sind aber universell. Für Übersichtsseiten wie die Github-Site von Endor ist das besser. Nach Installation des Skripts hat jeder sofort ein Symbol, das funktioniert.

    Sehr guter Punkt, aber dafür kann man auch eine Grafik benutzen die keine 300 Zeilen im Code einnimmt, zB einen .svg 3 Zeiler.
    Oder noch besser, einfach ein beliebiges Fx internes Icon als Platzhalter benutzen.

  • könnte es auch sein, dass einfach nur der Reload im falschen Fenster stattfindet? Dass z.b.: event.target.ownerGlobal.BrowserCommands.reloadSkipCache();statt BrowserCommands.reloadSkipCache(); schon reichen würde?

    Das kann sein. Ich hab das mangels Kenntnis dieser Anweisungen nicht getestet.

    Müsste die Funktion an sich dann nicht auch nach unten?

    Hmm. Ich habe diese bei mir funktionierende Version und genau das getan:

    moko2000, such dir eine der Varianten aus, diese von mir oder die vom Mitleser ein paar Postings weiter oben.

    Und lassen sich so zum Bleistift einbinden.

    Das kann man sogar zusammenfügen: Zeile 1 und 2 vertauscht, Variablenname angepasst:

    JavaScript
    let ButtonIcon = "default_icon.svg"; // Name & Dateiendung des anzuzeigenden Symbols!
    let IconPath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons', ButtonIcon )); // Pfad zum Profilordner und gleich in den entsprechenden Unterordner

    Und dann Zeile 6 entsprechend geändert:

    Code
    #browser-toolbox-button { list-style-image: url("${IconPath}") }
  • Herr Speravir.
    Danke. Ich weiß nicht, wie ich zitieren soll.

    AnimationToggleButton.uc.js funktioniert jetzt im zweiten Fenster.
    In diesem Fall bleibt die GIF-Animation im ersten Fenster gleich, aber nur die Schaltfläche ändert sich.

  • Bitte helfen Sie, das Problem mit dem Skript auf FF 138.0.1 zu lösen. Partition Übergang funktioniert nicht, nicht öffnen Explorer.

    Spoiler anzeigen

    var gExternalApplications = {
    type: 'button', //'menu' or 'button'
    insertafter: 'PersonalToolbar',


    apps: [
       {name: 'C:', path: 'C:\\'},
       {name: 'D:', path: 'D:\\'},
        {name: 'E:', path: 'E:\\'},
        {name: 'F:', path: 'F:\\'},
    ],


    init: function() {
    for (var i=0; i<this.apps.length; i++) {
    if (!this.apps[i].path) continue;
    if (!this.apps[i].args) this.apps[i].args = [];


    this.apps[i].path = this.apps[i].path.replace(/\//g, '\\');


    var ffdir = Cc['@mozilla.org/file/directory_service;1'].getService(Ci.nsIProperties).get('CurProcD', Ci.nsIFile).path;
    if (/^(\\)/.test(this.apps[i].path)) {
    this.apps[i].path = ffdir.substr(0,2) + this.apps[i].path;
    }
    else if (/^(\.)/.test(this.apps[i].path)) {
    this.apps[i].path = ffdir + '\\' + this.apps[i].path;
    }
    }


    if (this.type == 'menu') {
    var mainmenu = document.getElementById('main-menubar'); // das war das Original
    var menu = mainmenu.appendChild(document.createXULElement('menu'));
    menu.setAttribute('label', 'Start'); // Menu = "Start"
    menu.setAttribute('accesskey', 'a');


    var menupopup = menu.appendChild(document.createXULElement('menupopup'));
    for (var i=0; i<this.apps.length; i++) {
    menupopup.appendChild(this.createMenuitem(this.apps[i]));
    }
    }
    else {
    var menubarItems = document.getElementById(this.insertafter);
    var toolbar = menubarItems.parentNode.insertBefore(document.createXULElement('toolbar'), menubarItems.nextSibling);
    toolbar.id = 'ExtAppButtons';
    toolbar.setAttribute("class", "browser-toolbar chromeclass-toolbar-additional");
    toolbar.setAttribute("orient", "horizontal");
    for (var i=0; i<this.apps.length; i++) {
    toolbar.appendChild(this.createButton(this.apps[i]));
    }
    }
    },


    exec: function(path, args) {
    for (var i=0; i<args.length; i++) {
    args[i] = args[i].replace(/%u/g, gBrowser.currentURI.spec);
    }


    var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
    file.initWithPath(path);
    if (!file.exists()) {
    throw 'File Not Found: ' + path;
    }


    if (!file.isExecutable() || args.length==0) {
    file.launch();
    }
    else {
    var process = Cc['@mozilla.org/process/util;1'].getService(Ci.nsIProcess);
    process.init(file);
    process.run(false, args, args.length);
    }
    },


    createButton: function(app) {
    if (app.name == 'separator')
    return document.createXULElement('toolbarseparator');


    var item = document.createXULElement('toolbarbutton');
    item.setAttribute('class', 'bookmark-item');
    item.setAttribute('label', app.name);
    item.setAttribute('image', 'moz-icon:file:///' + app.path + '?size=16');
    item.setAttribute('oncommand', 'gExternalApplications.exec(this.path, this.args);');
    // item.setAttribute('tooltiptext', app.name);
    item.path = app.path;
    item.args = app.args;
    return item;
    },


    createMenuitem: function(app) {
    if (app.name == 'separator')
    return document.createXULElement('menuseparator');


    var item = document.createXULElement('menuitem');
    item.setAttribute('class', 'menuitem-iconic');
    item.setAttribute('label', app.name);
    item.setAttribute('image', 'moz-icon:file:///' + app.path + '?size=16');
    item.setAttribute('oncommand', 'gExternalApplications.exec(this.path, this.args);');
    item.path = app.path;
    item.args = app.args;
    return item;
    }
    };
    gExternalApplications.init();

    Um mit Ihnen zu kommunizieren, benutze ich Google Translate. Bitte entschuldigen sie meine schlechte deutsche sprache <3

  • bege Das Skript, welches der pro100user verwendet, ist ein anderes, nämlich External-Applications.uc.js, mit dem man externe Anwendungen starten kann. pro100user „missbraucht“ es aber, um Partitionen aufzurufen statt Anwendungen.

    Übersetzer für Obersorbisch und Niedersorbisch auf pontoon.mozilla.org u.a. für Firefox, Firefox für Android, Firefox für iOS, Firefox Klar/Focus für iOS und Android, Thunderbird, Pootle, Django, LibreOffice, LibreOffice Onlinehilfe, WordPress

  • pro100user Probiere folgende Skriptversion:

    Klicke auf das Symbol im Kasten oben rechts. Dann wird der Text aus dem Code-Kasten in die Zwischenablage kopiert und du kannst dann den Skript-Text in deinen Editor einfügen.

    Bitte setze nicht jede Zeile in ein Kästchen! Das ist total unübersichtlich! Klicke stattdessen auf das Symbol links daneben, das einen Code-Kasten in das Antworten-Fenster einfügt, mit dem du den vollständigen Text in einem einzigen Kasten einfügen kannst.

    Übersetzer für Obersorbisch und Niedersorbisch auf pontoon.mozilla.org u.a. für Firefox, Firefox für Android, Firefox für iOS, Firefox Klar/Focus für iOS und Android, Thunderbird, Pootle, Django, LibreOffice, LibreOffice Onlinehilfe, WordPress

  • Danke. Ich weiß nicht, wie ich zitieren soll.

    • Alles zitieren: rechts unten auf das Anführungszeichen “ drücken.
    • Nur Teile zitieren: mit Maus markieren und entweder mehrere Zitate speichern und dann ganz unten auf die Schaltfläche mit „Ein Zitat“ oder „2 Zitate“ (zählt hoch, wenn mehr) gehen und dann auswählen oder gleich den ausgewählten Text als Zitat einfügen in den Editor für die Antworten einfügen lassen.

    AnimationToggleButton.uc.js funktioniert jetzt im zweiten Fenster.
    In diesem Fall bleibt die GIF-Animation im ersten Fenster gleich, aber nur die Schaltfläche ändert sich.

    Dadurch, dass man mit Hilfe des Skriptes eine Einstellung im Firefox ändert, die im gesamten Profil gültig ist, lässt sich letzteres meines Wissens nach nicht verhindern.

  • Danke. Ich weiß nicht, wie ich zitieren soll.

    • Alles zitieren: rechts unten auf das Anführungszeichen “ drücken.
    • Nur Teile zitieren: mit Maus markieren und entweder mehrere Zitate speichern und dann ganz unten auf die Schaltfläche mit „Ein Zitat“ oder „2 Zitate“ (zählt hoch, wenn mehr) gehen und dann auswählen oder gleich den ausgewählten Text als Zitat einfügen in den Editor für die Antworten einfügen lassen.

    AnimationToggleButton.uc.js funktioniert jetzt im zweiten Fenster.
    In diesem Fall bleibt die GIF-Animation im ersten Fenster gleich, aber nur die Schaltfläche ändert sich.

    Dadurch, dass man mit Hilfe des Skriptes eine Einstellung im Firefox ändert, die im gesamten Profil gültig ist, lässt sich letzteres meines Wissens nach nicht verhindern.

    Hr.Speravir. Entschuldigen Sie die verspätete Antwort. Ich habe auch gelernt, wie man zitiert. Vielen Dank.
    Vielen Dank, dass Sie sich die Zeit genommen haben, mich zu unterrichten.
    Ich habe auch die Schaltflächenänderungen im ersten Fenster mithilfe von AnimationToggleButton.uc.js verstanden.
    Ich freue mich darauf, im deutschen Firefox-Forum weiterhin von Ihnen allen zu lernen.
    Ich spreche kein Deutsch, deshalb verwende ich Google Translate. Bitte entschuldigen Sie die seltsame Formulierung.

  • Ich spreche kein Deutsch, deshalb verwende ich Google Translate.

    Hi, welche Sprache ist denn die Ihre, wenn ich fragen darf?
    Und DeepL übersetzt viele Sprachen viel besser als Google!

    DeepL Translate – Der präziseste Übersetzer der Welt
    Übersetzen Sie Texte und ganze Dateien im Handumdrehen. Präzise Übersetzungen für Einzelnutzer und Teams. Jeden Tag nutzen Millionen von Menschen DeepL.
    www.deepl.com

    Mit <3lichem Gruß

    Mira

  • Dadurch, dass man mit Hilfe des Skriptes eine Einstellung im Firefox ändert, die im gesamten Profil gültig ist, lässt sich letzteres meines Wissens nach nicht verhindern.

    Kleine Anmerkung:
    Das Script aus RE: userChrome.js Scripte für den Fuchs (Diskussion) funktioniert wie erwartet (Änderung der Animation sowie des Icons ausschließlich im aktiven Fenster).

    Dieser Beitrag ist ohne Hilfe einer 'KI' entstanden.

  • Dadurch, dass man mit Hilfe des Skriptes eine Einstellung im Firefox ändert, die im gesamten Profil gültig ist, lässt sich letzteres meines Wissens nach nicht verhindern.

    Kleine Anmerkung:
    Das Script aus RE: userChrome.js Scripte für den Fuchs (Diskussion) funktioniert wie erwartet (Änderung der Animation sowie des Icons ausschließlich im aktiven Fenster).

    Nur aus Neugierde, ist damit gleichzeitig auch dieses Problem gelöst?:/

  • Nicht bei mir, Problem #1, wie beschrieben. :/
    Erstes Fenster A schliessen, dann in Fenster B probieren.

    ist damit gleichzeitig auch dieses Problem gelöst? :/

    An Deinem Smily sehe ich, dass Du die Antwort schon kennst. Das war aber auch nicht das Thema in dieser Kommunikation.

    Nein, an dem Grübel Smiley siehst du dass ich die Antwort nicht kannte, daher die Frage.
    Ich weiss immer noch nicht was das Script machen soll, also auch nicht wie ich es selber testen könnte.

    Das Thema ist aber sehr wohl die allgemeine, nicht eingeschränkte Nutzbarkeit, egal mit welcher Lösung, worauf sich dein Beitrag bezog - inklusive zitiertem Text zu eben der von mir nachgefragten Problematik.
    Du hast selber beides verbunden. ;)

    Aber Semantik und Empfindlichkeiten beiseite, die Fragestellung hört sich interessant an, aber was ist sie eigentlich?
    Ist es sowas: der Button soll für alle geöffneten Fenstern das gleiche bewirken, egal in welchem Fenster er aktiviert wird, und idealerweise dann auch noch bei: Problem #1, wie beschrieben. Erstes Fenster A schliessen, dann in Fenster B probieren.?

    Falls ja, ich habe Buttons die genauso funktionieren, und die benutzen das gleiche Prinzip wie das von Speravir in #4443, aber mit anderen und einfacheren Funktionen. :/

  • Beitrag von Horstmann (9. Mai 2025 um 22:29)

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Egal (10. Mai 2025 um 09:27).