1. Nachrichten
  2. Forum
    1. Unerledigte Themen
    2. Forenregeln
  3. Spenden
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. camp-firefox.de
  2. Mira_Belle

Beiträge von Mira_Belle

  • extra_config_menu.uc.js > ohne security.allow_unsafe_dangerous_privileged_evil_eval auf false

    • Mira_Belle
    • 11. August 2026 um 18:58
    Zitat von 2002Andreas

    oder verwechselst du etwas?

    Möglicherweise bin ich gerade etwas durcheinander.
    Aber ist dieses Skript nicht dafür verantwortlich, die userChromeShadow.css zu suchen
    und zu laden?

    Wie dem auch sei, lässt sich ja in den Testskript ganz leicht rückgängig machen.
    Der Code ist ja noch vorhanden!

    Aber andere Frage!
    Werden bei Dir die Userskripte direkt aus "chrome" wie auch aus "chrome/skripts" angezeigt,
    damit Du sie mit einem klick bearbeiten kannst?

  • extra_config_menu.uc.js > ohne security.allow_unsafe_dangerous_privileged_evil_eval auf false

    • Mira_Belle
    • 11. August 2026 um 18:24
    Zitat von FuchsFan

    Ich habe in Nightly getestet, aber im Submenü "Meine Scripte" werden nur aus dem Ordner chrome die Scripte aufgelistet.

    Merkwürdig.
    Funktioniert hier bei mir sowohl in der Final, als auch in der Nighty.

    Zitat von FuchsFan

    Und dann fehlt "Neustart" ganz.

    Mh, ....
    War dieser Menüpunkt denn im ursprünglichen Skript vorhanden?

    Zitat von FuchsFan

    Dann müsstest du das bei allen anderen auch so machen.

    Diese Aussage verstehe ich nicht so ganz.
    Mir ging es nur um die userChromeShadow.uc.js.
    Da unbedachte Änderungen an dieser sämtliche Anpassungen per css "ausschalten" können.
    Und ganz ehrlich, wer an dieser Datei wirklich was ändern will, muss schon wissen, was er tut!
    Macht man versehentlich ein Userskript "kaputt", funktioniert halt ein Button nicht mehr,
    oder irgendwas wird nicht mehr angezeigt oder so,
    aber es bricht keine Panik aus, weil der Firefox plötzlich kaputt ist.

  • extra_config_menu.uc.js > ohne security.allow_unsafe_dangerous_privileged_evil_eval auf false

    • Mira_Belle
    • 11. August 2026 um 15:38

    Hi, ich habe noch "eine" kleine Anpassung vorgenommen!
    Ich habe das Skript insofern geändert, dass
    a. die userChromeShadow.uc.js nicht mehr "eingebunden" wird!
    Somit kann niemand versehentlich diese bearbeiten und verändern.
    b. Auch ich halte das Chromeverzeichnis sauber und habe die Userskripte unter chrome/scripts,
    wie auch die Cascading Style Sheets (CSS) unter chrome/css.
    Also werden die Userskripte, welche im anderen Ordner liegen, auch eingebunden,
    werden angezeigt und man kann sie bearbeiten.

    Ansonsten habe ich alles beim Alten belassen!
    Und den alten Code nur auskommentiert!

    Schaut es Euch mal an.

    JavaScript
    /*
    // ==UserScript==
    // @name           extras_config_menu.uc.js
    // @compatibility  Firefox 153*.*
    // @include        main
    // @version        1.0.20260811
    // @edit           @aborix 7/21 CSS Dateien als Untermenü eingefügt
    // @edit           @2002Andreas 8/21 Shadow CSS Dateien als Untermenü + Ordner eingefügt
    // @edit           @BrokenHeart 1/25 Anpass. wg. Änderung der Sicherheitsrichtlinien bei 'inlineEvents'
    // @edit           @Mira 8/26 Anpassung für security.allow_unsafe_dangerous_privileged_evil_eval = false
    // @edit           @Mira 8/26 Anpassung für Userscripte im Unterordner "chrome/scripts", Expliziter Ausschluss von "userChromeShadow.uc.js"
    // ==/UserScript==
    */
    
    var uProfMenu = {
      // --- KONFIGURATION (unchanged) ---
      TextOpenExe: 'C:\\Program Files\\Notepad++\\notepad++.exe',
      vFileManager: '',
      warpmenuto: 'helpMenu',
      sortScripts: 0,
      gmOrdner: 0,
      cssOrdner: 1,
      abouts: ['about:about','about:addons','about:cache','about:config','about:crashes',
               'about:downloads','about:home','about:logins','about:memory','about:support',
               'about:preferences','about:performance','about:profiles'
              ],
      showNormalPrefs: 1,
      enableScriptsToClip: 2,
      enableRestart: 0,
    
      // --- INIT (ANGEPASST) ---
      init: function() {
        if (this.warpmenuto.toLowerCase() == 'menu') {
          var zielmenu = document.getElementById('menu_ToolsPopup');
          if (zielmenu == null) {
            userChrome.log("extras_config_menu.uc.js findet Zielmenue nicht, evtl. weil ein anderes Fenster als das Hauptfenster geoeffnet wurde.");
            return;
          }
          var menu = zielmenu.appendChild(this.createME("menu", "Config Men\u00FC", null, 0, "ExtraConfigMenu"));
          menu.setAttribute("class", "menu-iconic");
          // Ersetze ondblclick durch addEventListener
          menu.addEventListener('dblclick', function() {
            openTrustedLinkIn('about:config', 'tab');
          }, true);
        } else {
          if (window.__SSi == "window0") {
            CustomizableUI.createWidget({
              id: "ExtraConfigMenu-button",
              defaultArea: CustomizableUI.AREA_NAVBAR,
              label: "Extra Config Menü",
              tooltiptext: "Extra Config Menü\nRechtsklick öffnet about:config"
            });
          }
          var menu = document.getElementById("ExtraConfigMenu-button");
    
          // KORREKTUR:
          if (!menu) {
            return;
          }
    
          menu.setAttribute("type", "menu");
          menu.addEventListener('click', function(event) {
            if (event.button == 2 && !this.open) {
              openTrustedLinkIn("about:config", "tab");
              event.preventDefault();
            }
          }, true);
        }
    
        // CSS-Styles (unchanged)
        var css = " \
          #ExtraConfigMenu, #ExtraConfigMenu-button { \
            list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnElEQVR4Xm2RzYtbZRSHn/fr3pvJzTB3qiNM2k2pMBUGhEHaqsUqdeFGQalCobgREaFu/B/cqCtxVSjoQhBEQRBmIfWDKgNGJUPt0Nhah9JJ4iSd5E6+bu5972tAO4SS5/DjXZ1znsMrNiq1eikMQqYYJCmjxNH5+zdW777L0J5KKl9VPmnf+ut9KWkwhbheuzNcOVYOmGKc5iRO0r1ykeXCx0h7kt4fC3z5wfqbQnAJwQHa5S7jAZSRuJ0mkf81cheobhBXZa+ri1uptQjHAZoZCEC1PiPgDuwxCfwerBU7b73zXn//3usCcdt4HkZ7SGZg431U51NUCgwlO3cV/bVXhR/6p9ut+nP9QYeNn7/n8qUPZxvQ/Q6VVWHk4ZqWRvlJjpx9hcGfW2wO95N2q8m3618A2WwDt/0RplSAXsBed57eyossHl5GYdHacG3zGpADM06wjQ1UUIN+CLHPvfAxojPnKLiE+bDE1R9+5GatAmgPeGCAteQ7l5GBhGSyuROyd/gFouUyWkqEErR2mwXAAA8BRS0AgMQBjSra30ZkEeDzz9Dn4ZcvMO51SMcJcTdGChmA0ABA6cAgzyG3I8jLEBylV4fWoaeIc0V7t0Uv7pFbC+CA+28mp/8+SwXKnMVmz1O9HpE+eobMZdjcoY1GIHD/NwIdoH1fBaNguzlg88pVyoUi4vTbFI8eJxsNAIfSkrliESllH/L0v0jktNNomFGv1TFrL3Fo9QSMR3jaEEXzLC09gjaKp595No0WjyCEB4zRclICUMDxtRMce/wJ1MIi2SglXShhfI/cOjxPoZRmbq4gXzt/gVrtBrdvbiG+Wf+p/mvll1BpiVAGhCDPxuAUDotz4HKHlIJON6bRbL4hhPjcMx5mkn8BBLEUrsVZbq0AAAAASUVORK5CYII=);  \
            margin-top: 0px !important; \
            opacity: 1 !important; \
          } \
          #ExtraConfigMenu-button > dropmarker, #ExtraConfigMenu-button > hbox > .toolbarbutton-menu-dropmarker { \
            display: none !important; \
          }";
        var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
        var uri = makeURI('data:text/css;charset=UTF-8,' + encodeURIComponent(css));
        sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    
        // Menü-Popup erstellen
        var menupopup = menu.appendChild(this.createME("menupopup", null, null, 0, "ExtraConfigMenu-popup"));
    
        // Event-Listener für popupshowing (unchanged, aber sicher)
        menu.addEventListener('popupshowing', function(event) {
          uProfMenu.getScripts(0);
          uProfMenu.getCss(3);
          uProfMenu.getCss(4);
          uProfMenu.getCss(5);
        }, true);
    
        // --- UNTERMENÜS (unchanged) ---
        var submenu = menupopup.appendChild(this.createME("menu", "Meine Scripte", null, 0, "submenu-ucjs"));
        var submenupopup = submenu.appendChild(this.createME("menupopup", null, null, 0, "submenu-ucjs-items"));
        var submenu = menupopup.appendChild(this.createME("menu", "css", null, 0, "submenu-css"));
        var submenupopup = submenu.appendChild(this.createME("menupopup", null, null, 0, "submenu-css-items"));
        var submenu = menupopup.appendChild(this.createME("menu", "CSSShadow", null, 0, "submenu-CSSShadow"));
        var submenupopup = submenu.appendChild(this.createME("menupopup", null, null, 0, "submenu-CSSShadow-items"));
        var submenu = menupopup.appendChild(this.createME("menu", "cssweb", null, 0, "submenu-cssweb"));
        var submenupopup = submenu.appendChild(this.createME("menupopup", null, null, 0, "submenu-cssweb-items"));
    
        // Skriptliste in Zwischenablage (ANGEPASST: sCommand als Funktion)
        if (this.enableScriptsToClip) {
          menupopup.appendChild(this.createME(
            "menuitem",
            "Skriptliste in Zwischenablage",
            function() { uProfMenu.getScripts(1); },
            "uProfMenu_clipboard",
            0
          ));
        }
    
        menupopup.appendChild(document.createXULElement('menuseparator'));
    
        // --- KONFIGDATEIEN (ANGEPASST: sCommand als Funktion) ---
        menupopup.appendChild(this.createME(
          "menuitem", "Bild Url",
          function() { uProfMenu.edit(0, 'Bild Url.css'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "config Einträge.css",
          function() { uProfMenu.edit(0, 'config Einträge.css'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "userChrome.css",
          function() { uProfMenu.edit(0, 'userChrome.css'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "userChromeShadow.css",
          function() { uProfMenu.edit(0, 'userChromeShadow.css'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "userContent.css",
          function() { uProfMenu.edit(0, 'userContent.css'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "userChrome.js",
          function() { uProfMenu.edit(0, 'userChrome.js'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "prefs.js",
          function() { uProfMenu.edit(1, 'prefs.js'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "user.js",
          function() { uProfMenu.edit(1, 'user.js'); },
          "uProfMenu_edit", 0
        ));
    
        // --- ORDNER (ANGEPASST: sCommand als Funktion) ---
        menupopup.appendChild(document.createXULElement('menuseparator'));
        switch (this.gmOrdner) {
          case 1:
            menupopup.appendChild(this.createME(
              "menuitem", "GM-skripty",
              function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD') + uProfMenu.getDirSep() + 'gm_scripts'); },
              "uProfMenu_folder", 0
            ));
            break;
          case 2:
            menupopup.appendChild(this.createME(
              "menuitem", "USL-skripty",
              function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm') + uProfMenu.getDirSep() + 'UserScriptLoader'); },
              "uProfMenu_folder", 0
            ));
            break;
          case 3:
            menupopup.appendChild(this.createME(
              "menuitem", "Skripty Scriptish",
              function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD') + uProfMenu.getDirSep() + 'scriptish_scripts'); },
              "uProfMenu_folder", 0
            ));
            break;
        }
    
        menupopup.appendChild(this.createME(
          "menuitem", "CSS-Ordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm') + uProfMenu.getDirSep() + 'css'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "CSSShadow-Ordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm') + uProfMenu.getDirSep() + 'CSSShadow'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "CSSWeb-Ordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm') + uProfMenu.getDirSep() + 'CSSWeb'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Chromeordner",
          function() { uProfMenu.prefDirOpen('UChrm'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Profilordner",
          function() { uProfMenu.prefDirOpen('ProfD'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Icons-Ordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm') + uProfMenu.getDirSep() + 'Icons'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Installationsordner",
          function() { uProfMenu.prefDirOpen('CurProcD'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Addonordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD') + uProfMenu.getDirSep() + 'extensions'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Startup-Cacheordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfLD') + uProfMenu.getDirSep() + 'startupCache'); },
          "uProfMenu_folder", 0
        ));
    
        // --- ABOUT-SEITEN (ANGEPASST: Closure-Problem gelöst) ---
        if (this.abouts.length > 0) {
          menupopup.appendChild(document.createXULElement('menuseparator'));
          if (this.abouts[0] == '0') {
            for (var i = 1; i < this.abouts.length; i++) {
              (function(index) {
                var about = uProfMenu.abouts[index];
                menupopup.appendChild(uProfMenu.createME(
                  "menuitem", about,
                  function() { openTrustedLinkIn(about, 'tab'); },
                  "uProfMenu_about", 0
                ));
              })(i);
            }
          } else {
            var submenu = menupopup.appendChild(this.createME("menu", "uc.js", null, 0, "submenu-about"));
            var submenupopup = submenu.appendChild(this.createME("menupopup", null, null, 0, "submenu-about-items"));
            this.fillMenu("submenu-about", "submenu-about-items", "about:", this.abouts, "uProfMenu_about", 1);
          }
        }
    
        // --- EINSTELLUNGEN & NEUSTART (ANGEPASST) ---
        if (this.abouts.length == 0 && (this.showNormalPrefs || typeof(ToolRstartMod) != "undefined")) {
          menupopup.appendChild(document.createXULElement('menuseparator'));
        }
        if (this.showNormalPrefs) {
          menupopup.appendChild(this.createME(
            "menuitem", "Einstellungen",
            function() { try { openOptionsDialog(); } catch(e) { openPreferences(); } },
            "uProfMenu_prefs", 0
          ));
        }
        if (this.enableRestart) {
          menupopup.appendChild(this.createME(
            "menuitem", "Neustart",
            function() {
              Services.appinfo.invalidateCachesOnRestart();
              Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit, 0);
            },
            0, 0
          ));
        }
      },
    
      // --- HILFSFUNKTIONEN (unchanged) ---
      getDirSep: function() {
        var osString = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS;
        var dirsep = "/";
        switch(osString) {
          case "WINNT": dirsep = "\\"; break;
          case "Linux": dirsep = "/"; break;
          case "Darwin": dirsep = "/"; break;
        }
        return dirsep;
      },
    /*
        // --- EDIT (unchanged) ---
      edit: function(OpenMode, Filename) {
        var Path = "";
        var dSep = this.getDirSep();
        switch (OpenMode) {
          case 0: Path = this.getPrefDirectoryPath("UChrm") + dSep + Filename; break;
          case 1: Path = this.getPrefDirectoryPath("ProfD") + dSep + Filename; break;
          case 2: Path = Filename; break;
          case 3: Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSS" + dSep + Filename; break;
          case 4: Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSWeb" + dSep + Filename; break;
          case 5: Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSShadow" + dSep + Filename; break;
        }
        this.launch(this.TextOpenExe, Path);
      },
    */
      // --- EDIT (changed by Mira) --- 
      edit: function(OpenMode, Filename) {
        var Path = "";
        var dSep = this.getDirSep();
    
        // --- Pfad-Handling für chrome/scripts/ ---
        if (Filename.includes("/") || Filename.includes("\\")) {
          Path = this.getPrefDirectoryPath("ProfD") + dSep + Filename;
        } else {
          // Original-Logik
          switch (OpenMode) {
            case 0: Path = this.getPrefDirectoryPath("UChrm") + dSep + Filename; break;
            case 1: Path = this.getPrefDirectoryPath("ProfD") + dSep + Filename; break;
            case 2: Path = Filename; break;
            case 3: Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSS" + dSep + Filename; break;
            case 4: Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSWeb" + dSep + Filename; break;
            case 5: Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSShadow" + dSep + Filename; break;
          }
        }
        this.launch(this.TextOpenExe, Path);
      },
    
      dirOpen: function(Path) {
        if (this.vFileManager.length != 0) {
          var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
          var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
          var args = [Path];
          file.initWithPath(this.vFileManager);
          process.init(file);
          process.run(false, args, args.length);
        } else {
          var dir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
          dir.initWithPath(Path);
          dir.launch();
        }
      },
    
      prefDirOpen: function(prefDir) {
        var Path = this.getPrefDirectoryPath(prefDir);
        this.dirOpen(Path);
      },
    
      getPrefDirectoryPath: function(str) {
        var file = Components.classes["@mozilla.org/file/directory_service;1"]
          .getService(Components.interfaces.nsIProperties)
          .get(str, Components.interfaces.nsIFile);
        if (str == 'CurProcD') file = file.parent;
        return file.path;
      },
    
      launch: function(RanPath, OpenPath) {
        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
        var proc = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
        var args = [OpenPath];
        file.initWithPath(RanPath);
        if (!file.exists()) {
          var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
          RanPath = pref.getCharPref("view_source.editor.path");
          file.initWithPath(RanPath);
        }
        proc.init(file);
        proc.run(false, args, args.length);
      },
    
      stringComparison: function(a, b) {
        a = a.toLowerCase().replace(/ä/g,"a").replace(/ö/g,"o").replace(/ü/g,"u").replace(/ß/g,"s");
        b = b.toLowerCase().replace(/ä/g,"a").replace(/ö/g,"o").replace(/ü/g,"u").replace(/ß/g,"s");
        return (a == b) ? 0 : (a > b) ? 1 : -1;
      },
    /*
      // --- GETSCRIPTS (unchanged) ---
      getScripts: function(iType) {
        let ucJsScripts = [];
        let extjs = /\.uc\.js$/i;
        let aFolder = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path);
        let files = aFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
        while (files.hasMoreElements()) {
          let file = files.getNext().QueryInterface(Ci.nsIFile);
          if (extjs.test(file.leafName)) ucJsScripts.push(file.leafName);
        }
        if (this.sortScripts) ucJsScripts.sort(this.stringComparison);
        if (iType == 0) {
          this.fillMenu("submenu-ucjs", "submenu-ucjs-items", "Meine Scripte", ucJsScripts, "uProfMenu_ucjs", 0);
        } else {
          var result = this.fillClipboardValue(ucJsScripts, []);
          Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString(result);
        }
      },
    */
      // --- GETSCRIPTS (changed by Mira) ---
      getScripts: function(iType) {
        let ucJsScripts = [];
        let extjs = /\.uc\.js$/i;
    
        // --- 1. Standard-UChrm-Ordner durchsuchen (ohne userChromeShadow.uc.js) ---
        let uchrmFolder = Services.dirsvc.get("UChrm", Ci.nsIFile);
        if (uchrmFolder.exists()) {
          let files = uchrmFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
          while (files.hasMoreElements()) {
            let file = files.getNext().QueryInterface(Ci.nsIFile);
            if (extjs.test(file.leafName) && file.leafName !== "userChromeShadow.uc.js") {
              ucJsScripts.push(file.leafName);
            }
          }
        }
    
        // --- 2. chrome/scripts-Ordner durchsuchen (falls vorhanden) ---
        let chromeScriptsFolder = Services.dirsvc.get("ProfD", Ci.nsIFile);
        chromeScriptsFolder.append("chrome");
        chromeScriptsFolder.append("scripts");
        if (chromeScriptsFolder.exists()) {
          let files = chromeScriptsFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
          while (files.hasMoreElements()) {
            let file = files.getNext().QueryInterface(Ci.nsIFile);
            if (extjs.test(file.leafName)) {
              ucJsScripts.push("chrome/scripts/" + file.leafName); // Pfad-Präfix für spätere Verarbeitung
            }
          }
        }
    
        if (this.sortScripts) ucJsScripts.sort(this.stringComparison);
    
        if (iType == 0) {
          this.fillMenu("submenu-ucjs", "submenu-ucjs-items", "Meine Scripte", ucJsScripts, "uProfMenu_ucjs", 0);
        } else {
          // Für Zwischenablage: Nur Dateinamen (ohne Pfad) verwenden
          var simpleNames = ucJsScripts.map(f => f.split(/[\\/]/).pop());
          var result = this.fillClipboardValue(simpleNames, []);
          Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString(result);
        }
      },
    
      // --- GETCSS (unchanged) ---
      getCss: function(iType) {
        let cssFiles = [];
        let extcss = /\.css$/i;
        let aFolder = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        if (iType == 3) aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path + this.getDirSep() + "CSS");
        else if (iType == 4) aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path + this.getDirSep() + "CSSWeb");
        else if (iType == 5) aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path + this.getDirSep() + "CSSShadow");
        let files = aFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
        while (files.hasMoreElements()) {
          let file = files.getNext().QueryInterface(Ci.nsIFile);
          if (extcss.test(file.leafName)) cssFiles.push(file.leafName);
        }
        if (this.sortScripts) cssFiles.sort(this.stringComparison);
        if (iType == 3) this.fillMenu("submenu-css", "submenu-css-items", "Meine CSS-Dateien", cssFiles, "uProfMenu_css", 3);
        else if (iType == 4) this.fillMenu("submenu-cssweb", "submenu-cssweb-items", "Meine CSSWeb-Dateien", cssFiles, "uProfMenu_css", 4);
        else if (iType == 5) this.fillMenu("submenu-CSSShadow", "submenu-CSSShadow-items", "Meine CSSShadow-Dateien", cssFiles, "uProfMenu_css", 5);
      },
    
      // --- FILLMENU (ANGEPASST: Closure-Problem gelöst + Event-Handler korrigiert) ---
      fillMenu: function(whichsubmenu, whichsubmenuitems, strlabel, scriptArray, sClass, sTyp) {
        var e = document.getElementById(whichsubmenu);
        e.setAttribute('label', strlabel + ' (' + scriptArray.length + ')');
        var popup = document.getElementById(whichsubmenuitems);
        while (popup.hasChildNodes()) popup.removeChild(popup.firstChild);
    
        var uProfMenu = this; // Für Closure
        for (var i = scriptArray.length - 1; i > -1; i--) {
          (function(index) {
            var fileName = scriptArray[index];
            var mitem;
            /*
            if (sTyp == 0) {
              mitem = uProfMenu.createME("menuitem", fileName, null, sClass, 0);
              mitem.addEventListener('command', function() {
                uProfMenu.edit(0, fileName);
              }, true);
              mitem.addEventListener('click', function(event) {
                uProfMenu.openAtGithub(event, fileName);
              }, true);
              mitem.setAttribute("tooltiptext", "Linksklick: Bearbeiten,\nMittelklick: https://github.com/.../" + uProfMenu.cleanFileName(fileName) + " öffnen,\nRechtsklick: Suche auf GitHub");
            }
            */
            // Korrektur durch Mira
            if (sTyp == 0) {
              mitem = uProfMenu.createME("menuitem", fileName, null, sClass, 0);
              // Extrahiere Dateinamen für Anzeige (z. B. "chrome/scripts/test.uc.js" → "test.uc.js")
              var displayName = fileName.split(/[\\/]/).pop();
              mitem.setAttribute('label', displayName);
              mitem.addEventListener('command', function() {
                uProfMenu.edit(0, fileName); // Original-Pfad (mit Präfix) an edit() übergeben
              }, true);
              mitem.addEventListener('click', function(event) {
                uProfMenu.openAtGithub(event, displayName);
              }, true);
              mitem.setAttribute("tooltiptext", "Linksklick: Bearbeiten,\nMittelklick: https://github.com/.../" + uProfMenu.cleanFileName(displayName) + " öffnen,\nRechtsklick: Suche auf GitHub");
            }
            // Korrektur ENDE
            else if (sTyp == 1) {
              mitem = uProfMenu.createME("menuitem", fileName, function() {
                openTrustedLinkIn(fileName, 'tab');
              }, sClass, 0);
            }
            else if (sTyp == 3) {
              mitem = uProfMenu.createME("menuitem", fileName, function() {
                uProfMenu.edit(3, fileName);
              }, sClass, 0);
            }
            else if (sTyp == 4) {
              mitem = uProfMenu.createME("menuitem", fileName, function() {
                uProfMenu.edit(4, fileName);
              }, sClass, 0);
            }
            else if (sTyp == 5) {
              mitem = uProfMenu.createME("menuitem", fileName, function() {
                uProfMenu.edit(5, fileName);
              }, sClass, 0);
            }
            popup.insertBefore(mitem, popup.firstChild);
          })(i);
        }
      },
    
      // --- FILLCLIPBOARDVALUE (unchanged) ---
      fillClipboardValue: function(sArray, xArray) {
        var retValue;
        var s = sArray.length;
        var x = xArray.length;
        switch(this.enableScriptsToClip) {
          case 1:
            retValue = "userChromeJS/uc.js ("+s+"):\n------------------------\n"+sArray.join("\n")+"\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------\n"+xArray.join("\n");
            break;
          default:
            retValue = "userChromeJS/uc.js ("+s+"):\n------------------------";
            for (var i = 0; i < s; i++) {
              j = i + 1;
              retValue = retValue + "\n" + j + ". " + sArray[i];
            }
            retValue = retValue + "\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------";
            if (this.enableScriptsToClip == 2) s = 0;
            for (var i = 0; i < x; i++) {
              j = i + s + 1;
              retValue = retValue + "\n" + j + ". " + xArray[i];
            }
            break;
        }
        return retValue;
      },
    
      // --- CREATEME (ANGEPASST: sCommand als Funktion) ---
      createME: function(sTyp, sLabel, sCommand, sClass, sId) {
        const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
        var m = document.createElementNS(XUL_NS, sTyp);
        switch (sTyp) {
          case "menuitem":
            m.setAttribute('label', sLabel);
            m.setAttribute('class', sClass);
            if (sCommand && typeof sCommand === 'function') {
              m.addEventListener('command', sCommand, true);
            }
            break;
          case "menu":
            m.setAttribute('label', sLabel);
            m.setAttribute('id', sId);
            break;
          case "menupopup":
            m.setAttribute('id', sId);
            break;
        }
        return m;
      },
    
      // --- OPENATGITHUB (unchanged) ---
      openAtGithub: function(e, sScript) {
        if (e.button == 1) {
          var sUrl = "https://github.com/ardiman/userChrome.js/tree/master/" + this.cleanFileName(sScript);
          openWebLinkIn(sUrl, 'tab');
        }
        if (e.button == 2) {
          e.preventDefault();
          var sUrl = "https://github.com/search?langOverride=&language=&q=" + sScript + "&repo=&start_value=1&type=Code";
          openWebLinkIn(sUrl, 'tab');
        }
      },
    
      // --- CLEANFILENAME (unchanged) ---
      cleanFileName: function(sName) {
        sName = sName.toLowerCase();
        var regs = [/\.uc\.js$/, /\.uc\.xul$/, /^ucjs_/, /_\d.+/, /_fx\d+/, /[-+\.]/g, /_v\d+/];
        for (var i = 0; i < regs.length; i++) {
          sName = sName.replace(regs[i], "");
        }
        return sName;
      }
    };
    
    // Initialisierung
    uProfMenu.init();
    Alles anzeigen
  • extra_config_menu.uc.js > ohne security.allow_unsafe_dangerous_privileged_evil_eval auf false

    • Mira_Belle
    • 10. August 2026 um 22:44
    Zitat von Endor

    Habe jetzt Mira_Belles Version genommen.

    Hau.
    Du hast entschieden,
    aber woran hast Du es festgemacht?

  • 1 Script funktioniert nicht mehr und ich weiss nicht, welches es von diesen 2 (Zusatzleisten) ist.

    • Mira_Belle
    • 10. August 2026 um 22:03
    Zitat von .DeJaVu

    Aufpassen, bitte keine Blanko-Ausnahme bescheinigen.

    Sollte auch keine sein!
    Die bezog sich auf die Hilfe, die benötigt wird, wenn jemand doch Probleme hat das aktuelle Skript
    zu konfigurieren.

  • extra_config_menu.uc.js > ohne security.allow_unsafe_dangerous_privileged_evil_eval auf false

    • Mira_Belle
    • 10. August 2026 um 15:11
    Zitat von FuchsFan

    Das War auch der Fehler, nun funktioniert es ohne. :thumbup:

    Schön,
    nun entscheidet, welches Skript weiter gepflegt werden soll.
    Denn wir sollten nur eines von beiden weiter pflegen und Endor sollte DAS dann "sichern".

  • extra_config_menu.uc.js > ohne security.allow_unsafe_dangerous_privileged_evil_eval auf false

    • Mira_Belle
    • 10. August 2026 um 14:59

    2002Andreas Alles gut!

    Da bei mir eben kein Fehler ausgeworfen wird,
    kannst Du bitte mal das Skript testen?

    JavaScript
    /*
    // ==UserScript==
    // @name           extras_config_menu.uc.js
    // @compatibility  Firefox 153*.*
    // @include        main
    // @version        1.0.20260810
    // @edit           @aborix 7/21 CSS Dateien als Untermenü eingefügt
    // @edit           @2002Andreas 8/21 Shadow CSS Dateien als Untermenü + Ordner eingefügt
    // @edit           @BrokenHeart 1/25 Anpass. wg. Änderung der Sicherheitsrichtlinien bei 'inlineEvents'
    // @edit           @Mira 8/26 Anpassung für security.allow_unsafe_dangerous_privileged_evil_eval = false
    // ==/UserScript==
    */
    
    var uProfMenu = {
      // --- KONFIGURATION (unchanged) ---
      TextOpenExe: 'C:\\Program Files\\Notepad++\\notepad++.exe',
      vFileManager: '',
      warpmenuto: 'helpMenu',
      sortScripts: 0,
      gmOrdner: 0,
      cssOrdner: 1,
      abouts: ['about:about','about:addons','about:cache','about:config','about:crashes','about:downloads','about:home','about:logins','about:memory','about:support','about:preferences','about:performance','about:profiles'],
      showNormalPrefs: 1,
      enableScriptsToClip: 2,
      enableRestart: 0,
    
      // --- INIT (ANGEPASST) ---
      init: function() {
        if (this.warpmenuto.toLowerCase() == 'menu') {
          var zielmenu = document.getElementById('menu_ToolsPopup');
          if (zielmenu == null) {
            userChrome.log("extras_config_menu.uc.js findet Zielmenue nicht, evtl. weil ein anderes Fenster als das Hauptfenster geoeffnet wurde.");
            return;
          }
          var menu = zielmenu.appendChild(this.createME("menu", "Config Men\u00FC", null, 0, "ExtraConfigMenu"));
          menu.setAttribute("class", "menu-iconic");
          // Ersetze ondblclick durch addEventListener
          menu.addEventListener('dblclick', function() {
            openTrustedLinkIn('about:config', 'tab');
          }, true);
        } else {
          if (window.__SSi == "window0") {
            CustomizableUI.createWidget({
              id: "ExtraConfigMenu-button",
              defaultArea: CustomizableUI.AREA_NAVBAR,
              label: "Extra Config Menü",
              tooltiptext: "Extra Config Menü\nRechtsklick öffnet about:config"
            });
          }
          var menu = document.getElementById("ExtraConfigMenu-button");
    
          // KORREKTUR:
          if (!menu) {
            return;
          }
    
          menu.setAttribute("type", "menu");
          menu.addEventListener('click', function(event) {
            if (event.button == 2 && !this.open) {
              openTrustedLinkIn("about:config", "tab");
              event.preventDefault();
            }
          }, true);
        }
    
        // CSS-Styles (unchanged)
        var css = " \
          #ExtraConfigMenu, #ExtraConfigMenu-button { \
            list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnElEQVR4Xm2RzYtbZRSHn/fr3pvJzTB3qiNM2k2pMBUGhEHaqsUqdeFGQalCobgREaFu/B/cqCtxVSjoQhBEQRBmIfWDKgNGJUPt0Nhah9JJ4iSd5E6+bu5972tAO4SS5/DjXZ1znsMrNiq1eikMQqYYJCmjxNH5+zdW777L0J5KKl9VPmnf+ut9KWkwhbheuzNcOVYOmGKc5iRO0r1ykeXCx0h7kt4fC3z5wfqbQnAJwQHa5S7jAZSRuJ0mkf81cheobhBXZa+ri1uptQjHAZoZCEC1PiPgDuwxCfwerBU7b73zXn//3usCcdt4HkZ7SGZg431U51NUCgwlO3cV/bVXhR/6p9ut+nP9QYeNn7/n8qUPZxvQ/Q6VVWHk4ZqWRvlJjpx9hcGfW2wO95N2q8m3618A2WwDt/0RplSAXsBed57eyossHl5GYdHacG3zGpADM06wjQ1UUIN+CLHPvfAxojPnKLiE+bDE1R9+5GatAmgPeGCAteQ7l5GBhGSyuROyd/gFouUyWkqEErR2mwXAAA8BRS0AgMQBjSra30ZkEeDzz9Dn4ZcvMO51SMcJcTdGChmA0ABA6cAgzyG3I8jLEBylV4fWoaeIc0V7t0Uv7pFbC+CA+28mp/8+SwXKnMVmz1O9HpE+eobMZdjcoY1GIHD/NwIdoH1fBaNguzlg88pVyoUi4vTbFI8eJxsNAIfSkrliESllH/L0v0jktNNomFGv1TFrL3Fo9QSMR3jaEEXzLC09gjaKp595No0WjyCEB4zRclICUMDxtRMce/wJ1MIi2SglXShhfI/cOjxPoZRmbq4gXzt/gVrtBrdvbiG+Wf+p/mvll1BpiVAGhCDPxuAUDotz4HKHlIJON6bRbL4hhPjcMx5mkn8BBLEUrsVZbq0AAAAASUVORK5CYII=);  \
            margin-top: 0px !important; \
            opacity: 1 !important; \
          } \
          #ExtraConfigMenu-button > dropmarker, #ExtraConfigMenu-button > hbox > .toolbarbutton-menu-dropmarker { \
            display: none !important; \
          }";
        var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
        var uri = makeURI('data:text/css;charset=UTF-8,' + encodeURIComponent(css));
        sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    
        // Menü-Popup erstellen
        var menupopup = menu.appendChild(this.createME("menupopup", null, null, 0, "ExtraConfigMenu-popup"));
    
        // Event-Listener für popupshowing (unchanged, aber sicher)
        menu.addEventListener('popupshowing', function(event) {
          uProfMenu.getScripts(0);
          uProfMenu.getCss(3);
          uProfMenu.getCss(4);
          uProfMenu.getCss(5);
        }, true);
    
        // --- UNTERMENÜS (unchanged) ---
        var submenu = menupopup.appendChild(this.createME("menu", "Meine Scripte", null, 0, "submenu-ucjs"));
        var submenupopup = submenu.appendChild(this.createME("menupopup", null, null, 0, "submenu-ucjs-items"));
        var submenu = menupopup.appendChild(this.createME("menu", "css", null, 0, "submenu-css"));
        var submenupopup = submenu.appendChild(this.createME("menupopup", null, null, 0, "submenu-css-items"));
        var submenu = menupopup.appendChild(this.createME("menu", "CSSShadow", null, 0, "submenu-CSSShadow"));
        var submenupopup = submenu.appendChild(this.createME("menupopup", null, null, 0, "submenu-CSSShadow-items"));
        var submenu = menupopup.appendChild(this.createME("menu", "cssweb", null, 0, "submenu-cssweb"));
        var submenupopup = submenu.appendChild(this.createME("menupopup", null, null, 0, "submenu-cssweb-items"));
    
        // Skriptliste in Zwischenablage (ANGEPASST: sCommand als Funktion)
        if (this.enableScriptsToClip) {
          menupopup.appendChild(this.createME(
            "menuitem",
            "Skriptliste in Zwischenablage",
            function() { uProfMenu.getScripts(1); },
            "uProfMenu_clipboard",
            0
          ));
        }
    
        menupopup.appendChild(document.createXULElement('menuseparator'));
    
        // --- KONFIGDATEIEN (ANGEPASST: sCommand als Funktion) ---
        menupopup.appendChild(this.createME(
          "menuitem", "Bild Url",
          function() { uProfMenu.edit(0, 'Bild Url.css'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "config Einträge.css",
          function() { uProfMenu.edit(0, 'config Einträge.css'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "userChrome.css",
          function() { uProfMenu.edit(0, 'userChrome.css'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "userChromeShadow.css",
          function() { uProfMenu.edit(0, 'userChromeShadow.css'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "userContent.css",
          function() { uProfMenu.edit(0, 'userContent.css'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "userChrome.js",
          function() { uProfMenu.edit(0, 'userChrome.js'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "prefs.js",
          function() { uProfMenu.edit(1, 'prefs.js'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "user.js",
          function() { uProfMenu.edit(1, 'user.js'); },
          "uProfMenu_edit", 0
        ));
    
        // --- ORDNER (ANGEPASST: sCommand als Funktion) ---
        menupopup.appendChild(document.createXULElement('menuseparator'));
        switch (this.gmOrdner) {
          case 1:
            menupopup.appendChild(this.createME(
              "menuitem", "GM-skripty",
              function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD') + uProfMenu.getDirSep() + 'gm_scripts'); },
              "uProfMenu_folder", 0
            ));
            break;
          case 2:
            menupopup.appendChild(this.createME(
              "menuitem", "USL-skripty",
              function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm') + uProfMenu.getDirSep() + 'UserScriptLoader'); },
              "uProfMenu_folder", 0
            ));
            break;
          case 3:
            menupopup.appendChild(this.createME(
              "menuitem", "Skripty Scriptish",
              function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD') + uProfMenu.getDirSep() + 'scriptish_scripts'); },
              "uProfMenu_folder", 0
            ));
            break;
        }
    
        menupopup.appendChild(this.createME(
          "menuitem", "CSS-Ordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm') + uProfMenu.getDirSep() + 'css'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "CSSShadow-Ordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm') + uProfMenu.getDirSep() + 'CSSShadow'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "CSSWeb-Ordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm') + uProfMenu.getDirSep() + 'CSSWeb'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Chromeordner",
          function() { uProfMenu.prefDirOpen('UChrm'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Profilordner",
          function() { uProfMenu.prefDirOpen('ProfD'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Icons-Ordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm') + uProfMenu.getDirSep() + 'Icons'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Installationsordner",
          function() { uProfMenu.prefDirOpen('CurProcD'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Addonordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD') + uProfMenu.getDirSep() + 'extensions'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Startup-Cacheordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfLD') + uProfMenu.getDirSep() + 'startupCache'); },
          "uProfMenu_folder", 0
        ));
    
        // --- ABOUT-SEITEN (ANGEPASST: Closure-Problem gelöst) ---
        if (this.abouts.length > 0) {
          menupopup.appendChild(document.createXULElement('menuseparator'));
          if (this.abouts[0] == '0') {
            for (var i = 1; i < this.abouts.length; i++) {
              (function(index) {
                var about = uProfMenu.abouts[index];
                menupopup.appendChild(uProfMenu.createME(
                  "menuitem", about,
                  function() { openTrustedLinkIn(about, 'tab'); },
                  "uProfMenu_about", 0
                ));
              })(i);
            }
          } else {
            var submenu = menupopup.appendChild(this.createME("menu", "uc.js", null, 0, "submenu-about"));
            var submenupopup = submenu.appendChild(this.createME("menupopup", null, null, 0, "submenu-about-items"));
            this.fillMenu("submenu-about", "submenu-about-items", "about:", this.abouts, "uProfMenu_about", 1);
          }
        }
    
        // --- EINSTELLUNGEN & NEUSTART (ANGEPASST) ---
        if (this.abouts.length == 0 && (this.showNormalPrefs || typeof(ToolRstartMod) != "undefined")) {
          menupopup.appendChild(document.createXULElement('menuseparator'));
        }
        if (this.showNormalPrefs) {
          menupopup.appendChild(this.createME(
            "menuitem", "Einstellungen",
            function() { try { openOptionsDialog(); } catch(e) { openPreferences(); } },
            "uProfMenu_prefs", 0
          ));
        }
        if (this.enableRestart) {
          menupopup.appendChild(this.createME(
            "menuitem", "Neustart",
            function() {
              Services.appinfo.invalidateCachesOnRestart();
              Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit, 0);
            },
            0, 0
          ));
        }
      },
    
      // --- HILFSFUNKTIONEN (unchanged) ---
      getDirSep: function() {
        var osString = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS;
        var dirsep = "/";
        switch(osString) {
          case "WINNT": dirsep = "\\"; break;
          case "Linux": dirsep = "/"; break;
          case "Darwin": dirsep = "/"; break;
        }
        return dirsep;
      },
    
      edit: function(OpenMode, Filename) {
        var Path = "";
        var dSep = this.getDirSep();
        switch (OpenMode) {
          case 0: Path = this.getPrefDirectoryPath("UChrm") + dSep + Filename; break;
          case 1: Path = this.getPrefDirectoryPath("ProfD") + dSep + Filename; break;
          case 2: Path = Filename; break;
          case 3: Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSS" + dSep + Filename; break;
          case 4: Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSWeb" + dSep + Filename; break;
          case 5: Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSShadow" + dSep + Filename; break;
        }
        this.launch(this.TextOpenExe, Path);
      },
    
      dirOpen: function(Path) {
        if (this.vFileManager.length != 0) {
          var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
          var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
          var args = [Path];
          file.initWithPath(this.vFileManager);
          process.init(file);
          process.run(false, args, args.length);
        } else {
          var dir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
          dir.initWithPath(Path);
          dir.launch();
        }
      },
    
      prefDirOpen: function(prefDir) {
        var Path = this.getPrefDirectoryPath(prefDir);
        this.dirOpen(Path);
      },
    
      getPrefDirectoryPath: function(str) {
        var file = Components.classes["@mozilla.org/file/directory_service;1"]
          .getService(Components.interfaces.nsIProperties)
          .get(str, Components.interfaces.nsIFile);
        if (str == 'CurProcD') file = file.parent;
        return file.path;
      },
    
      launch: function(RanPath, OpenPath) {
        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
        var proc = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
        var args = [OpenPath];
        file.initWithPath(RanPath);
        if (!file.exists()) {
          var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
          RanPath = pref.getCharPref("view_source.editor.path");
          file.initWithPath(RanPath);
        }
        proc.init(file);
        proc.run(false, args, args.length);
      },
    
      stringComparison: function(a, b) {
        a = a.toLowerCase().replace(/ä/g,"a").replace(/ö/g,"o").replace(/ü/g,"u").replace(/ß/g,"s");
        b = b.toLowerCase().replace(/ä/g,"a").replace(/ö/g,"o").replace(/ü/g,"u").replace(/ß/g,"s");
        return (a == b) ? 0 : (a > b) ? 1 : -1;
      },
    
      // --- GETSCRIPTS (unchanged) ---
      getScripts: function(iType) {
        let ucJsScripts = [];
        let extjs = /\.uc\.js$/i;
        let aFolder = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path);
        let files = aFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
        while (files.hasMoreElements()) {
          let file = files.getNext().QueryInterface(Ci.nsIFile);
          if (extjs.test(file.leafName)) ucJsScripts.push(file.leafName);
        }
        if (this.sortScripts) ucJsScripts.sort(this.stringComparison);
        if (iType == 0) {
          this.fillMenu("submenu-ucjs", "submenu-ucjs-items", "Meine Scripte", ucJsScripts, "uProfMenu_ucjs", 0);
        } else {
          var result = this.fillClipboardValue(ucJsScripts, []);
          Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString(result);
        }
      },
    
      // --- GETCSS (unchanged) ---
      getCss: function(iType) {
        let cssFiles = [];
        let extcss = /\.css$/i;
        let aFolder = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        if (iType == 3) aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path + this.getDirSep() + "CSS");
        else if (iType == 4) aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path + this.getDirSep() + "CSSWeb");
        else if (iType == 5) aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path + this.getDirSep() + "CSSShadow");
        let files = aFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
        while (files.hasMoreElements()) {
          let file = files.getNext().QueryInterface(Ci.nsIFile);
          if (extcss.test(file.leafName)) cssFiles.push(file.leafName);
        }
        if (this.sortScripts) cssFiles.sort(this.stringComparison);
        if (iType == 3) this.fillMenu("submenu-css", "submenu-css-items", "Meine CSS-Dateien", cssFiles, "uProfMenu_css", 3);
        else if (iType == 4) this.fillMenu("submenu-cssweb", "submenu-cssweb-items", "Meine CSSWeb-Dateien", cssFiles, "uProfMenu_css", 4);
        else if (iType == 5) this.fillMenu("submenu-CSSShadow", "submenu-CSSShadow-items", "Meine CSSShadow-Dateien", cssFiles, "uProfMenu_css", 5);
      },
    
      // --- FILLMENU (ANGEPASST: Closure-Problem gelöst + Event-Handler korrigiert) ---
      fillMenu: function(whichsubmenu, whichsubmenuitems, strlabel, scriptArray, sClass, sTyp) {
        var e = document.getElementById(whichsubmenu);
        e.setAttribute('label', strlabel + ' (' + scriptArray.length + ')');
        var popup = document.getElementById(whichsubmenuitems);
        while (popup.hasChildNodes()) popup.removeChild(popup.firstChild);
    
        var uProfMenu = this; // Für Closure
        for (var i = scriptArray.length - 1; i > -1; i--) {
          (function(index) {
            var fileName = scriptArray[index];
            var mitem;
            if (sTyp == 0) {
              mitem = uProfMenu.createME("menuitem", fileName, null, sClass, 0);
              mitem.addEventListener('command', function() {
                uProfMenu.edit(0, fileName);
              }, true);
              mitem.addEventListener('click', function(event) {
                uProfMenu.openAtGithub(event, fileName);
              }, true);
              mitem.setAttribute("tooltiptext", "Linksklick: Bearbeiten,\nMittelklick: https://github.com/.../" + uProfMenu.cleanFileName(fileName) + " öffnen,\nRechtsklick: Suche auf GitHub");
            }
            else if (sTyp == 1) {
              mitem = uProfMenu.createME("menuitem", fileName, function() {
                openTrustedLinkIn(fileName, 'tab');
              }, sClass, 0);
            }
            else if (sTyp == 3) {
              mitem = uProfMenu.createME("menuitem", fileName, function() {
                uProfMenu.edit(3, fileName);
              }, sClass, 0);
            }
            else if (sTyp == 4) {
              mitem = uProfMenu.createME("menuitem", fileName, function() {
                uProfMenu.edit(4, fileName);
              }, sClass, 0);
            }
            else if (sTyp == 5) {
              mitem = uProfMenu.createME("menuitem", fileName, function() {
                uProfMenu.edit(5, fileName);
              }, sClass, 0);
            }
            popup.insertBefore(mitem, popup.firstChild);
          })(i);
        }
      },
    
      // --- FILLCLIPBOARDVALUE (unchanged) ---
      fillClipboardValue: function(sArray, xArray) {
        var retValue;
        var s = sArray.length;
        var x = xArray.length;
        switch(this.enableScriptsToClip) {
          case 1:
            retValue = "userChromeJS/uc.js ("+s+"):\n------------------------\n"+sArray.join("\n")+"\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------\n"+xArray.join("\n");
            break;
          default:
            retValue = "userChromeJS/uc.js ("+s+"):\n------------------------";
            for (var i = 0; i < s; i++) {
              j = i + 1;
              retValue = retValue + "\n" + j + ". " + sArray[i];
            }
            retValue = retValue + "\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------";
            if (this.enableScriptsToClip == 2) s = 0;
            for (var i = 0; i < x; i++) {
              j = i + s + 1;
              retValue = retValue + "\n" + j + ". " + xArray[i];
            }
            break;
        }
        return retValue;
      },
    
      // --- CREATEME (ANGEPASST: sCommand als Funktion) ---
      createME: function(sTyp, sLabel, sCommand, sClass, sId) {
        const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
        var m = document.createElementNS(XUL_NS, sTyp);
        switch (sTyp) {
          case "menuitem":
            m.setAttribute('label', sLabel);
            m.setAttribute('class', sClass);
            if (sCommand && typeof sCommand === 'function') {
              m.addEventListener('command', sCommand, true);
            }
            break;
          case "menu":
            m.setAttribute('label', sLabel);
            m.setAttribute('id', sId);
            break;
          case "menupopup":
            m.setAttribute('id', sId);
            break;
        }
        return m;
      },
    
      // --- OPENATGITHUB (unchanged) ---
      openAtGithub: function(e, sScript) {
        if (e.button == 1) {
          var sUrl = "https://github.com/ardiman/userChrome.js/tree/master/" + this.cleanFileName(sScript);
          openWebLinkIn(sUrl, 'tab');
        }
        if (e.button == 2) {
          e.preventDefault();
          var sUrl = "https://github.com/search?langOverride=&language=&q=" + sScript + "&repo=&start_value=1&type=Code";
          openWebLinkIn(sUrl, 'tab');
        }
      },
    
      // --- CLEANFILENAME (unchanged) ---
      cleanFileName: function(sName) {
        sName = sName.toLowerCase();
        var regs = [/\.uc\.js$/, /\.uc\.xul$/, /^ucjs_/, /_\d.+/, /_fx\d+/, /[-+\.]/g, /_v\d+/];
        for (var i = 0; i < regs.length; i++) {
          sName = sName.replace(regs[i], "");
        }
        return sName;
      }
    };
    
    // Initialisierung
    uProfMenu.init();
    Alles anzeigen

    Wie Du leicht erkennen kannst habe ich eine kleine Korrektur in Zeile 52 eingebaut.
    Ob es funktioniert?

  • extra_config_menu.uc.js > ohne security.allow_unsafe_dangerous_privileged_evil_eval auf false

    • Mira_Belle
    • 10. August 2026 um 14:47
    Zitat von 2002Andreas

    Hier schon:

    Weder in der aktuellen Version (153) noch in der aktuellen Nightly!

  • extra_config_menu.uc.js > ohne security.allow_unsafe_dangerous_privileged_evil_eval auf false

    • Mira_Belle
    • 10. August 2026 um 14:17

    OK, ich komme etwas spät, FuchsFan war ja fleisig und ist mir zuvorgekommen.
    Hatte zu tun, und konnte das Skript weder groß testen, noch wollte ich es ungetestet auf die Menschheit loslassen.

    Ein ganz kurzer Test mit Firefox v.153.0.3 schmiss keine Fehlermeldung raus.

    Wäre schön, wenn es noch einmal von jemandem getestet werden könnte
    und entscheidet dann, ob diese oder FuchsFans Version weiter gepflegt werden soll.
    Auch einen Codevergleich habe ich jetzt nicht durchgeführt, die Versionen könnten ja identisch sein.
    Auf jeden Fall ist es eine direkte Überarbeitung des Skripts von Github.
    Den Header musste ich eben schnell, der besseren Unterscheidung wegen, noch mal ändern!

    JavaScript
    /*
    // ==UserScript==
    // @name           extras_config_menu.uc.js
    // @compatibility  Firefox 153*.*
    // @include        main
    // @version        1.0.20260810
    // @edit           @aborix 7/21 CSS Dateien als Untermenü eingefügt
    // @edit           @2002Andreas 8/21 Shadow CSS Dateien als Untermenü + Ordner eingefügt
    // @edit           @BrokenHeart 1/25 Anpass. wg. Änderung der Sicherheitsrichtlinien bei 'inlineEvents'
    // @edit           @Mira 8/26 Anpassung für security.allow_unsafe_dangerous_privileged_evil_eval = false
    // ==/UserScript==
    */
    
    var uProfMenu = {
      // --- KONFIGURATION (unchanged) ---
      TextOpenExe: 'C:\\Program Files\\Notepad++\\notepad++.exe',
      vFileManager: '',
      warpmenuto: 'helpMenu',
      sortScripts: 0,
      gmOrdner: 0,
      cssOrdner: 1,
      abouts: ['about:about','about:addons','about:cache','about:config','about:crashes','about:downloads','about:home','about:logins','about:memory','about:support','about:preferences','about:performance','about:profiles'],
      showNormalPrefs: 1,
      enableScriptsToClip: 2,
      enableRestart: 0,
    
      // --- INIT (ANGEPASST) ---
      init: function() {
        if (this.warpmenuto.toLowerCase() == 'menu') {
          var zielmenu = document.getElementById('menu_ToolsPopup');
          if (zielmenu == null) {
            userChrome.log("extras_config_menu.uc.js findet Zielmenue nicht, evtl. weil ein anderes Fenster als das Hauptfenster geoeffnet wurde.");
            return;
          }
          var menu = zielmenu.appendChild(this.createME("menu", "Config Men\u00FC", null, 0, "ExtraConfigMenu"));
          menu.setAttribute("class", "menu-iconic");
          // Ersetze ondblclick durch addEventListener
          menu.addEventListener('dblclick', function() {
            openTrustedLinkIn('about:config', 'tab');
          }, true);
        } else {
          if (window.__SSi == "window0") {
            CustomizableUI.createWidget({
              id: "ExtraConfigMenu-button",
              defaultArea: CustomizableUI.AREA_NAVBAR,
              label: "Extra Config Menü",
              tooltiptext: "Extra Config Menü\nRechtsklick öffnet about:config"
            });
          }
          var menu = document.getElementById("ExtraConfigMenu-button");
          menu.setAttribute("type", "menu");
          menu.addEventListener('click', function(event) {
            if (event.button == 2 && !this.open) {
              openTrustedLinkIn("about:config", "tab");
              event.preventDefault();
            }
          }, true);
        }
    
        // CSS-Styles (unchanged)
        var css = " \
          #ExtraConfigMenu, #ExtraConfigMenu-button { \
            list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnElEQVR4Xm2RzYtbZRSHn/fr3pvJzTB3qiNM2k2pMBUGhEHaqsUqdeFGQalCobgREaFu/B/cqCtxVSjoQhBEQRBmIfWDKgNGJUPt0Nhah9JJ4iSd5E6+bu5972tAO4SS5/DjXZ1znsMrNiq1eikMQqYYJCmjxNH5+zdW777L0J5KKl9VPmnf+ut9KWkwhbheuzNcOVYOmGKc5iRO0r1ykeXCx0h7kt4fC3z5wfqbQnAJwQHa5S7jAZSRuJ0mkf81cheobhBXZa+ri1uptQjHAZoZCEC1PiPgDuwxCfwerBU7b73zXn//3usCcdt4HkZ7SGZg431U51NUCgwlO3cV/bVXhR/6p9ut+nP9QYeNn7/n8qUPZxvQ/Q6VVWHk4ZqWRvlJjpx9hcGfW2wO95N2q8m3618A2WwDt/0RplSAXsBed57eyossHl5GYdHacG3zGpADM06wjQ1UUIN+CLHPvfAxojPnKLiE+bDE1R9+5GatAmgPeGCAteQ7l5GBhGSyuROyd/gFouUyWkqEErR2mwXAAA8BRS0AgMQBjSra30ZkEeDzz9Dn4ZcvMO51SMcJcTdGChmA0ABA6cAgzyG3I8jLEBylV4fWoaeIc0V7t0Uv7pFbC+CA+28mp/8+SwXKnMVmz1O9HpE+eobMZdjcoY1GIHD/NwIdoH1fBaNguzlg88pVyoUi4vTbFI8eJxsNAIfSkrliESllH/L0v0jktNNomFGv1TFrL3Fo9QSMR3jaEEXzLC09gjaKp595No0WjyCEB4zRclICUMDxtRMce/wJ1MIi2SglXShhfI/cOjxPoZRmbq4gXzt/gVrtBrdvbiG+Wf+p/mvll1BpiVAGhCDPxuAUDotz4HKHlIJON6bRbL4hhPjcMx5mkn8BBLEUrsVZbq0AAAAASUVORK5CYII=);  \
            margin-top: 0px !important; \
            opacity: 1 !important; \
          } \
          #ExtraConfigMenu-button > dropmarker, #ExtraConfigMenu-button > hbox > .toolbarbutton-menu-dropmarker { \
            display: none !important; \
          }";
        var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
        var uri = makeURI('data:text/css;charset=UTF-8,' + encodeURIComponent(css));
        sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    
        // Menü-Popup erstellen
        var menupopup = menu.appendChild(this.createME("menupopup", null, null, 0, "ExtraConfigMenu-popup"));
    
        // Event-Listener für popupshowing (unchanged, aber sicher)
        menu.addEventListener('popupshowing', function(event) {
          uProfMenu.getScripts(0);
          uProfMenu.getCss(3);
          uProfMenu.getCss(4);
          uProfMenu.getCss(5);
        }, true);
    
        // --- UNTERMENÜS (unchanged) ---
        var submenu = menupopup.appendChild(this.createME("menu", "Meine Scripte", null, 0, "submenu-ucjs"));
        var submenupopup = submenu.appendChild(this.createME("menupopup", null, null, 0, "submenu-ucjs-items"));
        var submenu = menupopup.appendChild(this.createME("menu", "css", null, 0, "submenu-css"));
        var submenupopup = submenu.appendChild(this.createME("menupopup", null, null, 0, "submenu-css-items"));
        var submenu = menupopup.appendChild(this.createME("menu", "CSSShadow", null, 0, "submenu-CSSShadow"));
        var submenupopup = submenu.appendChild(this.createME("menupopup", null, null, 0, "submenu-CSSShadow-items"));
        var submenu = menupopup.appendChild(this.createME("menu", "cssweb", null, 0, "submenu-cssweb"));
        var submenupopup = submenu.appendChild(this.createME("menupopup", null, null, 0, "submenu-cssweb-items"));
    
        // Skriptliste in Zwischenablage (ANGEPASST: sCommand als Funktion)
        if (this.enableScriptsToClip) {
          menupopup.appendChild(this.createME(
            "menuitem",
            "Skriptliste in Zwischenablage",
            function() { uProfMenu.getScripts(1); },
            "uProfMenu_clipboard",
            0
          ));
        }
    
        menupopup.appendChild(document.createXULElement('menuseparator'));
    
        // --- KONFIGDATEIEN (ANGEPASST: sCommand als Funktion) ---
        menupopup.appendChild(this.createME(
          "menuitem", "Bild Url",
          function() { uProfMenu.edit(0, 'Bild Url.css'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "config Einträge.css",
          function() { uProfMenu.edit(0, 'config Einträge.css'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "userChrome.css",
          function() { uProfMenu.edit(0, 'userChrome.css'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "userChromeShadow.css",
          function() { uProfMenu.edit(0, 'userChromeShadow.css'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "userContent.css",
          function() { uProfMenu.edit(0, 'userContent.css'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "userChrome.js",
          function() { uProfMenu.edit(0, 'userChrome.js'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "prefs.js",
          function() { uProfMenu.edit(1, 'prefs.js'); },
          "uProfMenu_edit", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "user.js",
          function() { uProfMenu.edit(1, 'user.js'); },
          "uProfMenu_edit", 0
        ));
    
        // --- ORDNER (ANGEPASST: sCommand als Funktion) ---
        menupopup.appendChild(document.createXULElement('menuseparator'));
        switch (this.gmOrdner) {
          case 1:
            menupopup.appendChild(this.createME(
              "menuitem", "GM-skripty",
              function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD') + uProfMenu.getDirSep() + 'gm_scripts'); },
              "uProfMenu_folder", 0
            ));
            break;
          case 2:
            menupopup.appendChild(this.createME(
              "menuitem", "USL-skripty",
              function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm') + uProfMenu.getDirSep() + 'UserScriptLoader'); },
              "uProfMenu_folder", 0
            ));
            break;
          case 3:
            menupopup.appendChild(this.createME(
              "menuitem", "Skripty Scriptish",
              function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD') + uProfMenu.getDirSep() + 'scriptish_scripts'); },
              "uProfMenu_folder", 0
            ));
            break;
        }
    
        menupopup.appendChild(this.createME(
          "menuitem", "CSS-Ordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm') + uProfMenu.getDirSep() + 'css'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "CSSShadow-Ordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm') + uProfMenu.getDirSep() + 'CSSShadow'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "CSSWeb-Ordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm') + uProfMenu.getDirSep() + 'CSSWeb'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Chromeordner",
          function() { uProfMenu.prefDirOpen('UChrm'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Profilordner",
          function() { uProfMenu.prefDirOpen('ProfD'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Icons-Ordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm') + uProfMenu.getDirSep() + 'Icons'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Installationsordner",
          function() { uProfMenu.prefDirOpen('CurProcD'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Addonordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD') + uProfMenu.getDirSep() + 'extensions'); },
          "uProfMenu_folder", 0
        ));
        menupopup.appendChild(this.createME(
          "menuitem", "Startup-Cacheordner",
          function() { uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfLD') + uProfMenu.getDirSep() + 'startupCache'); },
          "uProfMenu_folder", 0
        ));
    
        // --- ABOUT-SEITEN (ANGEPASST: Closure-Problem gelöst) ---
        if (this.abouts.length > 0) {
          menupopup.appendChild(document.createXULElement('menuseparator'));
          if (this.abouts[0] == '0') {
            for (var i = 1; i < this.abouts.length; i++) {
              (function(index) {
                var about = uProfMenu.abouts[index];
                menupopup.appendChild(uProfMenu.createME(
                  "menuitem", about,
                  function() { openTrustedLinkIn(about, 'tab'); },
                  "uProfMenu_about", 0
                ));
              })(i);
            }
          } else {
            var submenu = menupopup.appendChild(this.createME("menu", "uc.js", null, 0, "submenu-about"));
            var submenupopup = submenu.appendChild(this.createME("menupopup", null, null, 0, "submenu-about-items"));
            this.fillMenu("submenu-about", "submenu-about-items", "about:", this.abouts, "uProfMenu_about", 1);
          }
        }
    
        // --- EINSTELLUNGEN & NEUSTART (ANGEPASST) ---
        if (this.abouts.length == 0 && (this.showNormalPrefs || typeof(ToolRstartMod) != "undefined")) {
          menupopup.appendChild(document.createXULElement('menuseparator'));
        }
        if (this.showNormalPrefs) {
          menupopup.appendChild(this.createME(
            "menuitem", "Einstellungen",
            function() { try { openOptionsDialog(); } catch(e) { openPreferences(); } },
            "uProfMenu_prefs", 0
          ));
        }
        if (this.enableRestart) {
          menupopup.appendChild(this.createME(
            "menuitem", "Neustart",
            function() {
              Services.appinfo.invalidateCachesOnRestart();
              Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit, 0);
            },
            0, 0
          ));
        }
      },
    
      // --- HILFSFUNKTIONEN (unchanged) ---
      getDirSep: function() {
        var osString = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS;
        var dirsep = "/";
        switch(osString) {
          case "WINNT": dirsep = "\\"; break;
          case "Linux": dirsep = "/"; break;
          case "Darwin": dirsep = "/"; break;
        }
        return dirsep;
      },
    
      edit: function(OpenMode, Filename) {
        var Path = "";
        var dSep = this.getDirSep();
        switch (OpenMode) {
          case 0: Path = this.getPrefDirectoryPath("UChrm") + dSep + Filename; break;
          case 1: Path = this.getPrefDirectoryPath("ProfD") + dSep + Filename; break;
          case 2: Path = Filename; break;
          case 3: Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSS" + dSep + Filename; break;
          case 4: Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSWeb" + dSep + Filename; break;
          case 5: Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSShadow" + dSep + Filename; break;
        }
        this.launch(this.TextOpenExe, Path);
      },
    
      dirOpen: function(Path) {
        if (this.vFileManager.length != 0) {
          var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
          var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
          var args = [Path];
          file.initWithPath(this.vFileManager);
          process.init(file);
          process.run(false, args, args.length);
        } else {
          var dir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
          dir.initWithPath(Path);
          dir.launch();
        }
      },
    
      prefDirOpen: function(prefDir) {
        var Path = this.getPrefDirectoryPath(prefDir);
        this.dirOpen(Path);
      },
    
      getPrefDirectoryPath: function(str) {
        var file = Components.classes["@mozilla.org/file/directory_service;1"]
          .getService(Components.interfaces.nsIProperties)
          .get(str, Components.interfaces.nsIFile);
        if (str == 'CurProcD') file = file.parent;
        return file.path;
      },
    
      launch: function(RanPath, OpenPath) {
        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
        var proc = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
        var args = [OpenPath];
        file.initWithPath(RanPath);
        if (!file.exists()) {
          var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
          RanPath = pref.getCharPref("view_source.editor.path");
          file.initWithPath(RanPath);
        }
        proc.init(file);
        proc.run(false, args, args.length);
      },
    
      stringComparison: function(a, b) {
        a = a.toLowerCase().replace(/ä/g,"a").replace(/ö/g,"o").replace(/ü/g,"u").replace(/ß/g,"s");
        b = b.toLowerCase().replace(/ä/g,"a").replace(/ö/g,"o").replace(/ü/g,"u").replace(/ß/g,"s");
        return (a == b) ? 0 : (a > b) ? 1 : -1;
      },
    
      // --- GETSCRIPTS (unchanged) ---
      getScripts: function(iType) {
        let ucJsScripts = [];
        let extjs = /\.uc\.js$/i;
        let aFolder = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path);
        let files = aFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
        while (files.hasMoreElements()) {
          let file = files.getNext().QueryInterface(Ci.nsIFile);
          if (extjs.test(file.leafName)) ucJsScripts.push(file.leafName);
        }
        if (this.sortScripts) ucJsScripts.sort(this.stringComparison);
        if (iType == 0) {
          this.fillMenu("submenu-ucjs", "submenu-ucjs-items", "Meine Scripte", ucJsScripts, "uProfMenu_ucjs", 0);
        } else {
          var result = this.fillClipboardValue(ucJsScripts, []);
          Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString(result);
        }
      },
    
      // --- GETCSS (unchanged) ---
      getCss: function(iType) {
        let cssFiles = [];
        let extcss = /\.css$/i;
        let aFolder = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        if (iType == 3) aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path + this.getDirSep() + "CSS");
        else if (iType == 4) aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path + this.getDirSep() + "CSSWeb");
        else if (iType == 5) aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path + this.getDirSep() + "CSSShadow");
        let files = aFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
        while (files.hasMoreElements()) {
          let file = files.getNext().QueryInterface(Ci.nsIFile);
          if (extcss.test(file.leafName)) cssFiles.push(file.leafName);
        }
        if (this.sortScripts) cssFiles.sort(this.stringComparison);
        if (iType == 3) this.fillMenu("submenu-css", "submenu-css-items", "Meine CSS-Dateien", cssFiles, "uProfMenu_css", 3);
        else if (iType == 4) this.fillMenu("submenu-cssweb", "submenu-cssweb-items", "Meine CSSWeb-Dateien", cssFiles, "uProfMenu_css", 4);
        else if (iType == 5) this.fillMenu("submenu-CSSShadow", "submenu-CSSShadow-items", "Meine CSSShadow-Dateien", cssFiles, "uProfMenu_css", 5);
      },
    
      // --- FILLMENU (ANGEPASST: Closure-Problem gelöst + Event-Handler korrigiert) ---
      fillMenu: function(whichsubmenu, whichsubmenuitems, strlabel, scriptArray, sClass, sTyp) {
        var e = document.getElementById(whichsubmenu);
        e.setAttribute('label', strlabel + ' (' + scriptArray.length + ')');
        var popup = document.getElementById(whichsubmenuitems);
        while (popup.hasChildNodes()) popup.removeChild(popup.firstChild);
    
        var uProfMenu = this; // Für Closure
        for (var i = scriptArray.length - 1; i > -1; i--) {
          (function(index) {
            var fileName = scriptArray[index];
            var mitem;
            if (sTyp == 0) {
              mitem = uProfMenu.createME("menuitem", fileName, null, sClass, 0);
              mitem.addEventListener('command', function() {
                uProfMenu.edit(0, fileName);
              }, true);
              mitem.addEventListener('click', function(event) {
                uProfMenu.openAtGithub(event, fileName);
              }, true);
              mitem.setAttribute("tooltiptext", "Linksklick: Bearbeiten,\nMittelklick: https://github.com/.../" + uProfMenu.cleanFileName(fileName) + " öffnen,\nRechtsklick: Suche auf GitHub");
            }
            else if (sTyp == 1) {
              mitem = uProfMenu.createME("menuitem", fileName, function() {
                openTrustedLinkIn(fileName, 'tab');
              }, sClass, 0);
            }
            else if (sTyp == 3) {
              mitem = uProfMenu.createME("menuitem", fileName, function() {
                uProfMenu.edit(3, fileName);
              }, sClass, 0);
            }
            else if (sTyp == 4) {
              mitem = uProfMenu.createME("menuitem", fileName, function() {
                uProfMenu.edit(4, fileName);
              }, sClass, 0);
            }
            else if (sTyp == 5) {
              mitem = uProfMenu.createME("menuitem", fileName, function() {
                uProfMenu.edit(5, fileName);
              }, sClass, 0);
            }
            popup.insertBefore(mitem, popup.firstChild);
          })(i);
        }
      },
    
      // --- FILLCLIPBOARDVALUE (unchanged) ---
      fillClipboardValue: function(sArray, xArray) {
        var retValue;
        var s = sArray.length;
        var x = xArray.length;
        switch(this.enableScriptsToClip) {
          case 1:
            retValue = "userChromeJS/uc.js ("+s+"):\n------------------------\n"+sArray.join("\n")+"\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------\n"+xArray.join("\n");
            break;
          default:
            retValue = "userChromeJS/uc.js ("+s+"):\n------------------------";
            for (var i = 0; i < s; i++) {
              j = i + 1;
              retValue = retValue + "\n" + j + ". " + sArray[i];
            }
            retValue = retValue + "\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------";
            if (this.enableScriptsToClip == 2) s = 0;
            for (var i = 0; i < x; i++) {
              j = i + s + 1;
              retValue = retValue + "\n" + j + ". " + xArray[i];
            }
            break;
        }
        return retValue;
      },
    
      // --- CREATEME (ANGEPASST: sCommand als Funktion) ---
      createME: function(sTyp, sLabel, sCommand, sClass, sId) {
        const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
        var m = document.createElementNS(XUL_NS, sTyp);
        switch (sTyp) {
          case "menuitem":
            m.setAttribute('label', sLabel);
            m.setAttribute('class', sClass);
            if (sCommand && typeof sCommand === 'function') {
              m.addEventListener('command', sCommand, true);
            }
            break;
          case "menu":
            m.setAttribute('label', sLabel);
            m.setAttribute('id', sId);
            break;
          case "menupopup":
            m.setAttribute('id', sId);
            break;
        }
        return m;
      },
    
      // --- OPENATGITHUB (unchanged) ---
      openAtGithub: function(e, sScript) {
        if (e.button == 1) {
          var sUrl = "https://github.com/ardiman/userChrome.js/tree/master/" + this.cleanFileName(sScript);
          openWebLinkIn(sUrl, 'tab');
        }
        if (e.button == 2) {
          e.preventDefault();
          var sUrl = "https://github.com/search?langOverride=&language=&q=" + sScript + "&repo=&start_value=1&type=Code";
          openWebLinkIn(sUrl, 'tab');
        }
      },
    
      // --- CLEANFILENAME (unchanged) ---
      cleanFileName: function(sName) {
        sName = sName.toLowerCase();
        var regs = [/\.uc\.js$/, /\.uc\.xul$/, /^ucjs_/, /_\d.+/, /_fx\d+/, /[-+\.]/g, /_v\d+/];
        for (var i = 0; i < regs.length; i++) {
          sName = sName.replace(regs[i], "");
        }
        return sName;
      }
    };
    
    // Initialisierung
    uProfMenu.init();
    Alles anzeigen
  • extra_config_menu.uc.js > ohne security.allow_unsafe_dangerous_privileged_evil_eval auf false

    • Mira_Belle
    • 10. August 2026 um 13:53

    Wenn die Version aus #67 auf der letzten Version aus z.B #48 bzw.
    dem von Github (Endor), würde ich Vorschlagen, dass auch der Header von da genommen wird
    und einfach nur erweitert wird, z.B. so:

    JavaScript
    /*
    // ==UserScript==
    // @name           extras_config_menu.uc.js
    // @compatibility  Firefox 153*.* (tested up to 155+)
    // @include        main
    // @version        1.0.20260810
    // @edit           @aborix		7/21 CSS Dateien als Untermenü eingefügt 
    // @edit           @2002Andreas	8/21 Shadow CSS Dateien als Untermenü + Ordner eingefügt
    // @edit           @BrokenHeart	1/25 Anpass. wg. Änderung der Sicherheitsrichtlinien bei 'inlineEvents'
    // @edit           @FuchFan 	8/26 Eval-freie Version mit Toolbar-Button
    // ==/UserScript==
    */
    Alles anzeigen
  • extra_config_menu.uc.js > ohne security.allow_unsafe_dangerous_privileged_evil_eval auf false

    • Mira_Belle
    • 10. August 2026 um 12:13
    Zitat von Endor

    Funktioniert das Script ... bei Dir ... ?

    So generell, oder geht es nur um den Button?

    FuchsFan Noch habe ich Deine überarbeitete Version nicht ausprobiert,
    glaube Dir aber, dass sie funktioniert.
    Aber wäre es nicht besser, nur so ein Gedanke, das Original zu nehmen?
    Immerhin wird das, so in der Regel, vom Ersteller geplegt,
    oder aber von "uns" ?
    Aber dann bei Endor hochgeladen.

  • Farbe von Adressleiste und Text ändern

    • Mira_Belle
    • 10. August 2026 um 11:48
    CSS
    .urlbar-input-container {
    	color: red !important;					/* Schriftfarbe */
    	background-color: lime !important;		/* Hintergrundfarbe */
    }
    
    .urlbarView-row-inner:hover{
      color: magenta !important;					/* Schriftfarbe */
      background-color: lime !important;		/* Hintergrundfarbe */
    }
    
    .urlbar-background {
      background-color: blue !important;				/* Hintergrundfarbe */
      border: 1px solid yellow !important;		/* Wichtig, sonst bleibt da ein Rand */
    }
    
      /* Markierter Text  */
    ::selection {
      color: blue !important;
      background-color: orangered !important; /* käftiges Orange */
    }
    Alles anzeigen

    Das sollte es gewesen sein.
    Apropos Rand, den am besten in der gleichen Farbe wie der Hintergrund.
    Sieht einfach schöner aus, finde ich.

    Und um den ganzen Krempel kann man auch noch "Border" machen, wenn man will.
    Ausprobieren. ;)
    Es gehen Pünktchen, Gestrichelt, durchgezogene Linien und noch so einiges mehr.

  • 1 Script funktioniert nicht mehr und ich weiss nicht, welches es von diesen 2 (Zusatzleisten) ist.

    • Mira_Belle
    • 10. August 2026 um 03:54
    Zitat von FuchsFan

    Ja, das ist gut, nur muss er es auf seine Bedürfnisse anpassen.

    Den Konfigbereich 1:1 zu übertragen sollte ja nun nicht wirklich eine sooo große Hürde darstellen.
    Wenn doch, ich, wir hier sind doch immer zur Hilfe bereit!

  • Farbe von Adressleiste und Text ändern

    • Mira_Belle
    • 10. August 2026 um 03:52
    CSS
    .urlbar-input-container {
    	color: red;					/* Schriftfarbe */
    	background-color: lime;		/* Hintergrundfarbe */
    }

    Alles benutzen oder auch nicht,
    und Farben eigenen Vorstellungen anpassen.

  • 1 Script funktioniert nicht mehr und ich weiss nicht, welches es von diesen 2 (Zusatzleisten) ist.

    • Mira_Belle
    • 9. August 2026 um 22:20

    Ok, ich habe mir Dein Script extras_config_menu.uc.js mal genauer angeschaut.

    Wann bitte hat es den funktioniert?
    Das ist sowas von asbach uralt, da gehe ich nicht drann!

    Wo hast Du es her? Wenn ich nicht irre, gibt es davon neuere Versionen!!
    Und Tu Dir doch selbst einen gefallen:!:
    Du editierst Dir doch den Header mit für Dich wichtigen Infos.
    Warum nicht auch mit dem Link der Quelle?
    Würde so vieles einfacher machen!!


    Da => extras_config_menu.uc.js
    ist schon mal eine aktuellere Version.

  • 1 Script funktioniert nicht mehr und ich weiss nicht, welches es von diesen 2 (Zusatzleisten) ist.

    • Mira_Belle
    • 9. August 2026 um 15:01

    omar1979 Wenn beide Script im gleichen Ordner liegen,
    warum passt Du den "falschen" Pfad nicht an?

    Nimm den, in dessen Script es funktioniert, und ersetze den,
    in dem Script mit diesem!

    Am besten kommentierst Du den Pfad einfach nur aus
    Und fügst den neuen nur ein.
    Speichern und Neustart.

  • 1 Script funktioniert nicht mehr und ich weiss nicht, welches es von diesen 2 (Zusatzleisten) ist.

    • Mira_Belle
    • 9. August 2026 um 09:28

    Poste das ganze Script, so wird das nichts!!

    Zitat von omar1979

    ja, aber die alte scripte funtionieren mit dem falschen profilname. keine ahnung warum..

    Und so KANN das eben nicht funktioniert haben:!:

  • Tabform

    • Mira_Belle
    • 8. August 2026 um 22:03

    Hier das aktuelle komplette Monster!

    CSS
    /*** Curved tabs beta D2b sauber - dunkles Theme ***/
    /* https://www.camp-firefox.de/forum/thema/137164-tabform/?postID=1292398#post1292398 */
    
    
    /* -------------------------------------------------------------------------------------------------------------- */
    /* -------------------------------------------------------------------------------------------------------------- */
    
    /*** General adjustments ***/
    /*** Allgemeine Anpassunge ***/
    
    :root {
    
        /* Tabs bar height adjust */
        /* Tabbar Höhe einstellen */
            /*--tabs-navbar-shadow-size: 0 !important;*/
            /*--tab-block-margin: 4px !important;*/
            --tab-block-margin: var(--uc-block-margin) !important;       /*  2px */
            --tab-min-height: var(--uc-min-height) !important;           /* 36px */
        
        /* Edges without corner Svg /  Radius */
        /* Kanten ohne Ecken (svg / Radien */
            /*--ug-radius: 20px;*/
            --ug-radius: var(--uc-radius) !important;                    /* 19px */
        
        
        /* Edges (borders, outlines) colors */
        /* Farben für Ränder (Umrandungen, Konturen) */
        
        /* Edges not selected */
        /* Ränder nicht ausgewählt */
    /*        --ug-color-border: hsla(0, 0%, 83%, 0.5);                   /* hellgrau unselected Kante Tab */
    /*        --ug-color-border: var(--uc-color-orange-test); */
            --ug-color-border: var(--uc-color-grey-light);
            --ug-stroke: var(--ug-color-border);                          /* unselected Kante Svg */
    /*        --ug-kante_hova: hsla(0, 0%, 93%, 0.65);                    /* mittelgrau unselected alle Kanten hover */
            --ug-kante_hova: var(--ug-color-border);
        
        /* Edges selected , multiselected */
        /* Kanten ausgewählt, mehrfach ausgewählt */
    /*        --ug-color-border_select: hsla(0, 0%, 93%, 0.75);           /* mittelgrau hell+ selected Kante Tab */
            --ug-color-border_select: var(--uc-color-orange-normal);
            --ug-stroke_select: var(--ug-color-border_select);            /* selected Kante Svg */
    /*        --ug-kante_hova_select: hsla(0, 0%, 100%, 0.8);             /* mittelgrau hell++ multiselected alle Kanten hover */
            --ug-kante_hova_select: var(--uc-color-orange-normal);
    
        
        /* Tabs background colors:  */
        
    /*        --ug-color1: hsla(0, 0%, 83%, 0.25);                        /* hellgrau basis, unselected */
    /*        --ug-color2: hsla(35, 80%, 60%, 0.25);                      /* zart orange selected */
    /*        --ug-color2-multi: hsla(35, 80%, 40%, 0.25);                /* zart orange dunkel+ multiselected */
    /*        --ug-color_multi_hova: hsla(35, 70%, 40%, 0.35);            /* zart orange dunkel++ multiselected hover */
    /*        --ug-color_hova: hsla(0, 0%, 50%, 0.25);                    /* mittelgrau#2 unselected hover */
    
            --ug-color1: var(--uc-color);                                 /* hellgrau basis, unselected */
            --ug-color2: var(--uc-color-sel);                             /* zart orange selected */
            --ug-color2-multi: var(--uc-color-musel);                     /* zart orange dunkel+ multiselected */
            --ug-color_hova: var(--uc-color_hov);                         /* mittelgrau unselected hover */
            --ug-color_multi_hova: var(--uc-color_musel_hov);             /* zart orange dunkel++ multiselected hover */
    
    
        /* Tab bar unten, border bottom color */
    /*        --ug-color_bottom: hsla(0, 0%, 93%, 1);                     /* hellgrau nicht transparent, Kante unten */
            --ug-color_bottom: var(--uc-color-orange-normal);
    
        
        /* Symbole für about:xxx */
            --ug-color_tab-icon: var(--uc-color-red-normal);
    }
        /*** General adjustments end ***/
    /* -------------------------------------------------------------------------------------------------------------- */    
    /* -------------------------------------------------------------------------------------------------------------- */
    
                                                                   /*** Tabs base ***/
    
        /* tabs connected bottom */
        
        .tab-background {
            margin-block: calc(2 * var(--tab-block-margin)) 0 !important;
        }
        
        /*** Tabs Radien, borders, corners, tab shapes order , inline borders only where no custom corners ***/
        
        /*  Basis alle Tabs  */
        
        .tabbrowser-tab .tab-background {
            border-radius: var(--ug-radius) var(--ug-radius) var(--ug-radius)  0 !important;
            border: 1px solid !important;
            /*border-bottom: none !important;*/
        }
        
        .tabbrowser-tab:not([pinned]) .tab-background {
            border-left: none !important;
        }
        
        /*  Zusatzregeln, überschreiben Basis alle Tabs  */
        
        /* selected , pinned tabs */
        .tabbrowser-tab:is([visuallyselected], [pinned]) .tab-background {
            border-radius: var(--ug-radius) var(--ug-radius) 0 0 !important;
        }
        /* Tab selected no inline border */
        .tabbrowser-tab[visuallyselected]:not([pinned]) .tab-background {
            border-inline: none !important;
        }
        
        /* Tab after selected tab completely round, no corners */
        .tabbrowser-tab:is([visuallyselected]):not([pinned]) + .tabbrowser-tab:not([visuallyselected]) .tab-background {
            border-radius: var(--ug-radius) !important;
            border-left: 1px solid var(--ug-color-border) !important;
        }
        
        /* Last tab dual corners, unless it comes after selected tab */
        .tabbrowser-tab:not([pinned]):last-of-type .tab-background {
            border-radius: var(--ug-radius) var(--ug-radius) 0 0 !important;
            border-inline: none !important;
        }
        .tabbrowser-tab:is([visuallyselected]):not([pinned]) + .tabbrowser-tab:not([visuallyselected]):last-of-type .tab-background {
            border-radius: var(--ug-radius) var(--ug-radius) 0 var(--ug-radius) !important;
            border-right: none !important;
        }
    
        /* Erster Tab nach ausgewähltem Tab komplett rund, keine Ecken !! multiselected */
        .tabbrowser-tab:is([visuallyselected]):not([pinned]) + .tabbrowser-tab:is([visuallyselected], [multiselected]) .tab-background {
            border-color: var(--uc-color-orange-normal) !important;
        }
    
                                                                      /***  COLORS  ***/
        
        /**  In about:config set svg.context-properties.content.enabled to true  **/
        
        /*  Basis alle Tabs  */
        
        .tabbrowser-tab .tab-background {
            outline: none !important;
            box-shadow: none !important;
            background-color: var(--ug-color1) !important;
            border-color: var(--ug-color-border) !important;
            stroke: var(--ug-stroke) !important;
            fill: var(--ug-color1) !important;
            border-bottom: none !important;   /* Muss zusätzlich, da unten ja keine Kante sein soll !  */
        }
        
        /*  Zusatzregeln, überschreiben Basis alle Tabs  */
        
        /* Colors, outlines: selected / multiselected / hover */
        
        /* tabs selected base */
        .tabbrowser-tab:is([visuallyselected], [multiselected]) .tab-background {
            background-image: none !important;
            background-color: var(--ug-color2) !important;
            stroke: var(--ug-stroke_select) !important;
            border-color: var(--ug-color-border_select) !important;
            fill: var(--ug-color2) !important;
        }
        
        /* tabs multiselected */
        .tabbrowser-tab:not([visuallyselected])[multiselected] .tab-background {
            background-color: var(--ug-color2-multi) !important;
            fill: var(--ug-color2-multi) !important;
        }
        
        /* tabs multiselected hover */
        .tabbrowser-tab:not([visuallyselected]):hover .tab-background {
            background-color: var(--ug-color_multi_hova) !important;
            fill: var(--ug-color_multi_hova) !important;
            stroke: var(--ug-kante_hova_select) !important;
            border-color: var(--ug-kante_hova_select) !important;
        }
        
        /* tabs unselected hover */
        .tabbrowser-tab:not([visuallyselected], [multiselected]):hover .tab-background {
            background-color: var(--ug-color_hova) !important;
            fill: var(--ug-color_hova) !important;
            stroke: var(--ug-kante_hova) !important;
            border-color: var(--ug-kante_hova) !important;
        }
        
    /* -------------------------------------------------------------------------------------------------------------- */
        /* fill colors selected / unselected hover */
        .tabbrowser-tab:is([visuallyselected], [multiselected]) .tab-background::before, 
        .tabbrowser-tab:is([visuallyselected], [multiselected]) .tab-background::after {
            fill: var(--ug-color2) !important;       
            stroke: var(--uc-color-orange-normal) !important;
        }
    
        .tabbrowser-tab:not([visuallyselected]):is([multiselected]) .tab-background::before, 
        .tabbrowser-tab:not([visuallyselected]):is([multiselected]) .tab-background::after {
            fill: var(--ug-color2-multi) !important;
        }
    
        .tabbrowser-tab:not([visuallyselected]):is([multiselected]):hover .tab-background::before, 
        .tabbrowser-tab:not([visuallyselected]):is([multiselected]):hover .tab-background::after {
            fill: var(--ug-color_multi_hova) !important;
        }
    
        /*  right corner bg, selected --> vor not selected  */
        .tabbrowser-tab:is([visuallyselected]) + .tabbrowser-tab:not([visuallyselected]) .tab-background::before {
            background-image: none !important;
        }
    /* -------------------------------------------------------------------------------------------------------------- */
    
                                                              /***  tabs corners  ***/
        /*  base  */
        
        #TabsToolbar {
            --ug-corner-size: var(--tab-min-height) !important;             /*  36px */
            --ug-corner-image: url("../icons/tab_corner.svg") !important;
        }
        
        .tabbrowser-tab .tab-background::before, 
        .tabbrowser-tab .tab-background::after {
            -moz-context-properties: fill, fill-opacity, stroke, stroke-opacity !important;
            content: "";
            position: absolute;
            width: var(--ug-corner-size) !important;
            height: var(--ug-corner-size) !important;
            background-size: var(--ug-corner-size) !important;
            background-repeat: no-repeat !important;
            background-position: bottom center !important;
            mask-image: linear-gradient(215deg, transparent, black 18px) !important;
            pointer-events: none !important;
        }
        
        /*  left  */
        .tabbrowser-tab .tab-background::before {
            left: calc(0px - var(--ug-corner-size) / 2);                      /* -18px */
            background-image: var(--ug-corner-image) !important;
        }
        
        /*  right  */
        .tabbrowser-tab:is([visuallyselected], :last-of-type) .tab-background::after {
            right: calc(0px - var(--ug-corner-size) / 2);                     /* -18px */
            background-image: var(--ug-corner-image) !important;
            transform: scaleX(-1) !important;
        }
    
                                                /****   Margins etc. overflow fix   ****/
        
        /* Base values ; tab padding, margin */
        #tabbrowser-tabs {
        /*    --ug-tab_Pad: calc(8px + var(--ug-corner-size) / 2);             /*  26px */
            --ug-tab_Pad: calc(-10px + var(--ug-corner-size) / 2);             /*   8px */
    
        /*    --ug-tab_Marge: calc(0px - var(--ug-corner-size) - 12px);        /* -48px */
            --ug-tab_Marge: calc(0px - var(--ug-corner-size) / 2 + 6px);       /* -12px */
        }
    
        /* Basis all Tabs */
        .tabbrowser-tab:not([pinned]) {
            overflow: visible !important;
            padding-inline: var(--ug-tab_Pad) !important;
        }
    
        /* Tab before any tab */
        .tabbrowser-tab:not([pinned], [visuallyselected]) + .tabbrowser-tab:not([pinned]) {
            margin-inline: var(--ug-tab_Marge) 0px !important;
        /*    margin-inline: -48px 0px !important; */
        }
    
        /* Tab after selected */
        .tabbrowser-tab:not([pinned]):is([visuallyselected]) + .tabbrowser-tab:not([pinned]) {
            margin-inline: var(--ug-tab_Marge) 0px !important;
        /*    margin-inline: -48px 0px !important; */
        }
    
        /* Tab selected  */
        .tabbrowser-tab:not([pinned]):is([visuallyselected], :last-of-type) {
            margin-inline: 0px !important;
        }
    
        /* Last tab after selected tab */
        .tabbrowser-tab:is([visuallyselected]):not([pinned]) + .tabbrowser-tab:not([visuallyselected]):last-of-type {
            margin-inline: var(--ug-tab_Marge) 0px !important;
        /*    margin-inline: -48px 0px !important; */
        }
        /***  Tab left higher z index / Vorrang vor Tab rechts  ***/
        .tabbrowser-tab:not([pinned]) .tab-content {
            z-index: 1 !important;
        }
    
        /***  Space for corner left/right - first/last tab, overflow bugs fix  ***/
    
        #tabbrowser-tabs .tabbrowser-tab:nth-child(1 of :not([pinned], [hidden])) {
        /*    margin-inline-start: 0px !important; */
            margin-inline-start: 10px !important;
        }
        #tabbrowser-tabs:not([pinned]) .tabbrowser-tab:last-of-type {
        /*    margin-inline-start: 0px !important; */    
            margin-inline-end: 10px !important;
        }
        #tabbrowser-tabs[overflow]:not([movingtab]) .tabbrowser-tab:nth-child(1 of :not([pinned], [hidden])) {
            margin-inline-start: -12px !important;
        }
        #tabbrowser-tabs[overflow]:not([movingtab]) .tabbrowser-tab:last-of-type {
            margin-inline-end: -12px !important;
        }
    
        /*-----------------------------------------------*/
        /******     Anpassungen für "Split View"    ******/
        /*-----------------------------------------------*/
    
        #tabbrowser-tabs[orient="horizontal"] tab-split-view-wrapper {
            margin-block: 0 !important;
            padding: 0 !important;
            flex: 1000  !important;
            background-color: transparent !important;
        }
    
        #tabbrowser-tabs[orient="horizontal"] tab-split-view-wrapper {
            & .tabbrowser-tab {
                & .tab-background {
                    min-height: var(--uc-min-height) !important;
                }
            }
        }
    
        #tabbrowser-tabs tab-split-view-wrapper {
            &:not([hasactivetab]) {
                .tabbrowser-tab {
                    &:last-child {
                        border-inline-start: 1px solid transparent !important;
                    }
                }
            }
        }
    
        #tabbrowser-tabs tab-split-view-wrapper {
            & .tabbrowser-tab {
                &:first-child {
                    & .tab-background {
                        margin-inline-end: 0 !important;
                        margin-inline-start: 0 !important;
                    }
                }
            }
        }
    
        #tabbrowser-tabs tab-split-view-wrapper {
            & .tabbrowser-tab {
                & .tab-background {      
                    margin-left: 0 !important;
                    margin-inline-end: 0 !important;
                    margin-inline-start: 0 !important;
                }
            }
        }
    
        /*-----------------------------------------------*/
        /****     Tabtext nicht verkürzt bei hover    ****/
        /*-----------------------------------------------*/
    
        /* Ein längerer Tabtext wird am Ende ja ausgeblendet. */
        /* Diese Verkürzung bei hover hätte ich gerne verhindert. */
    
        .tabbrowser-tab:not(:hover) > .tab-stack > .tab-content > .tab-close-button {
            padding-inline-start: 6px !important;
            width: 24px !important;
    
        }
      
        .tabbrowser-tab[visuallyselected=true]:not(:hover),
        #tabbrowser-tabs:not([closebuttons=activetab]) > #tabbrowser-arrowscrollbox > .tabbrowser-tab:not([visuallyselected=true]):not(:hover) {
            --tab-label-mask-size: 1em !important;
        }
        
        /* Tabtext wird nicht ausgeblendet */    
        .tab-label-container[textoverflow][labeldirection=ltr]:not([pinned]),
        .tab-label-container[textoverflow]:not([labeldirection]):not([pinned]):-moz-locale-dir(ltr) {
            mask-image: none !important;
        }
    
        /*--------------------------------------------*/
        /****     Tabbar nach unten verschieben    ****/
        /*--------------------------------------------*/
        
        #navigator-toolbox {
            position: relative !important;
            padding-bottom: calc( var(--tab-min-height) - 30px );
        /*    padding-bottom: calc( var(--tab-min-height) + 8px );                /*  44px */
        /*    padding-bottom: 42px !important; */
        }
      /*  
        #TabsToolbar {
            position: absolute !important;
            display: block !important;
        }
        */
        /* Tab unten */
        #TabsToolbar {
            order: 100 !important;
        }
    
        /*--------------------------------------------------*/
        /****  Trennlinie zwischen Inhalt und Tableiste  ****/
        /*--------------------------------------------------*/
    
        #TabsToolbar {
            bottom: 5px !important;                                             /* Tableiste etwas angehoben */
            width: 100vw !important;                                            /* Tableistenbreite festgelegt */
            background-image: linear-gradient(to top, var(--ug-color_bottom) 4px, transparent 1px) !important;
            margin-bottom: -7px !important;                                     /* Trennlinie nach unten verschoben */
            padding-bottom: 4px !important;                                     /* Tabs etwas angehoben */
    }
    
        /*---------------------------------------------*/
        /****     Symbole für about:xxx anpassen    ****/
        /*---------------------------------------------*/
    
    	.tab-icon-image {
    		-moz-context-properties: fill !important;
    	/*	fill: #FFAA00 !important;	*/
    		fill: #FF0000 !important;
    	}
    
        /*-----------------------------------------------------------------------*/
        /* Ausblenden des Meüs "Link in neuem Tab in Umgebung öffnen" im Popoup **/
        /*-----------------------------------------------------------------------*/
    
        #context_reopenInContainer {
            display: none !important;
          }
          
        /*---------------------------------------------------*/
        /************** Tab schließen X hover  ***************/
        /*---------------------------------------------------*/
    
        .tabbrowser-tab:not([pinned]) .tab-close-button {                          /* Button rund */
            border-radius: 50% !important;
            display: flex !important;
        }
    
        .tab-content > .tab-close-button:hover {
            /*outline: none !important;*/
            outline: 1px solid rgba(255, 0, 0, 0.3) !important;
            outline-offset: -1px !important;
            background-color: rgba(255, 0, 0, 0.4) !important;                  /* Rot */
            box-shadow: 0 0 1em rgba(255, 0, 0, 0.7) !important;                /* Rot, glow */
        }
    
        /*  Schließen Kreuz größer */
        .tab-close-button {
            transform: scale(1.4, 1.4) !important;
        }
    
        /*---------------------------------------------------*/
        /************* New Tab Button (+) hover  *************/
        /*---------------------------------------------------*/
    
        /* Abstand vom Tab */
        #tabbrowser-arrowscrollbox-periphery #tabs-newtab-button .toolbarbutton-icon {
            margin-left: 6px !important;
            border-radius: 50% !important;
        }
    
        /* New Tab (+) button hover outline */
        #tabbrowser-arrowscrollbox-periphery:hover #tabs-newtab-button .toolbarbutton-icon {
            outline: 1px solid var(--uc-color-orange-normal) !important;
            outline-offset: -1px !important;
            background-color: var(--ug-color1) !important;
        }
    
        /* New Tab (+) button hover color */
        #tabbrowser-arrowscrollbox-periphery:hover #tabs-newtab-button:hover {
            fill: var(--uc-color-orange-normal) !important;
        }
    
        /* Position, closer to last tab */
        #tabbrowser-arrowscrollbox-periphery #tabs-newtab-button {
            margin: 0 !important;
            margin-top: 2px !important;
            padding-inline: 0px !important;
        }
        .tabbrowser-tab:not([pinned]) + #tabbrowser-arrowscrollbox-periphery {
            margin-left: -16px !important;
            z-index: 2 !important;
        }
    
        /*-------------------------------------------------*/
        /*************** Schrift in den Tabs ***************/
        /*-------------------------------------------------*/
    
        .tab-label {
            overflow: hidden !important;
            text-overflow: ellipsis !important;
        /*    text-overflow: " " !important;    */
            text-overflow: " …" !important;
            white-space: nowrap !important;
            max-width: 95% !important; 
            text-shadow: 1px 1px 1.5px var(--uc-color-black-light) !important;   /* Schatten hinter Schrift */
        }
        .tab-label[selected]  {
            color: var(--uc-color-white-normal) !important;                      /* Aktiver Tab: Schriftfarbe (Orange) */
        }
        .tab-label:not([selected])  {
            color: var(--uc-color-grey-lighter) !important;                      /* Aktiver Tab: Schriftfarbe (Hellgrau) */
        }
        
        /* Move tab content */
        .tab-content {
            margin-top: 1px !important;
        }
    
    /*************** Tests ***************/
    
        #tabbrowser-tabs {
        /*    --tab-min-width: 76px !important; */
            --tab-min-width: 75px !important;
            --tab-loading-fill: lime !important;      
            --tab-overflow-pinned-tabs-width: 0px !important;
          
        }
        
        /* userChrome.css */
        /* progress-bar page loading in the tab header */
        .tabbrowser-tab:not([usercontextid]) > .tab-stack > .tab-background > .tab-context-line {
            opacity: 0;
            background-color: #FFCC00;
            height: 2px;
            margin-inline: 12px;
            margin-top: 0px;
            border-radius: 90px;
        }
        .tabbrowser-tab:is([busy], [progress]) > .tab-stack > .tab-background > .tab-context-line {
            opacity: 1;
            transform-origin: left center;
            animation: 2s ease-in-out scale;
        }
        .tabbrowser-tab[bursting] > .tab-stack > .tab-background > .tab-context-line {
            transition: opacity 2s ease-out;
        }
        @keyframes scale {
            0% {transform: scaleX(0);}
            100% {transform: scaleX(1);}
        }  
    Alles anzeigen
  • 1 Script funktioniert nicht mehr und ich weiss nicht, welches es von diesen 2 (Zusatzleisten) ist.

    • Mira_Belle
    • 8. August 2026 um 21:24

    Profiles/c612nnc8.default-release/chrome/

    ist ein anderes Profil als

    gluhjsdy.Ramo-1786208475618/chrome/ :!:

    Und wenn unter dem zweiten Profil der Ordner "Icons" nicht gibt, oder wenn es kleingeschrieben ist "icons"
    und selbiges gilt für extraConf.png dann kann es nicht funktionieren!

    Aber um solche Fehlerquellen zu vermeiden, ist es immer gut Variablen zu nutzen.
    Siehe z.B. das Script aus #21

  • 1 Script funktioniert nicht mehr und ich weiss nicht, welches es von diesen 2 (Zusatzleisten) ist.

    • Mira_Belle
    • 8. August 2026 um 20:31

    Ich lach mich gerade schlapp,
    Was für doofe Fehler es doch gibt!
    Kannst nichts dafür, denn ich hätte erwartet, dass man den, genau diesen Button eben nicht auf die Leiste ziehen kann,
    die er aktivieren und deaktivieren soll!

    Aber ich habe auch so eine angepasste Leiste, habe aber noch nie ausprobiert,
    ob ich den Button auch auf die Leiste verschieben kann.
    Werde ich so gleich mal testen.

    Nachtrag!
    Es geht! Und damit ist auch diese Seitenleiste nicht mehr aktivierbar.

Unterstütze uns!

Jährlich (2026)

71,6 %

71,6% (554,79 von 775 EUR)

Jetzt spenden
  1. Kontakt
  2. Datenschutz
  3. Impressum
Community-Software: WoltLab Suite™
Mastodon