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

  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 29. August 2025 um 15:05

    Interessant.

    Sei so lieb und poste mal die Skripteinstellungen.

  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 29. August 2025 um 10:34

    Ah, ok.

    Und mit Aris original Skript funktioniert es?
    Bzw. mit diesem => RE: Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 29. August 2025 um 09:49

    Danke für das Feedback.

    Zitat von lenny2

    .... , mit Ausnahme des Farbverlaufs.

    Das meinte ich mit 3-D-Effekt.

    Zitat von lenny2

    Außerdem funktionieren beide Skripte ....

    :?: Welche beiden Skripte?

    Zitat von lenny2

    ... nicht mehr in den Ordnern der Lesezeichenleiste ...

    Dazu kann ich absolut nichts "sagen"! Ich hatte bisher nicht das Problem, bzw. so viele Lesezeichen, dass da irgendwo
    eine Scrollbar auftauchte.

    Bräuchte mal ein Bild dazu, Version 142 und 143+

  • UserCSSLoader (2025)

    • Mira_Belle
    • 29. August 2025 um 09:02
    Zitat von Speravir

    Verlinke bitte mal zum Thread, wo Du das Skript gepostet hast.

    Der Link zu meiner Version des Appmenüs.

  • Meine Version des App-Menüs (JavaScript)

    • Mira_Belle
    • 29. August 2025 um 08:59

    Stelle hier mal meine Version des Appmenu.uc.js vor.

    JavaScript
    // ==UserScript==
    // @name           Appmenu.uc.js
    // @namespace      Appmenu@gmail.com
    // @description    Basiert auf dem Script externalFuncButtonM.uc.js, Wiederherstellung der Orangenen FF-Menü Schaltfläche
    // @include        main
    // @version        update for Firefox 68+ by aborix
    // @author         defpt
    // @charset        UTF-8
    // @version        2020.07.13 Weitere Menüs und Funktionen ergänzt by bege
    // @version        2024.08.10 alle Einstellungen im Abschnitt Konfiguration vornehmen
    // @version        2024.08.18 einige Veränderungen am Skript, Symbole, Funktionen & Menüs by Mira Bellenbaum
    // @version        2025.01.15 EventListener korrigiert und angepasst, by Mira Bellenbaum
    // @version        2025.04.03 Zeile 340 "eval()" ersetzt. Nachfolgend Zeilen 381-416 ergänzt und Parameter (command:) angepasst
    // @version        2025.07.21 Zeile 239 geändert! Button weiter nach rechts!
    // ==/UserScript==
    
      // Definiere den Profilpfad
      let ProfilePath = PathUtils.toFileURI(
        PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')
      );
      
      var Appmenu = {
        // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
      
        // Editor mit angegebenem Pfad verwenden
        // editor: 'C:\\Program Files\\Notepad++\\notepad++.exe',
        editor: "C:\\Program Files\\Microsoft VS Code\\Code.exe",
        // oder
        // in 'view_source.editor.path' eingetragenen Editor verwenden
        editor: Services.prefs.getCharPref('view_source.editor.path'),
        // Dateimanager mit angegebenem Pfad verwenden oder leer ('') wenn System-Dateimanager verwenden
        //fileManager: 'C:\\Program files\\FreeCommander XE\\FreeCommander.exe',
        fileManager: "",
        // Parameter für Dateimanager oder leer ('')
        //FMParameter: '/T',
        FMParameter: "",
        // Submenüs ohne Inhalt im Hauptmenü automatisch ausblenden
        autohideEmptySubDirs: true,
        // Submenüs im Hauptmenü nach unten verschieben
        moveSubDirstoBottom: false,
        // Ort und Aussehen des Menü-Buttons einstellen
        isUrlbar: 2, // 0: TabsToolbar; 1: navbar; 2: toolbar-menubar
        isButton: 0, // 0: Hamburger,klein; 1: Firefox,groß,
        // Hotkey zum Öffnen des Appmenüs oder leer ('')
        hotkey: "f",
        hotkeyModifier: "alt",
      
        // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
      
        // Submenüs im Hauptmenü nach unten verschieben
        subdirPopupHash: [],
        subdirMenuHash: [],
      
        toolbar: {
          // Submenüs des Hauptmenüs definieren; Separator einfügen mit {name: 'separator'}
          subdirs: [
            {
              name: 'Firefox Verzeichnisse',
              image: `${ProfilePath}/folder_currentColor.svg`, // Der Pfad wird direkt verwendet, ohne `url()`
            },
            {
              name: 'Firefox Funktionen',
              image: `${ProfilePath}/settings_currentColor.svg`, // Der Pfad wird direkt verwendet, ohne 'url()'
            },
            {
              name: 'separator',
            },
          ],
          
          apps: [
    
            // Untermenü Firefox Verzeichnisse
            {
              name: 'Profil-Verzeichnis',
              id: 'AMProfil',
              root: 'ProfD',
              path: '\\',
              subdir: 'Firefox Verzeichnisse',
            },
            {
              name: 'Chrome-Ordner',
              id: 'AMchrome',
              root: 'ProfD',
              path: '\\chrome',
              subdir: 'Firefox Verzeichnisse',
            },
            {
              name: 'CSS-Ordner',
              id: 'AMCSS',
              root: 'ProfD',
              path: '\\chrome\\css',
              subdir: 'Firefox Verzeichnisse',
            },
            {
              name: 'JS-Ordner',
              id: 'AMJS',
              root: 'ProfD',
              path: '\\chrome\\scripts',
              subdir: 'Firefox Verzeichnisse',
            },
            {
              name: 'Addon-Verzeichnis',
              id: 'AMAddons',
              root: 'ProfD',
              path: '\\extensions',
              subdir: 'Firefox Verzeichnisse',
             },
             {
              name: 'Programm-Verzeichnis',
              id: 'AMProgramm',
              root: 'CurProcD',
              path: '\\',
              subdir: 'Firefox Verzeichnisse',
             },
             {
              name: 'Startup-Cache',
              id: 'AMCache',
              root: 'ProfLD',
              path: '\\startupCache',
              subdir: 'Firefox Verzeichnisse',
            },
          ],
          
           configs: [
            // Untermenü Firefox Funktionen
            {
              name: 'Anpassen',
              id: 'AMAnpassen',
              command: 'gCustomizeMode.enter()',
              subdir: 'Firefox Funktionen',
            },
            {
              name: 'Neustart im abgesicherten Modus',
              id: 'AMModus',
              command: 'safeModeRestart();',
              subdir: 'Firefox Funktionen',
            },
            {
              name: 'Browser-Konsole',
              id: 'AMKonsole',
              command: 'goKonsole',
              subdir: 'Firefox Funktionen',
            },
            {
              name: 'Browser-Werkzeuge',
              id: 'AMWerkzeuge',
              command: 'goWerkzeuge',
              subdir: 'Firefox Funktionen',
            },
            {
              name: 'Web-Entwickler',
              id: 'AMEntwickler',
              command: 'goEntwickler',
              subdir: 'Firefox Funktionen',
            },
            {
              name: 'Firefox synchronisieren',
              id: 'AMsynchron',
              command: 'gSync',
              subdir: 'Firefox Funktione',
            },
            {
            name: 'Zugangsdaten und Passwörter',
            id: 'AMdaten',
            command:
              'LoginHelper.openPasswordManager(window, { entryPoint: "mainmenu" })',
            tooltiptext: 'about:logins',
            subdir: 'Firefox Funktionen',
            },
            {
              name: 'Task Manager',
              id: 'AMManager',
              command: 'switchToTabHavingURI("about:processes", true)',
              tooltiptext: 'about:processes',
              subdir: 'Firefox Funktionen',
            },
            {
              name: 'Offline arbeiten',
              id: 'AMOffline',
              command: 'BrowserOffline.toggleOfflineStatus();',
              subdir: 'Firefox Funktionen',
            },
              /*
                {
                name: 'separator',
                },
                */
            {
              name: 'Neustart',
              id: 'AMreboot',
              tooltiptext: 'userChrome.js-Cache wird geleert',
              command: 'goReeboot',
            },
            {
              name: 'Beenden',
              id: 'AMquit',
              command: 'goQuitApplication(event);',
            },
        ]
      },
    
      _externalAppPopup: null,
      _isready: false,
    
      init: function() {
        this.handleRelativePath(this.toolbar.apps);
        const XULNS = 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul';
    
        var ExternalAppBtn = document.createElementNS(XULNS, 'toolbarbutton');
        ExternalAppBtn.id = 'AppMenuButton';
        ExternalAppBtn.setAttribute('label', 'AppButton');
        ExternalAppBtn.addEventListener('click', event => {
          event.preventDefault();
          event.stopPropagation();
        });
        ExternalAppBtn.setAttribute('tooltiptext', 'Firefox Menü');
        ExternalAppBtn.setAttribute('type', 'menu');
        ExternalAppBtn.setAttribute('removable', 'true');
          
        // Definiere den Profilpfad
        let ProfilePath = PathUtils.toFileURI(
          PathUtils.join(PathUtils.profileDir, 'chrome', 'image')
        );
      
        // Symbole
        let DefaultIcon = 'Button_groß.png';
        let AlternateIcon = 'Button_klein-5.png';
    
        // Wenn Appmenu.isButton true ist, benutze das große Symbol, sonst das kleine
        if (Appmenu.isButton) {
          ExternalAppBtn.style.listStyleImage = `url('${ProfilePath}/${DefaultIcon}')`; // Großes Symbol
          ExternalAppBtn.style.width = '94px'; // Feste Breite für großes Symbol
          ExternalAppBtn.style.height = '24px'; // Feste Höhe für großes Symbol
        } else {
          ExternalAppBtn.style.listStyleImage = `url('${ProfilePath}/${AlternateIcon}')`; // Kleines Symbol
          //ExternalAppBtn.style.width = "16px"; // Feste Breite für kleines Symbol
          //ExternalAppBtn.style.width = '26px';
          ExternalAppBtn.style.width = '50px';
          ExternalAppBtn.style.height = '21px'; // Feste Höhe für kleines Symbol
        }
    
        // Button in die richtige Toolbar einfügen
        if (Appmenu.isUrlbar === 1) {
          var navBar = document.getElementById('nav-bar-customization-target');
          navBar.insertBefore(ExternalAppBtn, navBar.firstChild);
        } else if (Appmenu.isUrlbar === 2) {
          var menubar = document.getElementById('toolbar-menubar');
          menubar.insertBefore(ExternalAppBtn, menubar.firstChild);
        } else {
          var TabsToolbar = document.getElementById('TabsToolbar');
          TabsToolbar.insertBefore(ExternalAppBtn, TabsToolbar.firstChild);
        }
    
        var ExternalAppPopup = document.createElementNS(XULNS, 'menupopup');
        ExternalAppPopup.addEventListener('click', event => {
          event.stopPropagation();
        });
        ExternalAppPopup.setAttribute('id', 'AMpopup');
        this._externalAppPopup = ExternalAppPopup;
        ExternalAppBtn.appendChild(ExternalAppPopup);
        Appmenu.onpopupshowing();
          
        // Menü mit Tastaturkürzel öffnen
        if (Appmenu.hotkey) {
        let key = document.createXULElement('key');
          key.id = 'key_AppMenuPopup';
          key.setAttribute('key', Appmenu.hotkey);
          if (Appmenu.hotkeyModifier)
          key.setAttribute('modifiers', Appmenu.hotkeyModifier);
          key.addEventListener('command', function () {
            document.getElementById('AMpopup').openPopup();
            });
          document.getElementById('mainKeyset').appendChild(key);
        }
      },
    
      onpopupshowing: function() {
        if (this._isready) return;
        if (this._externalAppPopup === null) return;
        var ExternalAppPopup = this._externalAppPopup;
    
        // Verarbeitung der Subdirs
        for (let subdir of this.toolbar.subdirs) {
          if (subdir.name == 'separator') {
            ExternalAppPopup.appendChild(document.createXULElement('menuseparator'));
          } else {
            var subdirItem = ExternalAppPopup.appendChild(document.createXULElement('menu'));
            var subdirItemPopup = subdirItem.appendChild(document.createXULElement('menupopup'));
            subdirItem.setAttribute('class', 'menu-iconic');
            subdirItem.setAttribute('label', subdir.name);
            subdirItem.setAttribute('image', subdir.image);
            Appmenu.subdirPopupHash[subdir.name] = subdirItemPopup;
            Appmenu.subdirMenuHash[subdir.name] = subdirItem;
          }
        }
    
        // Verarbeitung der Apps
        for (let app of this.toolbar.apps) {
          var appItem;
          if (app.name == 'separator') {
            appItem = document.createXULElement('menuseparator');
          } else {
            appItem = document.createXULElement('menuitem');
            appItem.setAttribute('class', 'menuitem-iconic');
            appItem.setAttribute('label', app.name);
            appItem.setAttribute('image', app.image);
            appItem.addEventListener('command', function () {
              Appmenu.exec(this.path, this.args);
              });
            appItem.setAttribute('tooltiptext', app.name);
            appItem.path = app.path;
            appItem.args = app.args;
          }
          if (app.subdir && Appmenu.subdirPopupHash[app.subdir])
            Appmenu.subdirPopupHash[app.subdir].appendChild(appItem);
          else ExternalAppPopup.appendChild(appItem);
        }
    
        // Verarbeitung der Configs
        for (let config of this.toolbar.configs) {
          var configItem;
          if (config.name == 'separator') {
            configItem = document.createXULElement('menuseparator');
          } else {
            configItem = ExternalAppPopup.appendChild(document.createXULElement('menuitem'));
            configItem.setAttribute('class', 'menuitem-iconic');
            configItem.setAttribute('label', config.name);
            configItem.setAttribute('image', config.image);
            configItem.addEventListener('command', () => {
              Appmenu.executeCommand(config.command);
            });
    
            if (config.tooltiptext) {
              configItem.setAttribute('tooltiptext', config.tooltiptext);
            } else {
              configItem.setAttribute('tooltiptext', config.name);
            }
            configItem.setAttribute('id', config.id);
          }
              
          if (config.subdir && Appmenu.subdirPopupHash[config.subdir]) {
            Appmenu.subdirPopupHash[config.subdir].appendChild(configItem);
          } else {
            ExternalAppPopup.appendChild(configItem);
          }
        }
    
        if (this.autohideEmptySubDirs) {
          for (let i = 0; i < Appmenu.subdirPopupHash.length; i++) {
            if (Appmenu.subdirPopupHash[i].hasChildNodes()) {
              continue;
            } else {
              Appmenu.subdirMenuHash[i].setAttribute('hidden', 'true');
            }
          }
        }
    
        if (this.moveSubDirstoBottom) {
          let i = ExternalAppPopup.childNodes.length;
          while (ExternalAppPopup.firstChild.getAttribute('class') != 'menuitem-iconic' && i-- != 0) {
            ExternalAppPopup.appendChild(ExternalAppPopup.firstChild);
          }
        }
        this._isready = true;
      },
    
      executeCommand: function(command) {
        const commandMap = { 
          'gCustomizeMode.enter()': () => gCustomizeMode.enter(),
          'safeModeRestart();': () => safeModeRestart(),
          'goKonsole': () => {
                  var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});
                  var { BrowserConsoleManager } = require('resource://devtools/client/webconsole/browser-console-manager');
                  BrowserConsoleManager.openBrowserConsoleOrFocus();
                },
          'goWerkzeuge': () => {
                  var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});
                  var { BrowserToolboxLauncher } = require('resource://devtools/client/framework/browser-toolbox/Launcher.sys.mjs');
                  BrowserToolboxLauncher.init();
                },
          'goEntwickler': () => {
                  var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});
                  var { gDevToolsBrowser } = require('resource://devtools/client/framework/devtools-browser');
                  gDevToolsBrowser.toggleToolboxCommand(window.gBrowser, Cu.now());
                },
          'gSync': () => gSync.openPrefs('menubar'),
          'LoginHelper.openPasswordManager(window, { entryPoint: "mainmenu" })': () => LoginHelper.openPasswordManager(window, { entryPoint: 'mainmenu' }),
          'switchToTabHavingURI("about:processes", true)': () => switchToTabHavingURI('about:processes', true),
          'BrowserOffline.toggleOfflineStatus();': () => BrowserOffline.toggleOfflineStatus(),      
          'goReeboot': () => {
                    Services.appinfo.invalidateCachesOnRestart();
                    Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);
                  },
          'goQuitApplication(event);': () => goQuitApplication(event),
        };
        
        if (commandMap[command]) {
          commandMap[command]();
        } else {
          console.warn('Unbekannter Befehl: ', command);
        }
      },
    
      handleRelativePath: function(apps) {
        for (let app of apps) {
          if (app.path) {
            app.path = app.path.replace(/\//g, '\\');
            var ffdir = Cc['@mozilla.org/file/directory_service;1'].getService(Ci.nsIProperties).get(app.root, Ci.nsIFile).path;
            if (/^(\\)/.test(app.path)) {
              app.path = ffdir + app.path;
            }
          }
        }
      },
    
      exec: function(path, args) {
        args = args || [];
        var args_t = args.slice(0);
        for (let arg of args_t) {
          arg = arg.replace(/%u/g, gBrowser.currentURI.spec);
        }
        var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        file.initWithPath(path);
        if (!file.exists()) {
          alert('Datei nicht gefunden: ' + path);
          return;
        }
        if (file.isExecutable() && !path.endsWith('.js')) {
          var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
          process.init(file);
          process.run(false, args_t, args_t.length);
        } else if (file.isFile()) {
          if (this.editor) {
            let UI = Cc['@mozilla.org/intl/scriptableunicodeconverter'].createInstance(Ci.nsIScriptableUnicodeConverter);
            UI.charset = window.navigator.platform.toLowerCase().includes('win') ? 'Shift_JIS' : 'UTF-8';
            let path = UI.ConvertFromUnicode(file.path);
            let app = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
            app.initWithPath(this.editor);
            let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
            process.init(app);
            process.run(false, [path], 1);
          } else {
            file.launch();
          }
        } else if (file.isDirectory()) {
          if (this.fileManager) {
            let args=[this.FMParameter,path];
            let app = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
            app.initWithPath(this.fileManager);
            let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
            process.init(app);
            process.run(false, args, args.length);
          } else {
            file.launch();
          }
        }
      },
    };
    
    (function () {
        // Definiere den Profilpfad für die Symbole
        let ProfilePath = PathUtils.toFileURI(
          PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')
        );
      
        // Standard-Symbol-Dateiname
        let ButtonIcon01 = 'restart.svg';
        let ButtonIcon02 = 'quit.svg';
      
        let Icon01 = 'profile.svg';
        let Icon02 = 'chrome.svg';
        let Icon03 = 'css4.svg';
        let Icon04 = 'js.svg';
        let Icon05 = 'addons.svg';
        let Icon06 = 'folder.svg';
        let Icon07 = 'folder-1.svg';
      
        let Icon11 = 'Themes.svg';
        let Icon12 = 'debugging-workers.svg';
        let Icon13 = 'command-console.svg';
        let Icon14 = 'window-dev-tools.svg';
        let Icon15 = 'developer.svg';
        let Icon16 = 'sync.svg';
        let Icon17 = 'passwords.svg';
        let Icon18 = 'performance.svg';
        let Icon19 = 'plug-disconnected.svg';
      
        // StyleSheetService zum Hinzufügen der CSS-Regeln
        let sss = Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService);
        let uri = Services.io.newURI(
          'data:text/css;charset=utf-8,' +
            encodeURIComponent(`
    
              #AMpopup { margin-left: 8px !important; }
    
              menuitem[label='Profil-Verzeichnis'] { background-image: url('${ProfilePath}/${Icon01}');
                            background-repeat: no-repeat !important; 
                            background-position: 11px 3px !important; 
                            background-size: 16px 16px !important; /* Größe des Symbols anpassen */ 
                            -moz-context-properties: fill, fill-opacity;
                            fill: currentColor;
                            }
              menuitem[label='Chrome-Ordner'] { background-image: url('${ProfilePath}/${Icon02}'); 
                            background-repeat: no-repeat !important; 
                            background-position: 11px 3px !important; 
                            background-size: 16px 16px !important; /* Größe des Symbols anpassen */
                            -moz-context-properties: fill, fill-opacity;
                            fill: currentColor; 
                            }
              menuitem[label='CSS-Ordner'] { background-image: url('${ProfilePath}/${Icon03}'); 
                            background-repeat: no-repeat !important; 
                            background-position: 11px 3px !important; 
                            background-size: 16px 16px !important; /* Größe des Symbols anpassen */
                            -moz-context-properties: fill, fill-opacity;
                            fill: currentColor;                       
                            }
              menuitem[label='JS-Ordner'] { background-image: url('${ProfilePath}/${Icon04}'); 
                            background-repeat: no-repeat !important; 
                            background-position: 11px 3px !important; 
                            background-size: 16px 16px !important; /* Größe des Symbols anpassen */
                            -moz-context-properties: fill, fill-opacity;
                            fill: currentColor;                       
                            }
              menuitem[label='Addon-Verzeichnis'] { background-image: url('${ProfilePath}/${Icon05}');
                            background-repeat: no-repeat !important; 
                            background-position: 11px 3px !important; 
                            background-size: 16px 16pxx !important; /* Größe des Symbols anpassen */
                            -moz-context-properties: fill, fill-opacity;
                            fill: currentColor;                       
                            }
              menuitem[label='Programm-Verzeichnis'] { background-image: url('${ProfilePath}/${Icon06}'); 
                            background-repeat: no-repeat !important; 
                            background-position: 11px 3px !important; 
                            background-size: 16px 16px !important; /* Größe des Symbols anpassen */
                            -moz-context-properties: fill, fill-opacity;
                            fill: currentColor;                       
                            }
              menuitem[label='Startup-Cache'] { background-image: url('${ProfilePath}/${Icon07}');
                            background-repeat: no-repeat !important; 
                            background-position: 11px 3px !important; 
                            background-size: 16px 16px !important; /* Größe des Symbols anpassen */
                            -moz-context-properties: fill, fill-opacity;
                            fill: currentColor;                       
                            }
      
              #AMAnpassen     { background-image: url('${ProfilePath}/${Icon11}');
                                background-repeat: no-repeat !important; 
                                background-position: 11px 3px !important;
                                background-size: 16px 16px !important;
                                -moz-context-properties: fill, fill-opacity;
                                fill: currentColor;                          
                              }
              #AMModus        { background-image: url('${ProfilePath}/${Icon12}');
                                background-repeat: no-repeat !important; 
                                background-position: 11px 3px !important;
                                background-size: 16px 16px !important;
                                -moz-context-properties: fill, fill-opacity;
                                fill: currentColor;
                              }
              #AMKonsole      { background-image: url('${ProfilePath}/${Icon13}');
                                background-repeat: no-repeat !important; 
                                background-position: 11px 3px !important;
                                background-size: 16px 16px !important;
                                -moz-context-properties: fill, fill-opacity;
                                fill: currentColor;
                              }
              #AMWerkzeuge    { background-image: url('${ProfilePath}/${Icon14}');
                                background-repeat: no-repeat !important; 
                                background-position: 11px 3px !important; 
                                background-size: 16px 16px !important;
                                -moz-context-properties: fill, fill-opacity;
                                fill: currentColor;
                              }
              #AMEntwickler   { background-image: url('${ProfilePath}/${Icon15}');
                                background-repeat: no-repeat !important; 
                                background-position: 11px 3px !important;
                                background-size: 16px 16px !important;
                                -moz-context-properties: fill, fill-opacity;
                                fill: currentColor;
                              }
              #AMsynchron     { background-image: url('${ProfilePath}/${Icon16}');
                                background-repeat: no-repeat !important; 
                                background-position: 11px 3px !important; 
                                background-size: 16px 16px !important;
                                -moz-context-properties: fill, fill-opacity;
                                fill: currentColor;
                              }
              #AMdaten        { background-image: url('${ProfilePath}/${Icon17}');
                                background-repeat: no-repeat !important; 
                                background-position: 11px 3px !important; 
                                background-size: 16px 16px !important;
                                -moz-context-properties: fill, fill-opacity;
                                fill: currentColor;
                              }        
              #AMManager      { background-image: url('${ProfilePath}/${Icon18}');
                                background-repeat: no-repeat !important; 
                                background-position: 11px 3px !important; 
                                background-size: 16px 16px !important;
                                -moz-context-properties: fill, fill-opacity;
                                fill: currentColor;
                              }
              #AMOffline      { background-image: url('${ProfilePath}/${Icon19}');
                                background-repeat: no-repeat !important; 
                                background-position: 11px 3px !important;
                                background-size: 16px 16px !important;
                                -moz-context-properties: fill, fill-opacity;
                                fill: currentColor;
                              }
      
      
              /* Neustart-Button */
              #AMreboot { 
                  background-image: url('${ProfilePath}/${ButtonIcon01}');
                  background-repeat: no-repeat !important;
                  background-position: 10px 2px !important;
                  background-size: 20px 20px !important; /* Größe des Symbols anpassen */
                  padding-left: 10px !important; /* Platz für das Symbol lassen */
                  -moz-context-properties: fill, fill-opacity !important;
                  fill: #fbc96e !important;
              }
      
              /* Beenden-Button */
              #AMquit { 
                  background-image: url('${ProfilePath}/${ButtonIcon02}');
                  background-repeat: no-repeat !important;
                  background-position: 12px 3px !important;
                  background-size: 16px 16px !important; /* Größe des Symbols anpassen */
                  padding-left: 10px !important; /* Platz für das Symbol lassen */
                  -moz-context-properties: fill, fill-opacity !important;
                  fill: red !important;
              }
      
          `),
          null,
          null
        );
      
        // CSS-Regeln registrieren
        sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
      })();
      
      if (window.gBrowser) Appmenu.init();
    Alles anzeigen

  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 29. August 2025 um 08:36

    So, grundsätzlich funktioniert meine Version des Skriptes nun auch ab FF 143:!:
    Was, so glaube ich, noch nicht richtig funktioniert, ist der 3-D-Effekt!

    linear-gradient( .... )

    Da bin ich noch dran.

    Auch werde ich die Fallbackoptionen von Aris doch wieder in meine Version übernehmen.
    Nicht jeder mag unter seinem Profil die Grafiken abspeichern.
    ABER, ich werde mir da was einfallen lassen, denn das Laden von externen Daten mag ich so gar nicht.

    Hier nun meine derzeitige Version.

    CSS
    // Scrollbar.uc.js
    
    "use strict";
    /* Firefox userChrome.js tweaks - 'Custom Scrollbars' for Firefox ************************************************************ */
    /* Original by Aris (aris-addons@gmx.net)************************************************************************************* */
    /* Github: https://github.com/Aris-t2/CustomJSforFx/blob/master/scripts/custom_scrollbars.uc.js
    /* *************************************************************************************************************************** */
    /* Customized by Mira********************************************************************************************************* */
    /* https://www.camp-firefox.de/forum/thema/135133-custom-scrollbars-uc-js-anpassen/ ****************************************** */
    /* Scrollbar.v1.0.6.js    https://www.camp-firefox.de/forum/thema/135133/?postID=1207718#post1207718************************** */
    /* https://www.camp-firefox.de/forum/thema/136152/?postID=1222989#post1222989************************************************* */
    /* Scrollbar.v2.0.2.js    https://www.camp-firefox.de/forum/thema/136167/?postID=1223096#post1223096************************** */
    /* Scrollbar.v2.0.3.js    https://www.camp-firefox.de/forum/thema/136167/?postID=1223124#post1223124************************** */
    /* Scrollbar.v2.0.5.js    https://www.camp-firefox.de/forum/thema/136167/?postID=1223143#post1223143************************** */
    /* Scrollbar.v2.0.6.1.js  https://www.camp-firefox.de/forum/thema/136167/?postID=1223162#post1223162************************** */
    /* *************************************************************************************************************************** */
    /* Custom Scrollbars for Firefox ********************************************************************************************* */
    /* Version: 2.0.7 for Firefox 143+ ***************************************************************************************** */
    /* ******************************************************************************************************************************
    
    README
    
      about:config >
        widget.windows.overlay-scrollbars.enabled > false (Windows)
        widget.gtk.overlay-scrollbars.enabled > false (Linux)
      [!] The above preferences have to be set to 'false' for this code to work
     
      [!] DER STARTUP-CACHE MUSS NACH JEDER ÄNDERUNG GELÖSCHT WERDEN!
      -> Ordner 'startupCache' finden: Adressleiste > about:profiles > Lokales Verzeichnis > Ordner öffnen > startupCache
      -> Firefox schließen
      -> Inhalt des 'startupCache'-Ordners löschen
    
      Alternativ mit einem JavaScipt!
      -> https://github.com/Endor8/userChrome.js/blob/master/Firefox%2087/RestartFirefoxButtonM.uc.js
     
      Anpassungen vornehmen > Werte ändern
      - Optionen aktivieren/deaktivieren: true <-> false
      - Farbe
        - Name: red, blue, transparent 
        - Hexcode: #33CCFF, #FFF
        - rgb(a): rgba(0,0,255,0.8)
        - hsl(a): hsla(240,100%,50%,0.8)
      - Zahlen: 1, 2, 3 ... 10, 11, 12 ...
      - Deckkraft (in Dezimalzahlen): 0.0 bis 1.0 z.B. 1.4 oder 1.75
      - Farbverläufe: linear-gradient(direction, color, color, color)
      - Beispiel für Farbverläufe: linear-gradient(to right, blue, #33CCFF, rgba(0,0,255,0.8))
      - vordefinierte Farbverläufe: transparent,rgba(255,255,255,0.5),transparent -> transparent,rgba(255,255,255,0.0),transparent
      - keine Farbe oder keine Farbwerte -> verwende "unset"
    */
    /* *************************************************************************************************************************** */
    (function() {
    
      // PROFILE PHATH "CALCULATE"
      let ProfileDirectory = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
      // GENERAL SCROLLBAR SETTINGS
      const custom_scrollbar_size_value = 17;               // in px // default: custom_scrollbar_size_value = 17
      // CUSTOM SCROLLBAR SETTINGS ("custom_scrollbar_" --> "cs_")
      const custom_scrollbars = true;                       // default: custom_scrollbars = true
      const custom_scrollbar_arrows = true;                 // default: custom_scrollbar_arrows = true
      const cs_thumb_border = 1;                            // default: cs_thumb_border = 0 / in px 1
      const cs_thumb_roundness = 9;                         // default: cs_thumb_roundness = 0 / in px 9
      const cs_buttons_border = 0;                          // default: cs_buttons_border = 0 / in px
      const cs_buttons_roundness = 0;                       // default: cs_buttons_roundness = 0 / in px
      const cs_thumb_minimal_size = 12;                     // default: cs_thumb_minimal_size = 12; / in px
      const cs_ignore_color_gradients = true;               // default: cs_ignore_color_gradients = false / 'flat' scrollbars
    // CUSTOM SCROLLBAR COLORS/GRADIENTS
    // - background
      const cs_background_color = "#DDDDDD";              // default: cs_background_color = "#DDDDDD"
      let cs_background_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)";           // default: cs_background_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)"
      let cs_background_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)";         // default: cs_background_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)"
      let cs_arrows_on_buttons_buttons_size = 1.0;          // default: cs_arrows_on_buttons_buttons_size = 1.0
    // - corner
      const cs_corner_background_color = "#DDDDDD";       // default: cs_corner_background_color = "#DDDDDD" / - corner
      let cs_corner_background_image = "linear-gradient(45deg,transparent 30%,rgba(255,255,255,0.5) 50%,transparent 70%),linear-gradient(-45deg,transparent 30%,rgba(255,255,255,0.5) 50%,transparent 70%)";             // default: cs_corner_background_image = "linear-gradient(45deg,transparent 30%,rgba(255,255,255,0.5) 50%,transparent 70%),linear-gradient(-45deg,transparent 30%,rgba(255,255,255,0.5) 50%,transparent 70%)"
    // - thumb/slider
      const cs_thumb_color = "#33CCFF";                   // default: cs_thumb_color = "#33CCFF" / thumb/slider
      let cs_thumb_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)";                // default: cs_thumb_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)"
      let cs_thumb_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)";              // default: cs_thumb_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)"
      const cs_thumb_hover_color = "#66FFFF";             // default: cs_thumb_hover_color = "#66FFFF"
      let cs_thumb_hover_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)";          // default: cs_thumb_hover_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)"
      let cs_thumb_hover_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)";        // default: cs_thumb_hover_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)"
      const cs_thumb_border_color = "#33CCFF";            // default: cs_thumb_border_color = "#33CCFF"
    // - buttons
      const cs_buttons_color = "#66FFFF";                 // default: cs_buttons_color = "#66FFFF" "#5b5b66"/ buttons
      let cs_buttons_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)";              // default: cs_buttons_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)"
      let cs_buttons_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)";            // default: cs_buttons_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)"
      const cs_buttons_hover_color = "#33CCFF";           // default: cs_buttons_hover_color = "#33CCFF"
      const cs_buttons_border_color = "#33CCFF";          // default: cs_buttons_border_color = "#33CCFF" "#5b5b66"
      let cs_buttons_hover_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)";        // default: cs_buttons_hover_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)"
      let cs_buttons_hover_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)";      // default: cs_buttons_hover_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)"
    
    /* *************************************************************************************************************************** */
      // unset background image color gradients -> flat scrollbars
      if(cs_ignore_color_gradients === true)
        cs_background_image_vertical
        = cs_background_image_horizontal
        = cs_corner_background_image
        = cs_thumb_image_vertical
        = cs_thumb_image_horizontal
        = cs_thumb_hover_image_vertical
        = cs_thumb_hover_image_horizontal
        = cs_buttons_image_vertical
        = cs_buttons_image_horizontal
        = cs_buttons_hover_image_vertical
        = cs_buttons_hover_image_horizontal
        = "unset";
    
      let custom_scrollbars_code='';
      let custom_scrollbar_arrows_code='';
    
      if(custom_scrollbars === true)
        custom_scrollbars_code=`
          slider, scrollcorner, scrollbar thumb, scrollbar scrollbarbutton {
            appearance: auto;
            -moz-default-appearance: none !important;
          }
          slider {
            background-color: ${cs_background_color} !important;
          }
          scrollbar[vertical] slider {
            background-image: ${cs_background_image_vertical} !important;
          }
          scrollbar[horizontal] slider {
            background-image: ${cs_background_image_horizontal} !important;
          }
          scrollcorner {
            background-color: ${cs_corner_background_color} !important;
            background-image: ${cs_corner_background_image} !important;
          }
          scrollbar thumb {
            background-color: ${cs_thumb_color} !important;
            border-radius: ${cs_thumb_roundness}px !important;
            box-shadow: inset 0 0 0 ${cs_thumb_border}px ${cs_thumb_border_color} !important;
          }
          scrollbar thumb[vertical] {
            background-image: ${cs_thumb_image_vertical} !important;
            min-height: ${(cs_thumb_minimal_size+cs_thumb_roundness+cs_thumb_border)}px !important;
          }
          scrollbar thumb[horizontal] {
            background-image: ${cs_thumb_image_horizontal} !important;
            min-width: ${(cs_thumb_minimal_size+cs_thumb_roundness+cs_thumb_border)}px !important;
          }
          scrollbar thumb:hover, scrollbar thumb:active {
            background-color: ${cs_thumb_hover_color} !important;
          }
          scrollbar thumb[vertical]:hover, scrollbar thumb[vertical]:active {
            background-image: ${cs_thumb_hover_image_vertical} !important;
          }
          scrollbar thumb[horizontal]:hover, scrollbar thumb[horizontal]:active {
            background-image: ${cs_thumb_hover_image_horizontal} !important;
          }
          scrollbar scrollbarbutton {
            background-color: ${cs_buttons_color} !important;
            border-radius: ${cs_buttons_roundness}px !important;
            box-shadow: inset 0 0 0 ${cs_buttons_border}px ${cs_buttons_border_color} !important;
            height: 17px !important;
            width: 17px !important;
          }
    
          scrollbar[vertical] scrollbarbutton {
            background-image: ${cs_buttons_image_vertical} !important;
          }
          scrollbar[horizontal] scrollbarbutton {
            background-image: ${cs_buttons_image_horizontal} !important;
          }
          scrollbar scrollbarbutton:hover {
            background-color: ${cs_buttons_hover_color} !important;
          }
          scrollbar[vertical] scrollbarbutton:hover {
            background-image: ${cs_buttons_hover_image_vertical} !important;
          }
          scrollbar[horizontal] scrollbarbutton:hover {
            background-image: ${cs_buttons_hover_image_horizontal} !important;
          }
        `;
      // if(custom_scrollbar_arrows === true && custom_scrollbar_arrows_version === 1) 
      if(custom_scrollbar_arrows === true)
        custom_scrollbar_arrows_code=`
    
          scrollbarbutton[type="increment"],
          scrollbar[vertical] scrollbarbutton[type="decrement"],
          scrollbarbutton[type="increment"],
          scrollbar[horizontal] scrollbarbutton[type="decrement"] {
            background-repeat: no-repeat;
          /*  background-position: center !important;  */
          }
          scrollbar[vertical] > scrollbarbutton[type="decrement"] {
            background-image: url("${ProfileDirectory}/Pfeil-hoch_hellgrau.svg") !important;
          /*  background-position: top !important;  */
          }
          scrollbar[vertical] > scrollbarbutton[type="increment"] {
            background-image: url("${ProfileDirectory}/Pfeil-runter_hellgrau.svg") !important;
          /*  background-position: bottom !important;  */
          }
          scrollbar[horizontal] > scrollbarbutton[type="decrement"] {
            background-image: url("${ProfileDirectory}/Pfeil-links_hellgrau.svg") !important;
          /*  background-position: left !important;  */
          }
          scrollbar[horizontal] > scrollbarbutton[type="increment"] {
            background-image: url("${ProfileDirectory}/Pfeil-rechts_hellgrau.svg") !important;
          /*  background-position: right !important;  */
          }
    
          /* hover */
    
          scrollbar[vertical] > scrollbarbutton[type="decrement"]:hover {
            background-image: url("${ProfileDirectory}/Pfeil-hoch_orange.svg") !important;
          }
          scrollbar[vertical] > scrollbarbutton[type="increment"]:hover {
            background-image: url("${ProfileDirectory}/Pfeil-runter_orange.svg") !important;
          }
          scrollbar[horizontal] > scrollbarbutton[type="decrement"]:hover {
            background-image: url("${ProfileDirectory}/Pfeil-links_orange.svg") !important;
          }
          scrollbar[horizontal] > scrollbarbutton[type="increment"]:hover {
            background-image: url("${ProfileDirectory}/Pfeil-rechts_orange.svg") !important;
          }
          scrollbar[vertical] > scrollbarbutton {
            height: ${(custom_scrollbar_size_value*cs_arrows_on_buttons_buttons_size)}px !important;
            max-width: ${custom_scrollbar_size_value}px !important;
          }
          scrollbar[horizontal] > scrollbarbutton {
            width: ${(custom_scrollbar_size_value*cs_arrows_on_buttons_buttons_size)}px !important;
            max-height: ${custom_scrollbar_size_value}px !important;
          }
        `;
    
      Components.classes["@mozilla.org/content/style-sheet-service;1"]
        .getService(Components.interfaces.nsIStyleSheetService)
          .loadAndRegisterSheet(Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(`
            ${custom_scrollbars_code}
            ${custom_scrollbar_arrows_code}
      `), null, null),
    
      Components.classes["@mozilla.org/content/style-sheet-service;1"]
        .getService(Components.interfaces.nsIStyleSheetService).AGENT_SHEET);
    
    })()
    Alles anzeigen
  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 28. August 2025 um 23:47

    Der Anfang ist gemacht!
    Aus [orient="xxx"] wird einfch nur [xxx]

    Versteht keiner?

    CSS
    scrollbar[orient="vertical"] => scrollbar[vertical]
    scrollbar[orient="horizontal"] => scrollbar[horizontal]

    Löst aber noch nicht alle "Probleme" :!:

  • UserCSSLoader (2025)

    • Mira_Belle
    • 28. August 2025 um 21:19

    Phü, nach langem ausprobieren doch geschafft.

    JavaScript
    // ==UserScript==
    // @name           UserCSSLoader (bereinigt)
    // @description    CSS-Codes - Styles laden und verwalten (bereinigte Version)
    // @namespace      http://d.hatena.ne.jp/Griever/
    // @author         Griever (bereinigt von Andreas Schepers)
    // @include        main
    // @license        MIT License
    // @charset        UTF-8
    // @version        0.1.0
    // @note           Bereinigtes Skript: Nur Hauptmenü "CSS", keine Untermenüs, keine UC-CSS-Unterstützung
    // ==/UserScript==
    
    /* Bedienungsanleitung:
       CSS-Dateien im Chrome-Ordner im Unterordner "CSS" ablegen.
       Linksklick auf Stil: Aktivieren/Deaktivieren
       Mittelklick auf Stil: Aktivieren/Deaktivieren (Menü bleibt offen)
       Rechtsklick auf Stil: Im Editor öffnen
       Strg+Rechtsklick: Im Dateimanager anzeigen
    */
    
    (function(){
    /***** Konfiguration *****/
    // Position: als frei verschiebbare-Schaltfläche = 0, als Menü anzeigen = 1
    let position = 1;
    // Unterordner für CSS-Dateien
    let cssFolder = "CSS";
    /***** Ende Konfiguration *****/
    
    ChromeUtils.importESModule("resource://gre/modules/AppConstants.sys.mjs");
    
    if (window.UCL) {
        window.UCL.destroy();
        delete window.UCL;
    }
    
    window.UCL = {
        USER_SHEET: Ci.nsIStyleSheetService.USER_SHEET,
        AGENT_SHEET: Ci.nsIStyleSheetService.AGENT_SHEET,
        AUTHOR_SHEET: Ci.nsIStyleSheetService.AUTHOR_SHEET,
        readCSS: {},
    
        get disabled_list() {
            let obj = [];
            try {
                obj = decodeURIComponent(this.prefs.getCharPref("disabled_list")).split("|");
            } catch(e) {}
            delete this.disabled_list;
            return this.disabled_list = obj;
        },
    
        get prefs() {
            delete this.prefs;
            return this.prefs = Services.prefs.getBranch("UserCSSLoader.");
        },
    
        get styleSheetServices() {
            delete this.styleSheetServices;
            return this.styleSheetServices = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
        },
    
        get FOLDER() {
            let aFolder;
            try {
                let folderPath = this.prefs.getCharPref("FOLDER");
                aFolder = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
                aFolder.initWithPath(folderPath);
            } catch (e) {
                aFolder = Services.dirsvc.get("UChrm", Ci.nsIFile);
                aFolder.appendRelativePath(cssFolder);
            }
            if (!aFolder.exists() || !aFolder.isDirectory()) {
                aFolder.create(Ci.nsIFile.DIRECTORY_TYPE, 0o664);
            }
            delete this.FOLDER;
            return this.FOLDER = aFolder;
        },
    
        init: function() {
            const cssmenu = $C("menu", {
                id: "usercssloader-menu",
                label: "CSS",
                tooltiptext: "CSS-Styles verwalten\nLinksklick: Aktivieren/Deaktivieren\nMittelklick: Aktivieren/Deaktivieren (Menü bleibt offen)\nRechtsklick: Bearbeiten\nStrg+Rechtsklick: Im Dateimanager öffnen",
                accesskey: "Y"
            });
            cssmenu.addEventListener("click", (event) => {
                if (event.button === 1) UCL.rebuild();
            });
    
            const menupopup = $C("menupopup", {
                id: "usercssloader-menupopup"
            });
            cssmenu.appendChild(menupopup);
    
            // Schaltfläche in Navigationsleiste einfügen
            CustomizableUI.createWidget({
                id: 'usercssloader-menu-item',
                type: 'custom',
                defaultArea: CustomizableUI.AREA_NAVBAR,
                onBuild: function(aDocument) {
                    let toolbaritem = aDocument.createXULElement('toolbaritem');
                    toolbaritem.id = 'usercssloader-menu-item';
                    toolbaritem.className = 'chromeclass-toolbar-additional';
                    return toolbaritem;
                }
            });
            $('usercssloader-menu-item').appendChild(cssmenu);
    
            if (position === 1) {
                let refNode = $('helpMenu');
                refNode.parentNode.insertBefore(cssmenu, refNode.nextSibling);
            }
    
            this.rebuild();
            this.initialized = true;
            window.addEventListener("unload", this, false);
        },
    
        uninit: function() {
            const dis = [];
            for (let x of Object.keys(this.readCSS)) {
                if (!this.readCSS[x].enabled)
                    dis.push(x);
            }
            this.prefs.setCharPref("disabled_list", encodeURIComponent(dis.join("|")));
            window.removeEventListener("unload", this, false);
        },
    
        rebuild: function() {
            let ext = /\.css$/i;
            let files = this.FOLDER.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
            while (files.hasMoreElements()) {
                let file = files.getNext().QueryInterface(Ci.nsIFile);
                if (!ext.test(file.leafName)) continue;
                let CSS = this.loadCSS(file);
                CSS.flag = true;
            }
    
            for (let leafName of Object.keys(this.readCSS)) {
                const CSS = this.readCSS[leafName];
                if (!CSS.flag) {
                    CSS.enabled = false;
                    delete this.readCSS[leafName];
                } else {
                    delete CSS.flag;
                    this.rebuildMenu(leafName);
                }
            }
        },
    
        loadCSS: function(aFile) {
            let CSS = this.readCSS[aFile.leafName];
            if (!CSS) {
                CSS = this.readCSS[aFile.leafName] = new CSSEntry(aFile);
                if (this.disabled_list.indexOf(CSS.leafName) === -1) {
                    CSS.enabled = true;
                }
            } else if (CSS.enabled) {
                CSS.enabled = true;
            }
            return CSS;
        },
    
        rebuildMenu: function(aLeafName) {
            let CSS = this.readCSS[aLeafName];
            let menuitem = document.getElementById("usercssloader-" + aLeafName);
            if (!CSS) {
                if (menuitem) menuitem.parentNode.removeChild(menuitem);
                return;
            }
    
            if (!menuitem) {
                menuitem = $C("menuitem", {
                    label: aLeafName,
                    id: "usercssloader-" + aLeafName,
                    class: "usercssloader-item " + (CSS.SHEET == this.AGENT_SHEET ? "AGENT_SHEET" : CSS.SHEET == this.AUTHOR_SHEET ? "AUTHOR_SHEET" : "USER_SHEET"),
                    type: "checkbox",
                    autocheck: "false",
                    tooltiptext: "Linksklick: an/aus, Menü schließt\nMittelklick: an/aus, Menü bleibt offen\nRechtsklick: bearbeiten\nStrg+Rechtsklick: im Dateimanager anzeigen"
                });
                menuitem.addEventListener("command", () => UCL.toggle(aLeafName));
                menuitem.addEventListener("click", (event) => UCL.itemClick(event));
                menuitem.addEventListener("mouseup", (event) => {
                    if (event.button === 1) event.preventDefault();
                });
                document.getElementById("usercssloader-menupopup").appendChild(menuitem);
            }
            menuitem.setAttribute("checked", CSS.enabled);
        },
    
        toggle: function(aLeafName) {
            let CSS = this.readCSS[aLeafName];
            if (!CSS || event.ctrlKey) return;
            CSS.enabled = !CSS.enabled;
            this.rebuildMenu(aLeafName);
        },
    
        itemClick: function(event) {
            let label = event.currentTarget.getAttribute("label");
            event.preventDefault();
            event.stopPropagation();
            if (event.button === 0) {
                return;
            } else if (event.button === 1) {
                this.toggle(label);
            } else if (event.button === 2) {
                if (event.ctrlKey) {
                    UCL.openFolder(label);
                } else {
                    closeMenus(event.target);
                    this.edit(this.getFileFromLeafName(label));
                }
            }
        },
    
        getFileFromLeafName: function(aLeafName) {
            let f = this.FOLDER.clone();
            f.QueryInterface(Ci.nsIFile);
            f.appendRelativePath(aLeafName);
            return f;
        },
    };
    
    function CSSEntry(aFile) {
        this.path = aFile.path;
        this.leafName = aFile.leafName;
        this.lastModifiedTime = 1;
        this.SHEET = /^xul-|\.as\.css$/i.test(this.leafName) ?
            Ci.nsIStyleSheetService.AGENT_SHEET :
            /\.author\.css$/i.test(this.leafName) ?
                Ci.nsIStyleSheetService.AUTHOR_SHEET :
                Ci.nsIStyleSheetService.USER_SHEET;
    }
    
    CSSEntry.prototype = {
        sss: Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService),
        _enabled: false,
    
        get enabled() {
            return this._enabled;
        },
    
        set enabled(isEnable) {
            let aFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
            aFile.initWithPath(this.path);
            let isExists = aFile.exists();
            let lastModifiedTime = isExists ? aFile.lastModifiedTime : 0;
            let isForced = this.lastModifiedTime != lastModifiedTime;
            let fileURL = Services.io.getProtocolHandler("file").QueryInterface(Ci.nsIFileProtocolHandler).getURLSpecFromActualFile(aFile);
            let uri = Services.io.newURI(fileURL, null, null);
    
            if (this.sss.sheetRegistered(uri, this.SHEET)) {
                if (!isEnable || !isExists) {
                    this.sss.unregisterSheet(uri, this.SHEET);
                } else if (isForced) {
                    this.sss.unregisterSheet(uri, this.SHEET);
                    this.sss.loadAndRegisterSheet(uri, this.SHEET);
                }
            } else {
                if (isEnable && isExists) {
                    this.sss.loadAndRegisterSheet(uri, this.SHEET);
                }
            }
    
            if (this.lastModifiedTime !== 1 && isEnable && isForced) {
                console.log(this.leafName + " wurde aktualisiert");
            }
            this.lastModifiedTime = lastModifiedTime;
            return this._enabled = isEnable;
        },
    };
    
    UCL.init();
    
    function $(id) { return document.getElementById(id); }
    function $C(name, attr) {
        const el = document.createXULElement(name);
        if (attr) Object.keys(attr).forEach(function(n) { el.setAttribute(n, attr[n]) });
        return el;
    }
    })();
    Alles anzeigen


    Jetzt muss ich nur noch sehen, wie ich das Skript, bzw, die Funktionen in das App-Menü bekomme.

  • UserCSSLoader (2025)

    • Mira_Belle
    • 28. August 2025 um 19:46

    Das Skript macht mir zu schaffen!
    Bekomme es einfach nicht hin, dass das Untermenü verschwindet:!:
    Nein, nicht einfach ausblenden, sondern dass auch die Funktionen (Code) aus dem Skript entfernt wird.

    Bräuchte nur das "Ein- und Ausschalten der CSS-Dateien, sonst nichts.

  • ScrollTopAndBottom.uc.js und Open with.uc.js zeigen keine Icons mehr an im Nightly

    • Mira_Belle
    • 28. August 2025 um 16:01

    Mh, :/ , komisch.
    Aber gut, wenn es so passt, ist es ja OK.

  • ScrollTopAndBottom.uc.js und Open with.uc.js zeigen keine Icons mehr an im Nightly

    • Mira_Belle
    • 28. August 2025 um 10:44

    Kann es sein, dass die zweite Trennlinie nur auftaucht, weil Ihr das zusammen gewürfelte Skript nutzt?
    Denn ich nutze ja die getrennten Skripte:!:


    JavaScript
    // ==UserScript==
    // @name			OpenWith (Link-Only-Version)
    // @description		Fügt dem Kontextmenü ein Menü hinzu, um einen ausgewählten Link in einem anderen Browser zu öffnen.
    // @version			1.2.2-mod
    // @author			y2k, angepasst von User
    // @include			main
    // @charset			UTF-8
    // @namespace		http://tabunfirefox.web.fc2.com/
    // @note			Anwendungssymbol anzeigen
    // @note			als .uc.js Script umgeschrieben
    // ==/UserScript==
    (function() {
    "use strict";
    
    if (location != 'chrome://browser/content/browser.xhtml') return;
    
    /*
    	Vor Verwendung, Pfad auf eigene Umgebung ändern(\ wird durch \\ ersetzt)
    	Zum Übergeben von Argumenten, wie folgt vorgehen:
    	C:\\Program Files\\Internet Explorer\\iexplore.exe<>$1 Argument Argument
    	※ $1 wird in URL umgewandelt
    */
        const BrowserPath = {
            "Nightly":              "C:\\Program Files\\Firefox Nightly\\firefox.exe",
            "Firefox":              "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
            "Vivaldi":              "C:\\Users\\Andreas\\AppData\\Local\\Vivaldi\\Application\\vivaldi.exe",
            "Edge":                 "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe",
            "IE":                   "C:\\Program Files\\Internet Explorer\\iexplore.exe",
            "Neues Fenster":		"C:\\Program Files\\Mozilla Firefox\\firefox.exe<>-new-window $1 -foreground",
            "Neu":				    "C:\\Program Files\\Mozilla Firefox\\firefox.exe<>$1 -P Neu -foreground",
        };
    
    const FlatMenu = false;
    
    const OpenWith = {
    	start: function() {
    		const cm = document.getElementById("contentAreaContextMenu");
    		cm.addEventListener("popupshowing", function(e) {
    			if (e.target == this) { OpenWith.onpopup(e); }
    		}, false);
    	},
    
    	createMenu: function() {
    		// Nur einmal ausführen
    		if (this.linkItem) {	
    			return;
    		}
    
    		const contextMenu = document.getElementById("contentAreaContextMenu");
    		
    		// Nur noch das Link-Menü erstellen
    		const linkMenu = this.$C("menu", { id: "context-open-with-link", label: "Link öffnen mit ..." });
    		contextMenu.insertBefore(linkMenu, contextMenu.querySelector(":scope > #context-sep-open"));
    
    		// Nur noch die Menüeinträge für den Link erstellen
    		this.linkItem = this.createMenuItem(linkMenu, "openLink", FlatMenu? "Link öffnen mit $1 ":"  $1");
    	},
    	
    	createMenuItem: function(menu, method, format) {
    		const frag = document.createDocumentFragment();
    		
    		let menuitem = [];
    		for (let i of Object.keys(BrowserPath)) {
    			const item = this.$C("menuitem", {
    				label:	format.replace("$1", i),
    				class:	"menuitem-iconic",
    				image:  "moz-icon:file:///" + encodeURIComponent(BrowserPath[i].split("<>")[0]) + "?size=16",
    				value:	JSON.stringify([ method, i ]),
    			});
    			item.addEventListener("command", this, false);
    
    			frag.appendChild(item);
    			menuitem[menuitem.length] = item;
    		}
    		
    		if (!FlatMenu) {
    			const menupopup = this.$C("menupopup");
    			menupopup.appendChild(frag);
    			menu.appendChild(menupopup);
    			menuitem = [ menu ];
    		}
    		else {
    			const parent = menu.parentNode;
    			parent.insertBefore(frag, menu);
    			parent.removeChild(menu);
    		}
    		
    		return menuitem;
    	},
    
    	$C: function(tag, attrs) {
    		const elem = document.createXULElement(tag);
    		if (attrs) {
    			for (let key of Object.keys(attrs))
    				elem.setAttribute(key, attrs[key]);
    		}
    		return elem;
    	},
    
    	onpopup: function(e) {
    		this.createMenu();
    		
    		// Logik für das Seiten-Menü wurde entfernt.
    		// Das Link-Menü wird nur angezeigt, wenn man auf einem Link ist.
    		const isHtml = /^(https?|file):/.test(gBrowser.currentURI.spec);
    		const linkItemHidden = !isHtml || !gContextMenu.onLink || gContextMenu.onTextInput;
    		
    		const linkItem = this.linkItem;
    		for (let i = 0, l = linkItem.length; i < l; i++) {
    			linkItem[i].hidden = linkItemHidden;
    		}
    	},
    
    	handleEvent: function(event) {
    		if (event.type === "command") {
    			// Da es nur noch "openLink" gibt, kann die Logik vereinfacht werden.
    			const [ method, key ] = JSON.parse(event.originalTarget.getAttribute("value"));
    			const url = gContextMenu.linkURL; // Es wird immer die Link-URL sein
    			this.launch(BrowserPath[key], url);
    		}
    	},
    
    	launch: function(browserPath, openURL) {
    		let [ path, args ] = browserPath.split("<>");
    		if (args) {
    			args = args.split(" ").map(a => a.replace("$1", openURL));
    		} else {
    			args = [ openURL ];
    		}
    		
    		const file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
    		file.initWithPath(path);
    		
    		const process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
    		process.init(file);
    		process.run(false, args, args.length, {});
    	},
    };
    
    OpenWith.start();
    
    })();
    Alles anzeigen
    Code
    // ==UserScript==
    // @name OpenWith
    // @description Fügt dem Kontextmenü ein Menü hinzu, zum Öffnen der aktuellen Seite in einem anderen Browser.
    // @version 1.2.1a 63+
    // @author y2k
    // @include main
    // @charset UTF-8
    // @namespace http://tabunfirefox.web.fc2.com/
    // @note Anwendungssymbol anzeigen
    // @note als .uc.js Script umgeschrieben
    // ==/UserScript==
    (function() {
        "use strict";
    
        if (location != 'chrome://browser/content/browser.xhtml') return;
    
        /*
            Vor Verwendung, Pfad auf eigene Umgebung ändern(\ wird durch \\ ersetzt)
            Zum Übergeben von Argumenten, wie folgt vorgehen:
            C:\\Program Files\\Internet Explorer\\iexplore.exe<>$1 Argument Argument
            ※ $1 wird in URL umgewandelt
        */
        const BrowserPath = {
            "Nightly":              "C:\\Program Files\\Firefox Nightly\\firefox.exe",
            "Firefox":              "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
            "Vivaldi":              "C:\\Users\\Andreas\\AppData\\Local\\Vivaldi\\Application\\vivaldi.exe",
            "Edge":                 "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe",
            "IE":                   "C:\\Program Files\\Internet Explorer\\iexplore.exe",
            "Neues Fenster":		"C:\\Program Files\\Mozilla Firefox\\firefox.exe<>-new-window $1 -foreground",
            "Neu":				    "C:\\Program Files\\Mozilla Firefox\\firefox.exe<>$1 -P Neu -foreground",
        };
    
        const FlatMenu = false;
    
        const OpenWith = {
            start: function() {
                const cm = document.getElementById("contentAreaContextMenu");
                cm.addEventListener("popupshowing", function(e) {
                    if (e.target == this) {
                        OpenWith.onpopup(e);
                    }
                }, false);
            },
    
            createMenu: function() {
                if (this.pageItem) {
                    return;
                }
    
                const contextMenu = document.getElementById("contentAreaContextMenu");
                const pageMenu = this.$C("menu", { id: "context-open-with-page", label: "Seite öffnen mit ..." });
              //  contextMenu.insertBefore(pageMenu, contextMenu.querySelector(":scope > #context-bookmarkpage, :scope > #context-savepage"));
                contextMenu.insertBefore(pageMenu, contextMenu.querySelector(":scope > #context-sep-selectall"));
    
                this.pageItem = this.createMenuItem(pageMenu, "openPage", FlatMenu ? "Seite öffnen mit $1 " : "  $1");
            },
    
            createMenuItem: function(menu, method, format) {
                const frag = document.createDocumentFragment();
    
                let menuitem = [];
                for (let i of Object.keys(BrowserPath)) {
                    const item = this.$C("menuitem", {
                        label: format.replace("$1", i),
                        class: "menuitem-iconic",
                        image: "moz-icon:file:///" + encodeURIComponent(BrowserPath[i].split("<>")[0]) + "?size=16",
                        value: JSON.stringify([method, i]),
                    });
                    item.addEventListener("command", this, false);
    
                    frag.appendChild(item);
                    menuitem[menuitem.length] = item;
                }
    
                if (!FlatMenu) {
                    const menupopup = this.$C("menupopup");
                    menupopup.appendChild(frag);
                    menu.appendChild(menupopup);
                    menuitem = [menu];
                } else {
                    const parent = menu.parentNode;
                    parent.insertBefore(frag, menu);
                    parent.removeChild(menu);
                }
    
                return menuitem;
            },
    
            $C: function(tag, attrs) {
                const elem = document.createXULElement(tag);
                if (attrs) {
                    for (let key of Object.keys(attrs))
                        elem.setAttribute(key, attrs[key]);
                }
                return elem;
            },
    
            onpopup: function(e) {
                this.createMenu();
    
                const isHtml = /^(https?|file):/.test(gBrowser.currentURI.spec);
                const pageItemHidden = !isHtml || gContextMenu.onLink || gContextMenu.onTextInput;
    
                const pageItem = this.pageItem;
                for (let i = 0, l = pageItem.length; i < l; i++) {
                    pageItem[i].hidden = pageItemHidden;
                }
            },
    
            handleEvent: function(event) {
                if (event.type === "command") {
                    const [method, key] = JSON.parse(event.originalTarget.getAttribute("value"));
                    const url = gBrowser.currentURI.spec;
                    this.launch(BrowserPath[key], url);
                }
            },
    
            launch: function(browserPath, openURL) {
                let [path, args] = browserPath.split("<>");
                if (args) {
                    args = args.split(" ").map(a => a.replace("$1", openURL)); // Split bei Leerzeichen
                } else {
                    args = [openURL];
                }
    
                console.log("Call: " + args);
    
                const file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
                file.initWithPath(path);
    
                const process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
                process.init(file);
                process.run(false, args, args.length, {});
            },
        };
    
        OpenWith.start();
    
    })();
    Alles anzeigen

    Dann müsste man mal schauen, in welchem Teil, bei den zusammengeführten Skript die Trennlinie erzeugt wird.

    Bitte testet das noch mal mit den zwei separaten Skripten.

  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 28. August 2025 um 10:34
    Zitat von Mira_Belle

    Und unter welchen Umständen stimmt was mit dem Hintergrund und den Slidern nicht?

    Endor Welche Konfiguration, und kurze Fehlerbeschreibung bitte.
    Würde das gerne heute Nachmittag oder Abend mal nachstellen wollen.

  • ScrollTopAndBottom.uc.js und Open with.uc.js zeigen keine Icons mehr an im Nightly

    • Mira_Belle
    • 28. August 2025 um 10:28

    Ach so, jetzt ja! Ähem, ist bei mir nicht so! (Zweites Pic)

    Habe es auch gerade in einem "sauberen" Profil getestet.
    Keine zweite Trennlinie:!:

  • ScrollTopAndBottom.uc.js und Open with.uc.js zeigen keine Icons mehr an im Nightly

    • Mira_Belle
    • 28. August 2025 um 10:03

    :/  lenny2 Was meinst Du mit Trennzeichen?
    Den Doppelpunkt? Kann man ändern.
    Z.B. so => const linkMenu = this.$C("menu", { id: "context-open-with-link", label: "Link öffnen mit ..." });
    oder so => const pageMenu = this.$C("menu", { id: "context-open-with-page", label: "Seite öffnen mit ..." });

    Den Pfeil, der ist doch i.O.

  • Wie lässt sich die Schrift in den Tab stets vertikal zentriert halten?

    • Mira_Belle
    • 28. August 2025 um 09:05

    Kannst ja Deine Probleme selber lösen!

    Wie kann man nur so xxx sein, möchte Hilfe, ist aber zu absolut keiner Kooperation bereit!

  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 28. August 2025 um 09:00

    Endor Du "sprichst" jetzt vom Original, oder?
    Und unter welchen Umständen stimmt was mit dem Hintergrund und den Slidern nicht?
    Denn ich kann nichts feststellen.

  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 27. August 2025 um 23:51
    Zitat von Mitleser

    ich füge in diesem Beitrag keine Icons ein

    Schade, hätte es gerne ausprobiert, da ich mit dem Tooltiptext nicht wirklich etwas anfangen kann.
    Und in JavaScript bin ich auch nicht so konform, dass sich mir erschließt, was das Skript macht, bzw. machen soll.

  • ScrollTopAndBottom.uc.js und Open with.uc.js zeigen keine Icons mehr an im Nightly

    • Mira_Belle
    • 27. August 2025 um 23:45
    Zitat von 2002Andreas

    ...

    Nachdem ich das alles angepasst hatte, und deine beiden Skripte wieder in einer Datei habe, meine Pfade eingetragen...etc. sieht das jetzt so aus:

    Bzw. so:

    und alles funktioniert wie gewünscht:)

    Mira, dir nochmals ganz herzlichen Dank für deine Zeit und Ausdauer:thumbup:

    ...

    Alles anzeigen

    Ein kleiner Nachtrag!

    Mir passte es nicht, dass die Menüeinträge einmal an verschiedenen Stellen erschienen
    und dann auch noch, an für mich, unpassenden!

    Wer möchte, kann einmal für das ""Link öffnen mit:"-Menü diesen Code verwenden,
    damit es direkt über dem Separator erscheint
    contextMenu.insertBefore(linkMenu, contextMenu.querySelector(":scope > #context-sep-open"));

    und für das "Seite öffnen mit:"-Menü diesen, damit auch dieses Menü direkt über dem Separator ist.
    contextMenu.insertBefore(pageMenu, contextMenu.querySelector(":scope > #context-sep-selectall"));

    Wer die Menüs an ganz anderer Stelle haben möchte, sucht sich den Selektor, der hinter dem Menü sein soll!

  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 27. August 2025 um 22:03

    Habe ich gesehen! Könnte sein, eventuell nur ein Bug!
    Wobei ich meine, dass das Skript mit der 143 noch funktionierte, bin mir da aber nicht so sicher und kann es auch nicht mehr prüfen.

  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 27. August 2025 um 21:48

    Das Skript zum Anpassen der Scrollbar funktioniert leider nur noch teilweise!

    Die Pfeile werden nicht mehr angezeigt!!

    Es ist egal, ob das Original von Aris benutzt wird,
    oder dieses =>

    JavaScript
    // Scrollbar.uc.js
    
    "use strict";
    /* Firefox userChrome.js tweaks - 'Custom Scrollbars' for Firefox ************************************************************ */
    /* Original by Aris (aris-addons@gmx.net)************************************************************************************* */
    /* Github: https://github.com/Aris-t2/CustomJSforFx/blob/master/scripts/custom_scrollbars.uc.js
    /* *************************************************************************************************************************** */
    /* Customized by Mira********************************************************************************************************* */
    /* https://www.camp-firefox.de/forum/thema/135133-custom-scrollbars-uc-js-anpassen/ ****************************************** */
    /* Scrollbar.v1.0.6.js    https://www.camp-firefox.de/forum/thema/135133/?postID=1207718#post1207718************************** */
    /* https://www.camp-firefox.de/forum/thema/136152/?postID=1222989#post1222989************************************************* */
    /* Scrollbar.v2.0.2.js    https://www.camp-firefox.de/forum/thema/136167/?postID=1223096#post1223096************************** */
    /* Scrollbar.v2.0.3.js    https://www.camp-firefox.de/forum/thema/136167/?postID=1223124#post1223124************************** */
    /* Scrollbar.v2.0.5.js    https://www.camp-firefox.de/forum/thema/136167/?postID=1223143#post1223143************************** */
    /* Scrollbar.v2.0.6.1.js  https://www.camp-firefox.de/forum/thema/136167/?postID=1223162#post1223162************************** */
    /* *************************************************************************************************************************** */
    /* Custom Scrollbars for Firefox ********************************************************************************************* */
    /* Version: 2.0.6.1 for Firefox 111+ ***************************************************************************************** */
    /* ******************************************************************************************************************************
    
    README
    
      about:config >
        widget.windows.overlay-scrollbars.enabled > false (Windows)
        widget.gtk.overlay-scrollbars.enabled > false (Linux)
      [!] The above preferences have to be set to 'false' for this code to work
     
      [!] DER STARTUP-CACHE MUSS NACH JEDER ÄNDERUNG GELÖSCHT WERDEN!
      -> Ordner 'startupCache' finden: Adressleiste > about:profiles > Lokales Verzeichnis > Ordner öffnen > startupCache
      -> Firefox schließen
      -> Inhalt des 'startupCache'-Ordners löschen
    
      Alternativ mit einem JavaScipt!
      -> https://github.com/Endor8/userChrome.js/blob/master/Firefox%2087/RestartFirefoxButtonM.uc.js
     
      Anpassungen vornehmen > Werte ändern
      - Optionen aktivieren/deaktivieren: true <-> false
      - Farbe
        - Name: red, blue, transparent 
        - Hexcode: #33CCFF, #FFF
        - rgb(a): rgba(0,0,255,0.8)
        - hsl(a): hsla(240,100%,50%,0.8)
      - Zahlen: 1, 2, 3 ... 10, 11, 12 ...
      - Deckkraft (in Dezimalzahlen): 0.0 bis 1.0 z.B. 1.4 oder 1.75
      - Farbverläufe: linear-gradient(direction, color, color, color)
      - Beispiel für Farbverläufe: linear-gradient(to right, blue, #33CCFF, rgba(0,0,255,0.8))
      - vordefinierte Farbverläufe: transparent,rgba(255,255,255,0.5),transparent -> transparent,rgba(255,255,255,0.0),transparent
      - keine Farbe oder keine Farbwerte -> verwende "unset"
    */
    /* *************************************************************************************************************************** */
    (function() {
    
      // PROFILE PHATH "CALCULATE"
      let ProfileDirectory = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
      // GENERAL SCROLLBAR SETTINGS
      const custom_scrollbar_size_value = 17;               // in px // default: custom_scrollbar_size_value = 17
      // CUSTOM SCROLLBAR SETTINGS ("custom_scrollbar_" --> "cs_")
      const custom_scrollbars = true;                       // default: custom_scrollbars = true
      const custom_scrollbar_arrows = true;                 // default: custom_scrollbar_arrows = true
      const cs_thumb_border = 1;                            // default: cs_thumb_border = 0 / in px 1
      const cs_thumb_roundness = 9;                         // default: cs_thumb_roundness = 0 / in px 9
      const cs_buttons_border = 0;                          // default: cs_buttons_border = 0 / in px
      const cs_buttons_roundness = 0;                       // default: cs_buttons_roundness = 0 / in px
      const cs_thumb_minimal_size = 12;                     // default: cs_thumb_minimal_size = 12; / in px
      const cs_ignore_color_gradients = true;               // default: cs_ignore_color_gradients = false / 'flat' scrollbars
    // CUSTOM SCROLLBAR COLORS/GRADIENTS
    // - background
      const cs_background_color = "#5b5b66";                // default: cs_background_color = "#DDDDDD"
      let cs_background_image_vertical = "unset";           // default: cs_background_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)"
      let cs_background_image_horizontal = "unset";         // default: cs_background_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)"
      let cs_arrows_on_buttons_buttons_size = 1.0;          // default: cs_arrows_on_buttons_buttons_size = 1.0
    // - corner
      const cs_corner_background_color = "#bfbfbf";         // default: cs_corner_background_color = "#DDDDDD" / - corner
      let cs_corner_background_image = "unset";             // default: cs_corner_background_image = "linear-gradient(45deg,transparent 30%,rgba(255,255,255,0.5) 50%,transparent 70%),linear-gradient(-45deg,transparent 30%,rgba(255,255,255,0.5) 50%,transparent 70%)"
    // - thumb/slider
      const cs_thumb_color = "#bfbfbf";                     // default: cs_thumb_color = "#33CCFF" / thumb/slider
      let cs_thumb_image_vertical = "unset";                // default: cs_thumb_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)"
      let cs_thumb_image_horizontal = "unset";              // default: cs_thumb_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)"
      const cs_thumb_hover_color = "orange";                // default: cs_thumb_hover_color = "#66FFFF"
      let cs_thumb_hover_image_vertical = "unset";          // default: cs_thumb_hover_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)"
      let cs_thumb_hover_image_horizontal = "unset";        // default: cs_thumb_hover_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)"
      const cs_thumb_border_color = "#5b5b66";              // default: cs_thumb_border_color = "#33CCFF"
    // - buttons
      const cs_buttons_color = "#5b5b66";                   // default: cs_buttons_color = "#66FFFF" "#5b5b66"/ buttons
      let cs_buttons_image_vertical = "unset";              // default: cs_buttons_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)"
      let cs_buttons_image_horizontal = "unset";            // default: cs_buttons_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)"
      const cs_buttons_hover_color = "#5b5b66";             // default: cs_buttons_hover_color = "#33CCFF"
      const cs_buttons_border_color = "#5b5b66";            // default: cs_buttons_border_color = "#33CCFF" "#5b5b66"
      let cs_buttons_hover_image_vertical = "unset";        // default: cs_buttons_hover_image_vertical = "linear-gradient(to right,transparent,rgba(255,255,255,0.5),transparent)"
      let cs_buttons_hover_image_horizontal = "unset";      // default: cs_buttons_hover_image_horizontal = "linear-gradient(to bottom,transparent,rgba(255,255,255,0.5),transparent)"
    
    /* *************************************************************************************************************************** */
      // unset background image color gradients -> flat scrollbars
      if(cs_ignore_color_gradients === true)
        cs_background_image_vertical
        = cs_background_image_horizontal
        = cs_corner_background_image
        = cs_thumb_image_vertical
        = cs_thumb_image_horizontal
        = cs_thumb_hover_image_vertical
        = cs_thumb_hover_image_horizontal
        = cs_buttons_image_vertical
        = cs_buttons_image_horizontal
        = cs_buttons_hover_image_vertical
        = cs_buttons_hover_image_horizontal
        = "unset";
    
      let custom_scrollbars_code='';
      let custom_scrollbar_arrows_code='';
     
      if(custom_scrollbars === true)
        custom_scrollbars_code=`
          slider, scrollcorner, scrollbar thumb, scrollbar scrollbarbutton {
            appearance: auto;
            -moz-default-appearance: none !important;
          }
          slider {
            background-color: ${cs_background_color} !important;
          }
          scrollbar[orient="vertical"] slider {
            background-image: ${cs_background_image_vertical} !important;
          }
          scrollbar[orient="horizontal"] slider {
            background-image: ${cs_background_image_horizontal} !important;
          }
          scrollcorner {
            background-color: ${cs_corner_background_color} !important;
            background-image: ${cs_corner_background_image} !important;
          }
          scrollbar thumb {
            background-color: ${cs_thumb_color} !important;
            border-radius: ${cs_thumb_roundness}px !important;
            box-shadow: inset 0 0 0 ${cs_thumb_border}px ${cs_thumb_border_color} !important;
          }
          scrollbar thumb[orient="vertical"] {
            background-image: ${cs_thumb_image_vertical} !important;
            min-height: ${(cs_thumb_minimal_size+cs_thumb_roundness+cs_thumb_border)}px !important;
          }
          scrollbar thumb[orient="horizontal"] {
            background-image: ${cs_thumb_image_horizontal} !important;
            min-width: ${(cs_thumb_minimal_size+cs_thumb_roundness+cs_thumb_border)}px !important;
          }
          scrollbar thumb:hover, scrollbar thumb:active {
            background-color: ${cs_thumb_hover_color} !important;
          }
          scrollbar thumb[orient="vertical"]:hover, scrollbar thumb[orient="vertical"]:active {
            background-image: ${cs_thumb_hover_image_vertical} !important;
          }
          scrollbar thumb[orient="horizontal"]:hover, scrollbar thumb[orient="horizontal"]:active {
            background-image: ${cs_thumb_hover_image_horizontal} !important;
          }
          scrollbar scrollbarbutton {
            background-color: ${cs_buttons_color} !important;
            border-radius: ${cs_buttons_roundness}px !important;
            box-shadow: inset 0 0 0 ${cs_buttons_border}px ${cs_buttons_border_color} !important;
            height: 17px !important;
            width: 17px !important;
          }
          scrollbar[orient="vertical"] scrollbarbutton {
            background-image: ${cs_buttons_image_vertical} !important;
          }
          scrollbar[orient="horizontal"] scrollbarbutton {
            background-image: ${cs_buttons_image_horizontal} !important;
          }
          scrollbar scrollbarbutton:hover {
            background-color: ${cs_buttons_hover_color} !important;
          }
          scrollbar[orient="vertical"] scrollbarbutton:hover {
            background-image: ${cs_buttons_hover_image_vertical} !important;
          }
          scrollbar[orient="horizontal"] scrollbarbutton:hover {
            background-image: ${cs_buttons_hover_image_horizontal} !important;
          }
        `;
        
      if(custom_scrollbar_arrows === true)
        custom_scrollbar_arrows_code=`
          scrollbarbutton[type="increment"],
          scrollbar[orient="vertical"] scrollbarbutton[type="decrement"],
          scrollbarbutton[type="increment"],
          scrollbar[orient="horizontal"] scrollbarbutton[type="decrement"] {
            background-repeat: no-repeat;
            background-position: center !important;  */
          }
          scrollbar[orient="vertical"] > scrollbarbutton[type="decrement"] {
            background-image: url("${ProfileDirectory}/Pfeil-hoch_hellgrau.svg") !important;
          /*  background-position: top !important;  */
          }
          scrollbar[orient="vertical"] > scrollbarbutton[type="increment"] {
            background-image: url("${ProfileDirectory}/Pfeil-runter_hellgrau.svg") !important;
          /*  background-position: bottom !important;  */
          }
          scrollbar[orient="horizontal"] > scrollbarbutton[type="decrement"] {
            background-image: url("${ProfileDirectory}/Pfeil-links_hellgrau.svg") !important;
          /*  background-position: left !important;  */
          }
          scrollbar[orient="horizontal"] > scrollbarbutton[type="increment"] {
            background-image: url("${ProfileDirectory}/Pfeil-rechts_hellgrau.svg") !important;
          /*  background-position: right !important;  */
          }
    
          /* hover */
    
          scrollbar[orient="vertical"] > scrollbarbutton[type="decrement"]:hover {
            background-image: url("${ProfileDirectory}/Pfeil-hoch_orange.svg") !important;
          }
          scrollbar[orient="vertical"] > scrollbarbutton[type="increment"]:hover {
            background-image: url("${ProfileDirectory}/Pfeil-runter_orange.svg") !important; */
          }
          scrollbar[orient="horizontal"] > scrollbarbutton[type="decrement"]:hover {
            background-image: url("${ProfileDirectory}/Pfeil-links_orange.svg") !important;
          }
          scrollbar[orient="horizontal"] > scrollbarbutton[type="increment"]:hover {
            background-image: url("${ProfileDirectory}/Pfeil-rechts_orange.svg") !important;
          }
          scrollbar[orient="vertical"] > scrollbarbutton {
            height: ${(custom_scrollbar_size_value*cs_arrows_on_buttons_buttons_size)}px !important;
            max-width: ${custom_scrollbar_size_value}px !important;
          }
          scrollbar[orient="horizontal"] > scrollbarbutton {
            width: ${(custom_scrollbar_size_value*cs_arrows_on_buttons_buttons_size)}px !important;
            max-height: ${custom_scrollbar_size_value}px !important;
          }
        `;
    
      Components.classes["@mozilla.org/content/style-sheet-service;1"]
        .getService(Components.interfaces.nsIStyleSheetService)
          .loadAndRegisterSheet(Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(`
            ${custom_scrollbars_code}
            ${custom_scrollbar_arrows_code}
      `), null, null),
    
      Components.classes["@mozilla.org/content/style-sheet-service;1"]
        .getService(Components.interfaces.nsIStyleSheetService).AGENT_SHEET);
    
    })()
    
    /* ************************************************************************************************************************* */
    /* Aris neue Version  https://github.com/Aris-t2/CustomJSforFx/blob/master/scripts/custom_scrollbars.uc.js ***************** */
    /* ************************************************************************************************************************* */
    Alles anzeigen

    Kennt jemand die Lösung?

Unterstütze uns!

Jährlich (2025)

104,5 %

104,5% (679,10 von 650 EUR)

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