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. edvoldi

Beiträge von edvoldi

  • extras_config_menu.uc.js

    • edvoldi
    • 9. Oktober 2026 um 17:27

    Danke, funktioniert!


    Zitat von Mira_Belle

    Es gibt von dem Skript eine aktuellere Version!

    Werde ich nach meinem Urlaub anpassen und testen

  • extras_config_menu.uc.js

    • edvoldi
    • 9. Oktober 2026 um 17:15

    Stimmt, mache ich aber selten.
    Woran könnte das liegen?

  • extras_config_menu.uc.js

    • edvoldi
    • 9. Oktober 2026 um 17:07
    Zitat von Mira_Belle

    2002Andreas Das von Dir gepostete Skript funktioniert aber nur im Hauptfenster!

    Was meinst Du damit?

  • extras_config_menu.uc.js

    • edvoldi
    • 9. Oktober 2026 um 16:35
    Zitat von 2002Andreas

    Aber jetzt ;)

    Ja, funktioniert.
    was hast Du denn geändert?
    Und vielen Dank natürlich!

  • extras_config_menu.uc.js

    • edvoldi
    • 9. Oktober 2026 um 16:27
    Zitat von 2002Andreas

    Teste bitte:

    Leider nein!

  • extras_config_menu.uc.js

    • edvoldi
    • 9. Oktober 2026 um 16:21
    Zitat von 2002Andreas

    Dein genutztes Skript solltest du dann aber schon dazu posten ;)

    JavaScript
    // ==UserScript==
    // @name           extras_config_menu.uc.js
    // @compatibility  Firefox 5*.*
    // @include        main
    // @version        1.0.20190504
    // @edit           @aborix 7/21 CSS Dateien als Untermenü eingefügt 
    // @edit           @2002Andreas 8/21 Shadow CSS Dateien als Untermenü + Ordner eingefügt
    // @edit 		   @BrokenHeart	1/25 Anpass. wg. Änderung der Sicherheitsrichtlinien bei 'inlineEvents'
    // ==/UserScript==
    
    var uProfMenu = {
      // Beginn der Konfiguration
      // In der folgenden Zeile (11) den Pfad zum Texteditor eintragen (unter Ubuntu 10.04 z.B.: '/usr/bin/gedit'). Bei Fehleintrag wird view_source.editor.path ausgelesen:
      //TextOpenExe: 'C:\\Program Files (x86)\\Notepad++\\notepad++.exe',
      TextOpenExe: 'C:\\Program Files\\Notepad++\\notepad++.exe',
      // Falls gewuenscht, in Zeile 15 einen Dateimanager eintragen (komplett leer lassen fuer Dateimanager des Systems) Beispiele:
      // vFileManager: 'E:\\Total Commander\\Totalcmd.exe',
      // vFileManager: 'C:\\Program Files (x86)\\FreeCommander\\FreeCommander.exe'
      vFileManager: '',
      // In der folgenden Zeile (19) 'menu' eintragen, damit es unter "Extras" als Menue erscheint, sonst die id des gewuenschten
      // Elements *nach* dem der Button erscheinen soll (z.B. 'urlbar', 'searchbar', 'undoclosetab-button','abp-toolbarbutton')
      // Bitte nicht so etwas wie die Menue- oder Navigationsleiste (sondern einen Menuepunkt oder einen Button mit id auf diesen Leisten) eintragen:
      warpmenuto: 'print-button',
     // Unter Linux sollte/kann versucht werden, die userChromeJS-Skripte zu sortieren, unter Windows ist das evtl. nicht noetig (die Sortierung wird Gross- und Kleinschreibung *nicht* beruecksichtigen - dazu wird die sort()-Funktion entsprechend mit einer Vergleichsfunktion aufgerufen)
      sortScripts: 0,   // 1 zum Erzwingen der Sortierung
      // Einbindung GM-Skripte-Ordner (0: nein, 1: Greasemonkey [Profil-Verzeichnis], 2: UserScriptLoader [Chrome-Verzeichnis], 3: Scriptish [Profil-Verzeichnis]):
      gmOrdner: 0,
      // Einbindung CSS-Ordner (0: nein, 1: UserCSSLoader-Ordner im Chrome-Verzeichnis):
      cssOrdner: 1,
      // In Zeile 30 gueltige about:Adressen eintragen, die ebenfalls aufgerufen werden sollen.
      // - Zum Ausblenden: abouts: [],
      // - Damit die about:-Seiten nicht als Untermenue, sondern direkt als Menuepunkte aufgefuehrt werden, muss das erste Element '0' sein:
      // abouts: ['0','about:about','about:addons','about:cache','about:config','about:support'],
       abouts: ['about:about','about:addons','about:buildconfig','about:cache','about:config','about:crashes','about:debugging','about:keyboard','about:logins','about:memory','about:performance','about:plugins','about:preferences','about:profiles','about:protections','about:studies','about:support'],
      // Die normalen Firefox-Einstellungen auch zur Verfuegung stellen (0: nein, 1: ja):
      showNormalPrefs: 1,
      // Stellt "Skriptliste in Zwischenablage" zur Verfuegung (1: ja, 2: mit getrennter Nummerierung, 3: mit gemeinsamer Nummerierung) oder nicht (0):
      enableScriptsToClip: 2,
      // Um den Eintrag "Neustart" zu erzwingen (falls z.B. das andere Skript zu spaet eingebunden und nicht erkannt wird), auf 1 setzen:
      enableRestart: 0,
      // Ende der Konfiguration
    
      init: function() {
    	  if (location.href !== 'chrome://browser/content/browser.xhtml') return;
        if (this.warpmenuto.toLowerCase() == 'menu') {
          // aufgrund des gewaehlten warpmenuto als Untermenue von Extras anlegen
          var zielmenu = document.getElementById('menu_ToolsPopup');
          if (zielmenu==null) {
            userChrome.log("extras_config_menu.uc.js findet Zielmenue nicht, evtl. weil ein anderes Fenster als das Hauptfenster " +
                           "geoeffnet wurde. Falls dieser Fehler auch im Hauptfenster auftritt, bitte die vorgehende Definition " +
                           "von 'zielmenu' kontrollieren.");
           return
          }
          var menu = zielmenu.appendChild(this.createME("menu","Config Men\u00FC",0,0,"ExtraConfigMenu"));
          menu.setAttribute("class","menu-iconic");
          menu.setAttribute("ondblclick","openTrustedLinkIn('about:config', 'tab');");
         } else {
    		 
    	/*	 
          // als Button nach dem per warpmenuto gewaehlten Element anlegen (s. Kommentar ueber warpmenuto im Konfigurationsabschnitt)
          var zielmenu = document.getElementById(this.warpmenuto);
          if (zielmenu==null) {
            userChrome.log("extras_config_menu.uc.js findet Zielpunkt '"+this.warpmenuto+"' nicht, evtl. weil ein anderes Fenster als das Hauptfenster " +
                           "geoeffnet wurde. Falls dieser Fehler auch im Hauptfenster auftritt, bitte die vorgehende Definition " +
                           "von 'warpmenuto' kontrollieren.");
            return;
          }
          var menu = zielmenu.parentNode.insertBefore(document.createXULElement('toolbarbutton'), zielmenu.nextSibling);
          menu.setAttribute("id", "ExtraConfigMenu-button");
          menu.setAttribute("class", "toolbarbutton-1");
          menu.setAttribute("type", "menu");
          menu.setAttribute("tooltiptext", "Extra Config Menü\nMittelklick \öffnet about:config");
          menu.setAttribute("onclick", "if (event.button === 2 && !this.open) {openTrustedLinkIn('about:config','tab')};");
        }
    	*/
    	
    	 // als verschiebbaren Button anlegen
          if (window.__SSi == "window0") {
            CustomizableUI.createWidget({
              id: "ExtraConfigMenu-button",
              defaultArea: CustomizableUI.AREA_NAVBAR,
              label: "Extra Config Menü",
              tooltiptext: "Extra Config Menü\nRechtsklick \öffnet about:config"
            });
    		
          }
          var menu = document.getElementById("ExtraConfigMenu-button");
          menu.setAttribute("type", "menu");
    	  menu.addEventListener('click', function(event) {
    			if (event.button == 2 && !this.open) { 
    				openTrustedLinkIn("about:config", "tab");
    				event.preventDefault();
    			};
    	 },true);
    	  
        }
    	
        //ab hier ist alles gleich, egal ob Button oder Menue
        var css = " \
          #ExtraConfigMenu, #ExtraConfigMenu-button { \
            list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnElEQVR4Xm2RzYtbZRSHn/fr3pvJzTB3qiNM2k2pMBUGhEHaqsUqdeFGQalCobgREaFu/B/cqCtxVSjoQhBEQRBmIfWDKgNGJUPt0Nhah9JJ4iSd5E6+bu5972tAO4SS5/DjXZ1znsMrNiq1eikMQqYYJCmjxNH5+zdW777L0J5KKl9VPmnf+ut9KWkwhbheuzNcOVYOmGKc5iRO0r1ykeXCx0h7kt4fC3z5wfqbQnAJwQHa5S7jAZSRuJ0mkf81cheobhBXZa+ri1uptQjHAZoZCEC1PiPgDuwxCfwerBU7b73zXn//3usCcdt4HkZ7SGZg431U51NUCgwlO3cV/bVXhR/6p9ut+nP9QYeNn7/n8qUPZxvQ/Q6VVWHk4ZqWRvlJjpx9hcGfW2wO95N2q8m3618A2WwDt/0RplSAXsBed57eyossHl5GYdHacG3zGpADM06wjQ1UUIN+CLHPvfAxojPnKLiE+bDE1R9+5GatAmgPeGCAteQ7l5GBhGSyuROyd/gFouUyWkqEErR2mwXAAA8BRS0AgMQBjSra30ZkEeDzz9Dn4ZcvMO51SMcJcTdGChmA0ABA6cAgzyG3I8jLEBylV4fWoaeIc0V7t0Uv7pFbC+CA+28mp/8+SwXKnMVmz1O9HpE+eobMZdjcoY1GIHD/NwIdoH1fBaNguzlg88pVyoUi4vTbFI8eJxsNAIfSkrliESllH/L0v0jktNNomFGv1TFrL3Fo9QSMR3jaEEXzLC09gjaKp595No0WjyCEB4zRclICUMDxtRMce/wJ1MIi2SglXShhfI/cOjxPoZRmbq4gXzt/gVrtBrdvbiG+Wf+p/mvll1BpiVAGhCDPxuAUDotz4HKHlIJON6bRbL4hhPjcMx5mkn8BBLEUrsVZbq0AAAAASUVORK5CYII=) !important; \
          } \
          #ExtraConfigMenu-button > dropmarker, #ExtraConfigMenu-button > hbox > .toolbarbutton-menu-dropmarker { \
            display: none !important; \
          }";
        var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
        var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
        sss.loadAndRegisterSheet(uri,sss.AGENT_SHEET);
    	menu.addEventListener('popupshowing', function(event) {
    			uProfMenu.getScripts(0);
    			uProfMenu.getCss(3);
    			uProfMenu.getCss(4);
    			uProfMenu.getCss(5);
    	 },true);
    	
        var menupopup = menu.appendChild(this.createME("menupopup",0,0,0,"ExtraConfigMenu-popup"));
        //menupopup.appendChild(this.createME("menuitem","userChrome.js","uProfMenu.edit(0,'userChrome.js');","uProfMenu_edit",0));
        // Anlegen von Untermenues fuer die userChromeJS-Skripte (befuellt werden sie spaeter)
        var submenu=menupopup.appendChild(this.createME("menu","uc.js",0,0,"submenu-ucjs"));
        var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-ucjs-items"));
        // var submenu=menupopup.appendChild(this.createME("menu","uc.xul",0,0,"submenu-ucxul"));
        // var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-ucxul-items"));
        if (this.enableScriptsToClip) menupopup.appendChild(this.createME("menuitem","Skriptliste in Zwischenablage","uProfMenu.getScripts(1)","uProfMenu_clipboard",0));
         // Ende Anlegen von Untermenues fuer die userChromeJS-Skripte
        menupopup.appendChild(document.createXULElement('menuseparator'));
        // Einbindung von Konfigdateien
        menupopup.appendChild(this.createME("menuitem","userChrome.js","uProfMenu.edit(0,'userChrome.js');","uProfMenu_edit",0));
    	menupopup.appendChild(this.createME("menuitem","userChrome.css","uProfMenu.edit(0,'userChrome.css');","uProfMenu_edit",0));
        menupopup.appendChild(this.createME("menuitem","userContent.css","uProfMenu.edit(0,'userContent.css');","uProfMenu_edit",0));
    	menupopup.appendChild(this.createME("menuitem","userChromeShadow.css","uProfMenu.edit(0,'userChromeShadow.css');","uProfMenu_edit",0));	
        menupopup.appendChild(this.createME("menuitem","prefs.js","uProfMenu.edit(1,'prefs.js');","uProfMenu_edit",0));
        menupopup.appendChild(this.createME("menuitem","user.js","uProfMenu.edit(1,'user.js');","uProfMenu_edit"),0);
        // Ende Einbindung von Konfigdateien
        menupopup.appendChild(document.createXULElement('menuseparator'));
       // Einbindung von Ordnern
        switch (this.gmOrdner) {
          case 1:
            menupopup.appendChild(this.createME("menuitem","GM Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'gm_scripts');","uProfMenu_folder"),0);
            break;
          case 2:
            menupopup.appendChild(this.createME("menuitem","USL Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'UserScriptLoader');","uProfMenu_folder"),0);
            break;
          case 3:
            menupopup.appendChild(this.createME("menuitem","Scriptish Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'scriptish_scripts');","uProfMenu_folder"),0);
            break;
        }
        if (this.cssOrdner) {
        menupopup.appendChild(this.createME("menuitem","CSS-Ordner","uProfMenu.dirOpen('C:\\\\Dropbox\\\\Chrome\\\\Firefox\\\\CSS-Ordner\\\\css-dateien');","uProfMenu_folder"),0);
    	menupopup.appendChild(this.createME("menuitem","CSSWeb-Ordner","uProfMenu.dirOpen('C:\\\\Dropbox\\\\Chrome\\\\Firefox\\\\CSS-Ordner\\\\css-Webdateien');","uProfMenu_folder"),0);
    	}
        menupopup.appendChild(this.createME("menuitem","Chromeordner","uProfMenu.prefDirOpen('UChrm');","uProfMenu_folder"),0);
        menupopup.appendChild(this.createME("menuitem","Profilordner","uProfMenu.prefDirOpen('ProfD');","uProfMenu_folder"),0);
        menupopup.appendChild(this.createME("menuitem","Addonordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'extensions');","uProfMenu_folder"),0);
        menupopup.appendChild(this.createME("menuitem","Installationsordner","uProfMenu.prefDirOpen('CurProcD');","uProfMenu_folder"),0);
        menupopup.appendChild(this.createME("menuitem","Startup-Cacheordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfLD')+uProfMenu.getDirSep()+'startupCache');","uProfMenu_folder"),0);
        // Ende Einbindung von Ordnern
        // Einbindung von abouts
        if (this.abouts.length>0) {
          menupopup.appendChild(document.createXULElement('menuseparator'));
          // falls der erste Eintrag des Arrays = '0' ist, dann kein Untermenue anlegen, sondern direkt als Menuepunkte einbinden
          if (this.abouts[0]=='0') {
            for (var i = 1; i < this.abouts.length; i++) {
            menupopup.appendChild(this.createME("menuitem",this.abouts[i],"openTrustedLinkIn('"+this.abouts[i]+"','tab')","uProfMenu_about"),0);
            }
           } else {
            // der erste Eintrag des arrays ist ungleich '0', deshalb als Untermenue einrichten
            var submenu = menupopup.appendChild(this.createME("menu","uc.js",0,0,"submenu-about"));
            var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-about-items"));
            this.fillMenu("submenu-about","submenu-about-items", "about:",this.abouts,"uProfMenu_about",1);
          }
        }
        // Ende Einbindung von abouts
        // Separator, falls dieser nicht schon durch abouts generiert wurde und weitere Menuepunkte folgen werden
        if (this.abouts.length==0 && (this.showNormalPrefs || typeof(ToolRstartMod) != "undefined")) menupopup.appendChild(document.createXULElement('menuseparator'));
        // Falls gewuenscht (s. Konfigurationsabschnitt), Zugriff auf die normalen Einstellungen
    	if (this.showNormalPrefs) menupopup.appendChild(this.createME("menuitem","Einstellungen","try{openOptionsDialog();}catch(e){openPreferences();}","uProfMenu_prefs"),0);
        // Falls addRestartButton installiert ist, Neustart zur Verfuegung stellen (addRestartButton 1.0.20120105mod erforderlich)
       if(this.enableRestart) menupopup.appendChild(this.createME("menuitem","Neustart",
        "Services.appinfo.invalidateCachesOnRestart(); Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit,0);"));
        },
    
      getDirSep:function() {
        // Betriebssystem nach https://developer.mozilla.org/en/Code_snippets/Miscellaneous ermitteln
        var osString = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS;
        var dirsep = "/";
        switch(osString) {
          case "WINNT":
            dirsep = "\\";
            break;
          case "Linux":
            dirsep = "/";
            break;
          case "Darwin":
            dirsep = "/";
            break;
        }
        return dirsep;
      },
    
      edit:function(OpenMode,Filename){
        var Path = "";
        var dSep = this.getDirSep();  // die Trennzeichen zwischen Ordnern abhaengig vom Betriebssystem machen
        switch (OpenMode){
          //Current is Chrome Directory
          case 0:
            var Path = this.getPrefDirectoryPath("UChrm") + dSep + Filename;
            break;
          //Current is Profile Directory
          case 1:
            var Path = this.getPrefDirectoryPath("ProfD") + dSep + Filename;
            break;
          //Current is Root
          case 2:
            var Path = Filename;
            break;
          //Current is CSS folder
          case 3:
            var Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSS" + dSep + Filename;
            break;
          //Current is CSSWeb folder
          case 4:
            var Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSWeb" + dSep + Filename;
            break;
    		//Current is CSSShadow folder
          case 5:
            var Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSShadow" + dSep + Filename;
            break;
        }
        this.launch(this.TextOpenExe,Path);
      },
    
      dirOpen:function(Path){
        if (this.vFileManager.length != 0) {
          var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
          var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
          var args = [Path];
          file.initWithPath(this.vFileManager);
          process.init(file);
          // Verzeichnis mit anderem Dateimanager oeffnen
          process.run(false, args, args.length);
         } else {
          // Verzeichnis mit Dateimanager des Systems oeffnen
          var dir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
          dir.initWithPath(Path);
          dir.launch();
        }
      },
    
      prefDirOpen:function(prefDir){
        Path = this.getPrefDirectoryPath(prefDir);
        this.dirOpen(Path);
      },
    
      getPrefDirectoryPath:function(str){
        // get profile directory
        var file = Components.classes["@mozilla.org/file/directory_service;1"]
          .getService(Components.interfaces.nsIProperties)
          .get(str, Components.interfaces.nsIFile);
        if (str == 'CurProcD') {
          file = file.parent;
        };
        return file.path;
      },
    
      launch:function(RanPath,OpenPath){
        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
        var proc = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
        var args = [OpenPath];
        file.initWithPath(RanPath);
        // falls der im Konfigurationsabschnitt definierte Editor nicht gefunden wird, auf Einstellung in about:config ausweichen:
        if (!file.exists()) {
          var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
          RanPath = pref.getCharPref("view_source.editor.path");
          file.initWithPath(RanPath);
        }
        proc.init(file);
        proc.run(false, args, args.length);
      },
    
      stringComparison:function(a, b){
        a = a.toLowerCase();
        a = a.replace(/ä/g,"a");
        a = a.replace(/ö/g,"o");
        a = a.replace(/ü/g,"u");
        a = a.replace(/ß/g,"s");
        b = b.toLowerCase();
        b = b.replace(/ä/g,"a");
        b = b.replace(/ö/g,"o");
        b = b.replace(/ü/g,"u");
        b = b.replace(/ß/g,"s");
        return(a==b)?0:(a>b)?1:-1;
      },
    
      getScripts:function(iType) {
        // Arrays (jeweils ein Array fuer uc.js und uc.xul) nehmen Namen der gefundenen Skripte auf
        let ucJsScripts = [];
        let ucXulScripts = [];
        // Suchmuster, also die Dateierweiterungen uc.js und uc.xul
        let extjs = /\.uc\.js$/i;
        //let extxul = /\.uc\.xul$/i;
        let aFolder = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path);
        // files mit Eintraegen im Chrome-Ordner befuellen
        let files = aFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
        // Ordner bzw. files durchlaufen und kontrollieren, ob gesuchte Dateien dabei sind
        while (files.hasMoreElements()) {
          let file = files.getNext().QueryInterface(Ci.nsIFile);
          // keine gewuenschte Datei, deshalb continue
          //if (!extjs.test(file.leafName) && !extxul.test(file.leafName)) continue;
          // uc.js gefunden -> im Array ablegen
          if (extjs.test(file.leafName)) ucJsScripts.push(file.leafName);
          // uc.xul gefunden -> im Array ablegen
          //if (extxul.test(file.leafName)) ucXulScripts.push(file.leafName);
        }
        if (this.sortScripts) {
          ucJsScripts.sort(this.stringComparison);
          //ucXulScripts.sort(this.stringComparison);
        }
        // Aufruf der naechsten Methoden um die beiden Untermenues oder die Zwischenablage zu befuellen
        if (iType==0) {
          this.fillMenu("submenu-ucjs","submenu-ucjs-items", "Meine Scripte",ucJsScripts,"uProfMenu_ucjs",0);
          //this.fillMenu("submenu-ucxul","submenu-ucxul-items", "uc.xul",ucXulScripts,"uProfMenu_ucxul",0);
         } else {
          var result = this.fillClipboardValue(ucJsScripts,ucXulScripts);
          Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString(result);
        }
      },
    
      getCss:function(iType) {
        // Array nimmt Namen der gefundenen css-Dateien auf
        let cssFiles = [];
        // Suchmuster, also die Dateierweiterung css
        let extcss = /\.css$/i;
        let aFolder = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        if (iType==3) {
          aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path+this.getDirSep()+"CSS");
         } else if (iType==4) {
          aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path+this.getDirSep()+"CSSWeb");
        }  else if (iType==5) {
          aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path+this.getDirSep()+"CSSShadow");
        }
        // files mit Eintraegen im CSS- bzw. CSSWeb-Ordner befuellen
        let files = aFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
        // Ordner bzw. files durchlaufen und kontrollieren, ob gesuchte Dateien dabei sind
        while (files.hasMoreElements()) {
          let file = files.getNext().QueryInterface(Ci.nsIFile);
          // css gefunden -> im Array ablegen
          if (extcss.test(file.leafName)) cssFiles.push(file.leafName);
        }
        if (this.sortScripts) {
          cssFiles.sort(this.stringComparison);
        }
        // Untermenue befuellen
        if (iType==3) {
          this.fillMenu("submenu-css","submenu-css-items","Meine CSS-Dateien",cssFiles,"uProfMenu_css",3);
         } else if (iType==4) {
          this.fillMenu("submenu-cssweb","submenu-cssweb-items","Meine CSSWeb-Dateien",cssFiles,"uProfMenu_css",4);
        }  else if (iType==5) {
          this.fillMenu("submenu-CSSShadow","submenu-CSSShadow-items","Meine CSSShadow-Dateien",cssFiles,"uProfMenu_css",5);
        }
      },
    
      fillMenu:function(whichsubmenu, whichsubmenuitems, strlabel, scriptArray,sClass,sTyp) {
        // Beschriftung des Untermenues mit Anzahl der gefundenen Dateien ergaenzen
        var e = document.getElementById(whichsubmenu);
        e.setAttribute('label',strlabel + ' (' + scriptArray.length + ')');
        var popup = document.getElementById(whichsubmenuitems);
        // zunaechst Untermenue zuruecksetzen
        while(popup.hasChildNodes()){
          popup.removeChild(popup.firstChild);
        }
        // Untermenue endlich befuellen
        for (var i = scriptArray.length-1; i > -1; i--) {
          // Typunterscheidung (userChromeJS-Skript oder about: oder css)
          if (sTyp==0){
            var mitem = this.createME("menuitem",scriptArray[i],"uProfMenu.edit(0,'"+scriptArray[i]+"')",sClass,0);
    		mitem.addEventListener('click', function(event) {
    			uProfMenu.openAtGithub(event,'"+scriptArray[i]+"');
    			event.preventDefault();
    		},true);
    		
            mitem.setAttribute("tooltiptext"," Linksklick: Bearbeiten,\n Mittelklick: https://github.com/.../"+this.cleanFileName(scriptArray[i])+" oeffnen,\n Rechtsklick: Suche auf GitHub");
           } else if (sTyp==1){
            var mitem = this.createME("menuitem",scriptArray[i],"openTrustedLinkIn('"+scriptArray[i]+"','tab')",sClass,0);
           } else if (sTyp==3){
            var mitem = this.createME("menuitem",scriptArray[i],"uProfMenu.edit(3,'"+scriptArray[i]+"')",sClass,0);
           } else if (sTyp==4){
            var mitem = this.createME("menuitem",scriptArray[i],"uProfMenu.edit(4,'"+scriptArray[i]+"')",sClass,0);
          }
    	  else if (sTyp==5){
            var mitem = this.createME("menuitem",scriptArray[i],"uProfMenu.edit(5,'"+scriptArray[i]+"')",sClass,0);
          }
          popup.insertBefore(mitem, popup.firstChild);
        }
      },
    
      fillClipboardValue:function(sArray,xArray) {
        var retValue;
        var s = 0;
        var x = 0;
        s = sArray.length;
        x = xArray.length;
        switch(this.enableScriptsToClip) {
          case 1:
            retValue = "userChromeJS/uc.js ("+s+"):\n------------------------\n"+sArray.join("\n")+
                       "\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------\n"+xArray.join("\n");
            break;
          default:
            retValue = "userChromeJS/uc.js ("+s+"):\n------------------------";
            for (var i = 0; i < s ; i++) {
              j = i + 1;
              retValue = retValue + "\n" + j + ". " + sArray[i];
            }
            retValue = retValue + "\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------";
            if (this.enableScriptsToClip==2) s = 0;
            for (var i = 0; i < x ; i++) {
              j = i + s + 1;
              retValue = retValue + "\n" + j + ". " + xArray[i];
            }
            break;
        }
        return retValue;
      },
    
      createME:function(sTyp,sLabel,sCommand,sClass,sId) {
        // Anlegen von menuitem, menu oder menupop - fuer bestimmte Typen nicht eingesetzte Parameter werden als 0 uebergeben
        const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
        var m = document.createElementNS(XUL_NS, sTyp);
        switch (sTyp) {
          case "menuitem":
            // this.createME("menuitem","Label des Items","ZuzuweisenderCodeFueroncommand","GewuenschteKlasseDesItems",0)
            m.setAttribute('label', sLabel);
            m.setAttribute('class',sClass);
    		m.addEventListener('command', function(event) {
    			Function(sCommand)();
    		}, true);
    		
            break;
          case "menu":
            // this.createME("menu","Label des Menues",0,0,"GewuenschteIdDesMenues")
            m.setAttribute('label', sLabel);
            m.setAttribute('id', sId);
            break;
          case "menupopup":
            //this.createME("menupopup",0,0,0,"GewuenschteIdDesMenupopups");
            m.setAttribute('id', sId);
            break;
        }
        return m;
      },
    
      openAtGithub:function(e,sScript) {
        if (e.button==1){
          // Mittelklick - Seite auf GitHub oeffnen (funktioniert nur, wenn Ordner- und bereinigter Dateiname [ohne Erweiterung] uebereinstimmen):
          var sUrl = "https://github.com/ardiman/userChrome.js/tree/master/"+this.cleanFileName(sScript);
          openWebLinkIn(sUrl, 'tab');
        }
        if (e.button==2){
          // Rechtsklick - Suche auf GitHub starten (funktioniert nur, wenn der Dateiname im Code hinterlegt ist):
          e.preventDefault();
          var sUrl = "https://github.com/search?langOverride=&language=&q="+sScript+"&repo=&start_value=1&type=Code";
          openWebLinkIn(sUrl, 'tab');
        }
      },
    
      cleanFileName:function(sName) {
        sName = sName.toLowerCase();
        /* Das folgende Array enthaelt regulaere Ausdruecke, um ungueltige Zeichenfolgen entfernen:
        /Datei-Erweiterungen am Ende/, /"ucjs_" am Anfang/, /"_"gefolgtVonZahlUndDanachBeliebigenZeichen/
        / "_fx"gefolgtVonZahl(en)/, /"-" oder "+" oder "."/, /"_v"gefolgtVonZahlen
        */
        var regs = [/\.uc\.js$/,/\.uc\.xul$/,/^ucjs_/,/_\d.+/,/_fx\d+/,/[-+\.]/g,/_v\d+/];
        for (var i = 0; i < regs.length; i++) {
          sName = sName.replace(regs[i],"");
        }
        return sName;
      }
    
    };
    
    uProfMenu.init();
    Alles anzeigen
  • extras_config_menu.uc.js

    • edvoldi
    • 9. Oktober 2026 um 15:56

    extras_config_menu.uc.js funktioniert im Firefox Nightly 160.0a1 nicht mehr.

  • Der Glückwunsch-Thread

    • edvoldi
    • 2. September 2026 um 21:08

    Vielen Dank für die Zahlreichen Glückwünsche!
    Gruß EDV-Oldie

  • Skripte für die Nightly Version wieder anpassen

    • edvoldi
    • 4. August 2026 um 10:35

    Das hatte ich mir schon gedacht, aber besser nachfragen als etwa zu wenig kopieren.
    Danke für die Info

  • Skripte für die Nightly Version wieder anpassen

    • edvoldi
    • 4. August 2026 um 10:23

    Hallo Endor,
    Danke funktioniert im Thunderbird und im Firefox!
    Wo kommt diese Datei hin "readme.md"

  • Skripte für die Nightly Version wieder anpassen

    • edvoldi
    • 4. August 2026 um 09:49

    Hallo zusammen,
    ab der Firefox Nightly 155.0a1 und der Thunderbird Daily 155.0a1 Versionen funktioniert bei mir kein Script mehr.
    Gibt es dafür schon eine Lösung?

    Gruß EDV-Oldie

  • Firefox View

    • edvoldi
    • 25. Juni 2026 um 14:48
    Zitat von grisu2099

    Da kannst du das Menü offenhalten und die Einträge anklicken.

    gefunden.
    Danke!

  • Firefox View

    • edvoldi
    • 25. Juni 2026 um 14:38
    Zitat von grisu2099

    Die mußt du wahrscheinlich durch die bei dir gültige ersetzen

    Wo finde ich die?

    Gruß EDV-Oldie

  • Firefox View

    • edvoldi
    • 25. Juni 2026 um 14:35
    Zitat von Endor

    An Mobilgerät senden und Untermenü tut sich nichts.

    Ist bei mir auch so, ich denke das jeder eine andere ID hat.

  • Firefox View

    • edvoldi
    • 25. Juni 2026 um 14:09

    Bin schon beim anpassen!

  • Firefox View

    • edvoldi
    • 25. Juni 2026 um 13:35

    Das sieht dann bei mir so aus!

  • Firefox View

    • edvoldi
    • 25. Juni 2026 um 13:11

    Hallo Endor,
    mit diesem Befehl werden überall icons angezeigt.

    CSS
    button[role="menuitem"][part="button"] {
    		background-image: url("../../../Icons/Bild45.png") !important;
    		padding-left: 36px !important;
    	}

    Das ansprechen einer Zeile habe ich noch nicht gefunden!
    Gruß EDV-Oldie

  • Firefox View

    • edvoldi
    • 22. Juni 2026 um 19:04

    Ich habe jetzt auch Firefox View angepasst, hier mein Code:

    CSS
    /***   AGENT_SHEET   *********************/
    /***   vom grisu2099   *******************/
    /***   Geändert von EDV-Oldie   **********/
    /***   Letzte Änderung am 22.06.2026   ***/
    
    
    /* Firefox View */
    
        @-moz-document url(about:firefoxview) {
    	
        body {
    	   background: silver !important;
        }	
    	:root {
    		--button-background-color-hover: skyblue !important;		/* Hoverfarbe für die Navi-Buttons links */
    	}
        /* Linke Seite Symbole ausblenden und neue einfügen */
    	.page-nav-icon {
    	   color: transparent !important;
    	}
    	
    
    
        /* blauer Rand links im aktiven Button ausgeblendet */
        @media not (prefers-contrast) {
           button::before {
           content: "";
           display: none !important;
        }
    		}
    
    
    /* Die Buttons */
    	button[role="tab"] {
    		--moz-page-nav-button-background-color: gainsboro !important;
    		--page-nav-button-background-color-selected: green !important;
    		border-radius: 60px !important;
    		border: 1px solid white !important;
    		background-position: 10px 10px !important;
    		background-repeat: no-repeat !important;
    		color: black !important;
    		padding: 5px 0 px 36px !important;
    		margin:  !important;
    		&:hover {
    			--page-nav-button-background-color: rgb(255,99,71) !important;
    			--page-nav-button-background-color-selected: yellow !important;
    		}
    	}
    
    /*   Abstand der Buttons   */
    	nav {
    		--page-nav-button-gap: 10px !important;
    	}		
    		
    	button[role="tab"][title="Kürzlich besucht"] {
    		background-image: url("../../../Icons/Bild45.png")  !important;
    	}
    	button[role="tab"][title="Offene Tabs"] {
    		background-image: url("../../../Icons/tab_offen.png")  !important;
    	}
    	button[role="tab"][title="Kürzlich geschlossene Tabs"] {
    		background-image: url("../../../Icons/sync_gold.png")  !important;
    	}
    	button[role="tab"][title="Tabs von anderen Geräten"] {
    		background-image: url("../../../Icons/tab_closed.png")  !important;
    	}
    	button[role="tab"][title="Chronik"] {
    		background-image: url("../../../Icons/alle_geräte.png")  !important;
    	}
    Alles anzeigen

    Gruß EDV-Oldie

  • Firefox View

    • edvoldi
    • 22. Juni 2026 um 15:37

    Hallo grisu2099,
    danke für diese Variante.
    Ich habe sie unter about:preferences getestet.

    CSS
    /***   AGENT_SHEET   *********************/
    /***   Geändert von EDV-Oldie   **********/
    /***   Letzte Änderung am 22.06.2026   ***/
    /***   https://www.camp-firefox.de/forum/thema/130540-about-seiten-mit-css-codes-anpassen/   */
    
    @-moz-document	url-prefix(about:preferences) { 
    
    	hbox {
        background-color: darkgray !important;
        }
    	#categories {
    	width: 16vw !important;
    	}
    
    	#search-container,
    	.main-content {
        background-color: silver !important;
        }
    
    
    /* Die Buttons */
    	.page-nav-icon {
    		display: none !important;
    	}
    	nav {
    		--page-nav-button-gap: 10px !important;
    	}
    	button[role="tab"] {
    		--page-nav-button-background-color: gainsboro !important;
    		--page-nav-button-background-color-selected: green !important;
    		border-radius: 60px !important;
    		border: 1px solid white !important;
    		background-position: 10px 7px !important;
    		background-repeat: no-repeat !important;
    		color: black !important;
    		padding: 5px 0 5px 36px !important;
    		margin: 0 !important;
    		&:hover {
    			--page-nav-button-background-color: rgb(255,99,71) !important;
    			--page-nav-button-background-color-selected: yellow !important;
    		}
    		&::before {
    			display: none !important;
    		}
    	}
    	button[role="tab"][title="Konto und Synchronisation"] {
    		background-image: url("../../../Icons/sync_gold.png")  !important;
    	}
    	button[role="tab"][title="Startseite"] {
    		background-image: url("../../../Icons/homepage.png") !important;
    	}
    	button[role="tab"][title="Suche"] {
    		background-image: url("../../../Icons/suchen.png") !important;
    	}
    	button[role="tab"][title="Datenschutz & Sicherheit"] {
    		background-image: url("../../../Icons/private_2.png") !important;
    	}
    	button[role="tab"][title="Passwörter und Autovervollständigung"] {
    		background-image: url("../../../Icons/enigmail_16.png") !important;
    	}
    	button[role="tab"][title="Erscheinungsbild"] {
    		background-image: url("../../../Icons/config_bild.png") !important;
    	}
    	button[role="tab"][title="Downloads"] {
    		background-image: url("../../../Icons/up_down_1.png") !important;
    	}
    	button[role="tab"][title="Tabs und Surfen"] {
    		background-image: url("../../../Icons/tabnew_1.png") !important;
    	}
    	button[role="tab"][title="Barrierefreiheit"] {
    		background-image: url("../../../Icons/Bild60.png") !important;
    	}
    	button[role="tab"][title="Sprachen"] {
    		background-image: url("../../../Icons/wörterbücher.png") !important;
    	}
    	button[role="tab"][title="KI-Einstellungen"] {
    		background-image: url("../../../Icons/ki.png") !important;
    	}
    	button[role="tab"][title="Berechtigungen und Daten"] {
    		background-image: url("../../../Icons/datenschutz.png") !important;
    	}
    	button[role="tab"][title="Firefox Labs"] {
    		background-image: url("../../../Icons/browser-inhaltswerkzeuge.png") !important;
    	}
    	button[role="tab"][title="Über Nightly"] {
    		background-image: url("../../../Icons/firefox_nightly.png") !important;
    	}
    	button[role="tab"][title="Mehr von Mozilla"] {
    		background-image: url("../../../Icons/protected.png") !important;
    	}
    	
       #addonsButton {
        border-radius: 60px !important;
    	border: 1px solid white !important;
    	padding-left: 25px !important;
        background: gainsboro url("../../../Icons/addons.png") no-repeat !important;
        background-position: 5px 5px !important;
    	}
    	#addonsButton:hover {
        border-radius: 60px !important;
    	border: 1px solid white !important;
        background: skyblue url("../../../Icons/addons.png") no-repeat !important;
        background-position: 5px 5px !important;
    	}
    
    
        #helpButton {
        border-radius: 60px !important;
    	border: 1px solid white !important;
    	padding-left: 25px !important;
        background: gainsboro url("../../../Icons/hilfe.png") no-repeat !important;
        background-position: 5px 5px !important;
    	}
    	#helpButton:hover {
    	border-radius: 60px !important;
    	border: 1px solid white !important;
        background: skyblue url("../../../Icons/hilfe.png") no-repeat !important;
        background-position: 5px 5px !important;
    	}
    	
    	
    	.moz-page-nav-link {
    		padding: 3px 2px !important;
    	}
    
    		/* Trennlinie */
    	.nav-separator,
    	nav > hr {
    		border-top: 2px ridge rgb(0,150,0) !important;
    		width: 336px !important;
    		height: 0px !important;
    		margin: 5px 0 !important;
    	}
    	nav > hr {
    		margin: 0 0 10px !important;
    	}
    Alles anzeigen

    Mir gelingst es aber nicht eine Hover Farbe für die nicht aktive Button zu ändern.
    Es wird bei mir immer ein Grauton angezeigt!
    Gruß EDV-Oldie

  • Off-Topic aus: Firefox View

    • edvoldi
    • 12. Juni 2026 um 17:01

    Dann bleibt nur die Aida für Dich übrig, Dir ist mir allerdings zu teuer. Der Grundpreis ist zwar geringer aber alles ander ist teurer.

Unterstütze uns!

Jährlich (2026)

72,4 %

72,4% (560,79 von 775 EUR)

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