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

  • UserCSSLoader (2025)

    • Mira_Belle
    • 13. September 2025 um 13:21

    Versuche es einfach mal nur mit:

    CSS
    /* UserStyles Loader Button */
    
    #usercssloader-menu-item {
    	background-image: url("../icons/CSS.webp");
    	background-position: center;
    	background-repeat: no-repeat;
    	background-size: 15px;
    	margin-top: 1px !important;
    }
    
    #usercssloader-menu-item:hover {
    	background-color: var(--toolbarbutton-hover-background);
    }
    
    #usercssloader-menu-item #usercssloader-menu > .menu-text[value="CSS"] {
    	opacity: 0;
    }
    Alles anzeigen
  • Meine Version des App-Menüs (JavaScript)

    • Mira_Belle
    • 13. September 2025 um 10:46

    Speravir So, eine große Herausforderung wird sein, aus zwei nur ein Skript zu machen.

    Denn ich finde es echt doof, dass im Hintergrund das userCSSLoader-Skript laufen muss,
    weil auf Funktionen (Code) in diesem zugegriffen wird!

    Da habe ich also noch was vor.

  • UserCSSLoader (2025)

    • Mira_Belle
    • 13. September 2025 um 10:42

    Boersenfeger Speravir fragte Dich nach Deiner CSS, nicht nach Deinem JavaScript!

    Hast Du die Änderungen aus #63 in Deinem CSS (#28) vorgenommen?

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

    • Mira_Belle
    • 11. September 2025 um 17:04

    Es funktioniert!

    Jetzt brauch ich nur noch "gescheite" Symbole:!:

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

    • Mira_Belle
    • 11. September 2025 um 10:39

    Speravir Ich denke, ich hab's. Na ja fast!
    Erste Voraussetzung, das userCSSLoader-Skript muss vorhanden sein und vor dem Appmenü-Skript geladen werden.

    Und dann das "neue" Appmenü-Skript:

    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',
            },
          ], */
          subdirs: [
            {
                name: 'Firefox Verzeichnisse',
                image: `${ProfilePath}/folder_currentColor.svg`,
            },
            {
                name: 'Firefox Funktionen',
                image: `${ProfilePath}/settings_currentColor.svg`,
            },
            {
                name: 'separator',
            },
            {
                name: 'CSS-Loader',
                image: `${ProfilePath}/default-browser-red.svg`,
            },
            {
                name: 'Style-Loader-Menü',
                image: `${ProfilePath}/default-browser-red.svg`,
            },
            {
                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);
        }
      },
    
      buildCSSLoaderMenu: function(parentPopup) {
          // Erst alle alten Einträge löschen
          while (parentPopup.firstChild) {
              parentPopup.removeChild(parentPopup.firstChild);
          }
          // Nur wenn UCL existiert und initialisiert ist
          if (typeof UCL === 'undefined' || !UCL.readCSS) return;
          // Alle CSS-Dateien aus UCL.readCSS auflisten
          for (let leafName of Object.keys(UCL.readCSS)) {
              let CSS = UCL.readCSS[leafName];
              let menuitem = document.createXULElement("menuitem");
              menuitem.setAttribute("label", leafName);
              menuitem.setAttribute("type", "checkbox");
              menuitem.setAttribute("checked", CSS.enabled);
              menuitem.addEventListener("command", () => UCL.toggle(leafName));
              menuitem.addEventListener("click", (event) => {
                  if (event.button === 1) {
                      UCL.toggle(leafName);
                      event.preventDefault();
                  }
              });
              menuitem.addEventListener("mouseup", (event) => {
                  if (event.button === 2) {
                      closeMenus(event.target);
                      UCL.edit(UCL.getFileFromLeafName(leafName));
                      event.preventDefault();
                  }
              });
              parentPopup.appendChild(menuitem);
          }
      },
      buildStyleLoaderMenu: function(parentPopup) {
          // Erst alle alten Einträge löschen
          while (parentPopup.firstChild) {
              parentPopup.removeChild(parentPopup.firstChild);
          }
          // Styles importieren
          let rebuildItem = document.createXULElement("menuitem");
          rebuildItem.setAttribute("label", "Styles importieren");
          rebuildItem.addEventListener("command", () => UCL.rebuild());
          parentPopup.appendChild(rebuildItem);
          // CSS-Datei erstellen
          let createCSS = document.createXULElement("menuitem");
          createCSS.setAttribute("label", "CSS-Datei erstellen");
          createCSS.addEventListener("command", () => UCL.create());
          parentPopup.appendChild(createCSS);
          // CSS-Ordner öffnen
          let openFolder = document.createXULElement("menuitem");
          openFolder.setAttribute("label", "CSS-Ordner öffnen");
          openFolder.addEventListener("command", () => UCL.openFolder());
          parentPopup.appendChild(openFolder);
          // Chrome-Ordner öffnen
          if (UCL.showChrome === 1) {
              let openChromeFolder = document.createXULElement("menuitem");
              openChromeFolder.setAttribute("label", "Chrome-Ordner öffnen");
              openChromeFolder.addEventListener("command", () => UCL.openCHRMFolder());
              parentPopup.appendChild(openChromeFolder);
          }
          // userChrome.css bearbeiten
          let editChromeItem = document.createXULElement("menuitem");
          editChromeItem.setAttribute("label", "userChrome.css bearbeiten");
          editChromeItem.addEventListener("command", () => UCL.editUserCSS("userChrome.css"));
          parentPopup.appendChild(editChromeItem);
          // userContent.css bearbeiten
          let editContentItem = document.createXULElement("menuitem");
          editContentItem.setAttribute("label", "userContent.css bearbeiten");
          editContentItem.addEventListener("command", () => UCL.editUserCSS("userContent.css"));
          parentPopup.appendChild(editContentItem);
      },
    
    
      onpopupshowing: function() {
          if (this._externalAppPopup === null) return;
          var ExternalAppPopup = this._externalAppPopup;
          // Erst alle alten Einträge löschen
          while (ExternalAppPopup.firstChild) {
              ExternalAppPopup.removeChild(ExternalAppPopup.firstChild);
          }
          // Subdirs neu aufbauen
          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;
              }
          }
          // Hier die neuen Menüpunkte einfügen
          if (typeof UCL !== 'undefined') {
              this.buildCSSLoaderMenu(Appmenu.subdirPopupHash['CSS-Loader']);
              this.buildStyleLoaderMenu(Appmenu.subdirPopupHash['Style-Loader-Menü']);
          }
          // Apps und Configs neu aufbauen
          this.handleRelativePath(this.toolbar.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);
          }
          for (let config of this.toolbar.configs) {
              var configItem;
              if (config.name == 'separator') {
                  configItem = document.createXULElement('menuseparator');
              } else {
                  configItem = 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 subdirName in Appmenu.subdirPopupHash) {
                  if (!Appmenu.subdirPopupHash[subdirName].hasChildNodes()) {
                      Appmenu.subdirMenuHash[subdirName].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
  • Custom toolbars buttons have no icons

    • Mira_Belle
    • 9. September 2025 um 08:58

    Sören Hentzschel Danke für die ausführliche Erklärung.
    Richtig, wie in dem Beispiel, nur so kenne ich das. Mit dem Backslash hatte ich tatsächlich zuvor noch nie gesehen.
    Wie schreibt Andreas so gerne, man lernt nie aus. ;)

  • Custom toolbars buttons have no icons

    • Mira_Belle
    • 8. September 2025 um 19:41

    Ah, verstehe.
    Es ist ja anders als bei dem, was ich so kenne, wenn CSS eingebunden wird.

  • Custom toolbars buttons have no icons

    • Mira_Belle
    • 8. September 2025 um 09:16

    :/

    Habe mir beide Skripte mal genauer angeschaut!
    Das CSS zum einbinden eines eigenen Symbols ist da vorhanden, aber ...

    Code
      var uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent('\
    	\
    	  #about-button .toolbarbutton-icon {\
    		list-style-image: url("chrome://global/skin/icons/defaultFavicon.svg"); /* icon / path to icon */ \
    		fill: dimgray; /* icon color name/code */\
    	  }\
    	\
      '), null, null);

    ... mich irritieren die Backslashes.
    Habe es jetzt nicht ausprobiert. Eventuell, sind die das Problem.

  • UserCSSLoader (2025)

    • Mira_Belle
    • 8. September 2025 um 09:04

    Ich verstehe Dich schon!
    Und was den Header angeht, inkl. Bedienungsanleitung, es ist einfach zu viel Text!
    Aber das kann ja alles so im "normalen" Skript bleiben.
    Die Überlegung ist ja, für einfachere Gemüter das gleiche Skript halt in einer Light-Version anzubieten.
    Und in dieser Version den Code so zur Verfügung zu stellen, dass eben automatisch der Explorer unter Windows,
    und entsprechen in anderen BS sich der Dateimanager öffnet.
    Sinn und Zweck dieser Überlegung!
    So einige Anwender sind mit den Einstellungen von Farben schon überfordert, geschweige denn
    eigene Symbole zu integrieren.
    Es soll also für jene einfach ein Skript geben, dass sie installieren können und das dann einfach funktioniert.

    Und der Header, wie Du schon schreibst, ist Jahre alt. Eventuell könnte man den auch mal überarbeiten.
    Aber das sollte man mit bedacht machen.
    Aber Du hast recht, Speravir müsste sich dazu äußern,

  • UserCSSLoader (2025)

    • Mira_Belle
    • 7. September 2025 um 20:05
    Zitat von Endor

    Denn der Großteil der Benutzer
    will sich gar nicht näher mit der Materie befassen müssen.
    Es soll funktionieren und fertig.

    Genau so ist es, deshalb ein normales Skript, für Leute die auch den Header, bzw. die Anleitung lesen
    und eine Light-Version, wo gar nicht so viel Text steht, und das einfach funktioniert!
    Wer dann extra Software nutzen möchte, soll sich mit dem normalen Skript auseinandersetzen müssen,
    oder selber in der Lage sein, das Light-Skript sich seinen Wünschen anzupassen.

    Wenn User das normale Skript nutzen wollen und wir hier wegen der vielen Konfigurationsmöglichkeiten
    mit Fragen zugeschmissen werden, hilft das doch auch niemandem, oder?

    2002Andreas schrieb mir, manchmal ist wenige mehr.
    Und ich denke, er hat da absolut recht.

    bege Du hast der Header (Kopf) mit 25 Zeilen. Ich bin mal frech, unwichtig.
    Danach kommen noch einmal ca. 50 Zeilen Bedienungsanleitung und andere Infos.
    Glaubst echt, das liest sich ein Anwender durch?
    Ja, Leute wie Du und ich, wie so manch anderen hier onBoard, wir lesen so etwas.
    aber die anderen?
    Die wollen einfach ein Skript, das funktioniert.
    Und fragen dann halt, wenn Kleinigkeiten geändert werden sollen.

    Denk an unseren Wackeldackel, oder schau in den Thread mit der Scrollbar.
    (Murmeltier, ich möchte den User hier nicht brandmarken, er gibt sich wirklich Mühe)

  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 7. September 2025 um 16:45

    OK, dann ist eben 17px normal, nur wer sieht den Unterschied von einem Pixel?
    Aber egal, es klappt ja,
    nur haut bei mir irgendwas dazwischen.
    Muss mal schauen, welches CSS das ist! Hab' ja den CSSloader,
    damit sollte das dann schnell von der Hand gehen.

    PS: In einem anderen Profil, ohne viele Anpassungen, greift das auch auf die horizontale Scrollbar!


    Nachtrag!
    Der Fuchs bringt mich noch um den Verstand!
    Die userChrome.css bearbeitet, alle import deaktiviert.
    Scrollbar unten und an der Seite breit!
    So nach und nach alles wieder aktiviert. Scrollbar unten ist immer noch breit.
    Ja, verdammt, wo lag denn das Problem?

  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 7. September 2025 um 16:28
    Zitat von grisu2099

    Hier sind beide Leisten genau 16px breit... :/

    Mach mal breiter!! Denn 16px ist normal!

  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 7. September 2025 um 16:19

    grisu2099 Warum aber wirkt das nur auf die vertikale Leiste,
    nicht aber auf die horizontale?

  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 7. September 2025 um 15:53

    grisu2099 cool.

    2002Andreas Den Firefox auch neu gestartet? Denn bei mir hat es funktioniert!

  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 7. September 2025 um 12:18

    Mh, als ich so jung war, war es eine geile Zeit! Loveparade in Berlin, Sound of Frankfurt und vieles mehr.

    Aber zurück zum Thema!

    Boersenfeger Wie mir scheint, hast Du nur die Möglichkeit über das BS die Breite der Scrollbar breiter zu machen.
    Hat halt den Nachteil, bzw. zur Auswirkung, dass dies im Prinzip alle Programmfenster betrifft.

  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 7. September 2025 um 12:02

    2002Andreas Oh Herr im Himmel, ich bin sooo blöd!
    Schon tausendmal diese Seite genutzt und gerade jetzt nicht mehr daran gedacht.
    Alzheimer lässt grüßen. Ich werde alt, oder vielleicht bin ich es auch schon.

  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 7. September 2025 um 11:54
    Zitat von milupo

    scrollbar-width kann nur auto, thin und none sowie globale Werte wie inherited und unset annehmen.

    Ah, danke. Wo und wie finde ich so etwas heraus? Denn ich stochere z.Z. immer nur so herum.

    Zitat von 2002Andreas

    Die Breite lässt sich nicht per CSS sonderlich verändern.

    Schade, wo bei recht schmal ja wohl geht!
    scrollbar-width: thin !important;

    Nur eben breiter, halt nicht.

  • Skript zum Anpassen der Scrollbar funktioniert nicht mehr richtig

    • Mira_Belle
    • 7. September 2025 um 11:09
    Zitat von Boersenfeger

    Nur damit dies nicht aus der Aufmerksamkeit entfleucht.... ;)

    Es entfleucht nicht!
    Ich habe nur leider noch keine Möglichkeit gefunden die Scrollbar breiter zu machen!
    Schmaler ginge, breiter aber warum auch immer nicht!

    Den Code müsste sich ein Profi mal anschauen.

    JavaScript
      if(thin_scrollbars === true)
    	thin_scrollbars_code=`
    		:root{
    		  scrollbar-width: thin !important;
    		}
    		scrollbar[orient="vertical"] scrollbarbutton {
    		  height: 14px !important;
    		  width: 7px !important;
    		}
    		scrollbar[orient="horizontal"] scrollbarbutton {
    		  height: 7px !important;
    		  width: 14px !important;
    		}
    	`;
    Alles anzeigen

    Habe thin schon durch thick und auch wide ersetzt, nutzt nichts.

  • UserCSSLoader (2025)

    • Mira_Belle
    • 7. September 2025 um 10:04

    Vielleicht baut ihr noch eine Funktion ein, die abfragt, ob ein Dateimanager eingetragen ist,
    und wenn nicht, dass dann der alte Code als Backup greift.

    Ist nur so eine Idee!
    Ihr solltet daran denken, dass viele den Header gar nicht oder nur teilw. lesen!

    Das mit der Bedienungsanleitung ist ja echt eine tolle Idee, nicht ganz neu, aber hat schon im Skript
    für die Scrollbar nicht funktioniert.

    Macht das Skript so einfach wie nur möglich, und überlegt, ob da wirklich alles was geht auch umgesetzt werden muss!
    Eventuell, wie z.B. bei dem MultirowSkript zwei Versionen.
    Eine mit allem und eine "Light" Version. Bei der "großen" würde ich dann den Header so lassen, bei der "Light" den
    abspecken, bis auf das absolut Nötigste.

    Und gerade habe ich mir selber einen Tip gegeben, denn das werde ich wohl auch so umsetzen im Scrollbarskript.

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

    • Mira_Belle
    • 7. September 2025 um 09:36
    Zitat von Speravir

    Ja, aber ich bin auch kein Experte.

    Ach, schade. Dann muss ich blindes Huhn weiter, mit viel hochprozentiger Schnaps ...

    Zitat von Speravir

    Sehe ich das richtig, ...

    Kann schon sein, bin mir auch nicht mehr so sicher wie ich auf dieses Skript aufmerksam wurde.

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