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

Beiträge von FuchsFan

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • FuchsFan
    • 3. Mai 2025 um 18:15
    Zitat von Horstmann

    Ein [open] könnte man noch irgendwo mit reinquetschen;

    Du quetscht nicht schlecht.:thumbup: Das ist es wohl gewesen, jetzt funktioniert es wie gewünscht, und zwar mit diesem String.

    #ExtraConfigMenu-popup :is([id^="submenu-"][open])::after {    

    Danke, hast du gut gemacht.

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • FuchsFan
    • 3. Mai 2025 um 09:45
    Zitat von Mitleser

    Ja stimmt! Bleibt die Frage ob es überhaupt funktioniert in Nightly?

    Leider war die Vorfreude umsonst.;(

    Bei Hover wird zwar das Icon angezeigt, das Submenü öffnet sich, aber sofern mit der Maus das Popup berührt wird verschwindet es . Da werde ich dann doch bei der Lösung von 2002Andreas bleiben. Oder gibt es dazu noch einen Lösungsvorschlag?

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

    • FuchsFan
    • 2. Mai 2025 um 22:22

    Da kann ich auch noch ein Script beisteuern, funktioniert in allen Fenstern, und ohne Fehler in der Konsole.

    JavaScript
    //  Button zum Aufruf des Profil-Ordners
      
      (function() {
    	  
    	  if (location.href !== 'chrome://browser/content/browser.xhtml') return;
    	
    	try {
    		ChromeUtils.importESModule("resource:///modules/CustomizableUI.sys.mjs");
    		const sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
    		
    		const button_label = "Profil Button (generic)";
            const open_in_a_window = false; 
    		
    		CustomizableUI.createWidget({
    			id: 'Profil-Button',
    			defaultArea: CustomizableUI.AREA_NAVBAR,
    			removable: true,
    	        label: button_label, 
    	        tooltiptext: button_label, 
    	        onClick: function(event) {
    		
    			    const win = Components.classes["@mozilla.org/appshell/window-mediator;1"]
    		           .getService(Components.interfaces.nsIWindowMediator)
    		           .getMostRecentWindow("navigator:browser");
    		
                    if(event.button=='0') {
    		          try {
    		  
    		            if(open_in_a_window)
    		              window.open("ProfD");
    		              uProfMenu.prefDirOpen('ProfD');
    							  		  
    		} catch (e) {}
    	  }   
    	},
    	onCreated: function(button) {
    	  return button;
    	}
    		
      });
    					
    // style button icon
      const uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent('\
    	\
    	  #Profil-Button .toolbarbutton-icon {\
    		list-style-image: url("file:///C:/FoxIcons2/prof.png"); \
    	}\
    	\
      '), null, null);
      
      sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
      
    } catch (e) {
    	Components.utils.reportError(e);
    };
    
    })();					
    Alles anzeigen
  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • FuchsFan
    • 2. Mai 2025 um 22:04
    Zitat von Mitleser

    Geht das im Nightly? Als Kurzfassung?

    Super, das funktioniert in dieser Fassung perfekt. Die Schreibweise von Sören Hentzschel ist dann aber wohl die bessere Idee.

    Ich danke euch für diesen Ansatz. :thumbup::thumbup::)

  • Ganze Seite nach unten oder oben Scrollen

    • FuchsFan
    • 2. Mai 2025 um 18:06
    Zitat von 2002Andreas

    Oder nimm gleich passende Icons:

    Ja, das funktioniert dann wenigstens. Ich danke Dir!:thumbup::)

  • Ganze Seite nach unten oder oben Scrollen

    • FuchsFan
    • 2. Mai 2025 um 17:09
    Zitat von Mira_Belle

    Bekomme ich mal Deinen Code?

    Mira_Belle

    Sorry, habe ich jetzt erst gelesen. Das ist der Code für das Rechtsklick-Kontextmenü, so wie ich ihn verwende (für 139/140).

    CSS
    /*======= Rechtsklick-Kontextmenü =======*/
    
    /* AGENT_SHEET */
        @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);
        @-moz-document url(chrome://browser/content/browser.xhtml){
            
        /*==== zusätzliche Anpassungen Rechtsklick-Kontextmenü ====*/
        
    /* Breite des Popup-Menüs begrenzt */    
    #mainPopupSet menupopup#contentAreaContextMenu{
        max-width: 345px !important;
        min-width: 345px !important;
    }    
    
    /* obere Box mit den Icons */
    #context-navigation {
    	appearance: none !important;
        background: #99ccff !important; 
        padding: 8px !important; 
        margin-bottom: 3px !important; 
        min-height: 50px !important; 
        max-height: 50px !important;
        max-width: 320px !important;
    	box-shadow: inset 0.05em 0.05em 0.3em 0.3em #009926 !important;
    }
    
    /* Button mit den Icons */
    #context-navigation menuitem.menuitem-iconic {
    	background-color: transparent /* #fae7b5 */ !important;
        border: 1px solid royalblue !important;
    	max-width: 47px !important;
        min-width: 47px !important;
    	min-height: 35px !important; 
        max-height: 35px !important;
    	padding-left: 4px !important;
    	margin-left: 3px !important;
        margin-top: 0px !important;
    }
    
    /* die aktiven Button oben im Kontextmenü bei hover */
    #context-navigation > .menuitem-iconic:not([disabled]):hover{
        background-color: #d2f2f8 !important;
        border: 1px solid brown !important;
    }
    
    /* die inaktiven Button oben im Kontextmenü bei hover */
    #context-navigation > .menuitem-iconic[disabled]:hover{
        background-color: #ababab !important;
    }
    
    /* die inaktiven (kleinen) Button oben im Kontextmenü ausgeblendet */
    #context-navigation > .menuitem-iconic[disabled] > hbox > image {
        background-color: transparent  !important;
    }
    
    /* die aktiven (kleinen) Button oben im Kontextmenü ausgeblendet */
    #context-navigation > .menuitem-iconic:not([disabled]) > hbox > image {
    	background-color: transparent !important;
    }   
    
    
    /*  Vor, Zurück, Stop, Neuladen und Lesezeichen farbig */    
    #context-back.menuitem-iconic image.menu-icon {  
    	fill: blue !important;
    	margin-left: 4px !important;
    }
    #context-back:hover.menuitem-iconic image.menu-icon {  
    	fill: red !important;
    }
    
    #context-forward.menuitem-iconic image.menu-icon{
    	fill: #268e00 !important;
    }
    #context-forward:hover.menuitem-iconic image.menu-icon{
    	fill: red !important;
    }
    
    /* gehören zum Script SkipToTopAndBottom.uc.js */
    #context-to-top.menuitem-iconic image.menu-icon{
    	margin-right: 0px !important;
    }
    #context-to-bottom.menuitem-iconic image.menu-icon{
    	margin-right: 0px !important;
    }
    
    #context-reload.menuitem-iconic image.menu-icon{
    	fill: forestgreen !important;
    }
    #context-reload:hover.menuitem-iconic image.menu-icon{
    	fill: red !important;
    }
    
    #context-stop.menuitem-iconic image.menu-icon{
    	fill: red !important;
    }
    #context-stop:hover.menuitem-iconic image.menu-icon{
    	fill: #cd0000 !important;
    }
    
    #context-bookmarkpage.menuitem-iconic image.menu-icon{
    	fill: #ff5f25 !important;
    	margin-right: 4px !important;
    }
    #context-bookmarkpage:hover.menuitem-iconic image.menu-icon{
    	fill: brown !important;
    } 
    }
    
    /* =========================== */
    /*  Skip To Top & Bottom Icons */
    /*  Einheitliche Icon-Größe    */
    /* =========================== */
    
    #context-navigation {
      > .menuitem-iconic {
            /* Gemeinsame Icon-Größe */
        > .menu-icon {
            width: 34px !important;
            height: 34px !important;
            max-width: 34px !important;
            max-height: 34px !important;
            background-size: contain !important; /* für perfekte Skalierung */
            object-fit: contain !important; /* falls SVGs oder PNGs verwendet werden */
        }
      }
    }
    Alles anzeigen

    2002Andreas

    Bekomme die Farbe nicht geändert, liegt eventuell am Script selbst. Dieses verwende ich:

    Code
    //SkipToTopAndBottom.uc.js
    
    (function() {
    
    	let menuitem = document.createXULElement('menuitem');
    	menuitem.id = 'context-to-top';
    	menuitem.classList.add('menuitem-iconic');
    	menuitem.setAttribute('tooltiptext' , 'Zum Seitenanfang springen');
    	menuitem.style.listStyleImage='url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMTAwMCAxMDAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAwIDEwMDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxnPjxwYXRoIGQ9Ik00NjcuNiwyNjMuNEwyNS43LDY2NS4yYy0xOS42LDE3LjktMjEuMSw0OC40LTMuMyw2OC4xYzE4LDE5LjcsNDguNCwyMS4xLDY4LjEsMy4zbDQwOS41LTM3Mi4ybDQwOS4zLDM3Mi4yYzE5LjgsMTcuOSw1MC4zLDE2LjUsNjguMi0zLjNjOC4zLTkuMiwxMi41LTIwLjgsMTIuNS0zMi40YzAtMTMuMS01LjMtMjYuMi0xNS43LTM1LjdMNTMyLjQsMjYzLjRDNTE0LDI0Ni44LDQ4NS45LDI0Ni44LDQ2Ny42LDI2My40eiIvPjwvZz48L3N2Zz4=")';
    	let refItem = document.getElementById('context-reload');
    	refItem.parentNode.insertBefore(menuitem, refItem);
    	//click
    	menuitem.addEventListener('click', () => {
    		if (event.button == 0) {
    			ownerGlobal.gBrowser.selectedBrowser.messageManager.loadFrameScript(' data: , content.scrollTo(0,0) ' , false);
    		}
    	}); 
    
    })();
    
    
    (function() {
    
    	let menuitem = document.createXULElement('menuitem');
    	menuitem.id = 'context-to-bottom';
    	menuitem.classList.add('menuitem-iconic');
    	menuitem.setAttribute('tooltiptext' , 'Zum Seitenende springen');
    	menuitem.style.listStyleImage='url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMTAwMCAxMDAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAwIDEwMDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxnPjxwYXRoIGQ9Ik01MzIuNCw3MzYuNmw0NDEuOS00MDEuOGMxOS42LTE3LjgsMjEuMS00OC40LDMuMi02Ny45Yy0xNy45LTE5LjgtNDguNC0yMS4zLTY3LjktMy40TDUwMCw2MzUuOEw5MC44LDI2My40Yy0xOS44LTE3LjgtNTAuNC0xNi4zLTY4LjIsMy40Yy04LjQsOS4yLTEyLjYsMjAuOC0xMi42LDMyLjRjMCwxMyw1LjQsMjYuMiwxNS44LDM1LjZsNDQxLjksNDAxLjhDNDg2LjEsNzUzLjIsNTE0LjIsNzUzLjIsNTMyLjQsNzM2LjZ6Ii8+PC9nPjwvc3ZnPg==")';
    	let refItem = document.getElementById('context-reload');
    	refItem.parentNode.insertBefore(menuitem, refItem);
    	//click
    	menuitem.addEventListener('click', () => {
    		if (event.button == 0) {
    			ownerGlobal.gBrowser.selectedBrowser.messageManager.loadFrameScript(' data: , content.scrollTo(0,100000) ' , false);
    		}
    	});
    
    	var cssUri = Services.io.newURI('data:text/css,' + encodeURIComponent(css), null, null);
    	var SSS = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
    	SSS.loadAndRegisterSheet(cssUri, SSS.AGENT_SHEET);
    })();
    Alles anzeigen
  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • FuchsFan
    • 2. Mai 2025 um 16:13
    Zitat von 2002Andreas

    Evtl. hilft dir ja diese Abkürzung weiter:

    Sehr schön, Andreas, damit geht es prima. Ich danke Dir! :thumbup::)

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • FuchsFan
    • 2. Mai 2025 um 15:40

    2002Andreas

    Nun habe ich doch noch einen Weg gefunden, so z.B. für Scripte.

    CSS
    #ExtraConfigMenu-popup:hover menu#submenu-ucjs::after {
      content: "" !important;
      background-image: url("..//icons/down2.png") !important;
      margin-right: 12px !important; 
      display: block !important;
      background-repeat: no-repeat !important;
      background-position: 0px 3px !important;
      background-size: 14px 14px !important;
    }

    Hast du noch eine Idee, wie man das auf die restlichen übertragen könnte (um nicht jedes einzeln aufzuführen)?

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • FuchsFan
    • 2. Mai 2025 um 15:04
    Zitat von milupo

    Meines Erachtens kannst du dir ein zusätzliches background-image sparen, denn mit content: kannst du das genauso ausdrücken. Eine Eigenschaft weniger und keine leere content-Eigenschaft.

    milupo

    Danke für den Hinweis, ich erinnere mich, das haben wir schon mal gemacht.

    Damals beim Einrichten der Seite von camp-firefox z.B.

    CSS
    h1.contentTitle::after {
        font-size: 36px !important;
        content: " F i r e f o x   " url("../icons/FuchsCamp2.png") "   F o r u m" !important;
        color: blue  !important;
        font-weight: 800 !important;
    	font-family: Times New Roman, Times, serif !important;
        font-style: italic !important;
        }
  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • FuchsFan
    • 2. Mai 2025 um 14:59
    Zitat von Horstmann

    Unglaublich ....

    Tief Luft holen bringt den Puls wieder in Ordnung. Nun hör bitte auf damit, seid ihr alle unfehlbar?


    Zitat von Horstmann

    Oder mal sowas wie #ExtraConfigMenu-popup > menu:hover menu::after testen, mit oder ohne > ... 8)

    Bringt es auch nicht.:/

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • FuchsFan
    • 2. Mai 2025 um 14:43
    Zitat von Mira_Belle

    Wurdest Du nicht aufgefordert ganze Skripte zu posten?

    Nun fangt doch nicht schon wieder damit an, das nervt ja langsam. Aber du hast ja nicht ganz Unrecht, bitteschön.

    CSS
    // ==UserScript==
    // @name           extras_config_menu.uc.js
    // @compatibility  Firefox 6*.*
    // @include        main
    // @version        1.0.20190504
    // @edit           @aborix - Erweiterung mit Submenüs / 02.12.2022 
    // @edit           @FuchsFan - Erweiterung mit Ordner JS und Submenü Scripte
    // @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:\\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: '',
      // Falls die JavaScript-Scripte nicht im chrome-Verzeichnis, sondern einem Unterverzeichnis sind,
      // in der folgenden Zeile das Unterverzeichnis eintragen, sonst '':
      jsSubfolder: 'Scripte',
      // 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: 'searchbar',
     // 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: 0,
      // 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:certificate','about:compat','about:config','about:crashes','about:debugging',
               'about:logging','about:logins','about:loginsimportreport','about:memory','about:networking','about:performance','about:plugins','about:policies','about:preferences','about:privatebrowsing','about:profiles','about:processes','about:profiling',
               'about:protections','about:serviceworkers','about:support','about:telemetry','about:third-party','about:unloads','about:url-classifier','about:webrtc','about:welcome','about:welcomeback','about:windows-messages'],
      // Die normalen Firefox-Einstellungen auch zur Verfuegung stellen (0: nein, 1: ja):
      showNormalPrefs: 0,
      // Stellt "Skriptliste in Zwischenablage" zur Verfuegung (1: ja, 2: mit getrennter Nummerierung, 3: mit gemeinsamer Nummerierung) oder nicht (0):
      enableScriptsToClip: 1,
      // Um den Eintrag "Neustart" zu erzwingen (falls z.B. das andere Skript zu spaet eingebunden und nicht erkannt wird), auf 1 setzen:
      enableRestart: 1,
      // Ende der Konfiguration
      
      init: function() {
    	  
    	  if (location != '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===1 && event.target==this) 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(file:///C:/FoxIcons/1206.png) !important; margin-right: 10px !important; margin-bottom: 2px !important; margin-top: 2px !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);
    			uProfMenu.getCss(6);
    	 },true);
    	
        var menupopup = menu.appendChild(this.createME("menupopup",0,0,0,"ExtraConfigMenu-popup"));
        // Anlegen von Untermenues fuer userChromeJS-Skripte und CSS-Dateien (befuellen spaeter)
        var submenu=menupopup.appendChild(this.createME("menu","Scripte",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"));
        var submenu = menupopup.appendChild(this.createME("menu","css",0,0,"submenu-css"));
        var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-css-items"));
        var submenu = menupopup.appendChild(this.createME("menu","cssweb",0,0,"submenu-cssweb"));
        var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-cssweb-items"));
        var submenu = menupopup.appendChild(this.createME("menu","cssabout",0,0,"submenu-cssabout"));
        var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-cssabout-items"));
    	var submenu = menupopup.appendChild(this.createME("menu","cssshadow",0,0,"submenu-cssshadow"));
        var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-cssshadow-items"));
        
    	if (this.enableScriptsToClip) menupopup.appendChild(this.createME("menuitem","Skriptliste in Zwischenablage","uProfMenu.getScripts(1)","uProfMenu_clipboard",0));
    	
        // Ende Anlegen von Untermenues
    	    
    	menupopup.appendChild(document.createXULElement('menuseparator'));
        
    	// Einbindung von Konfigdateien
        menupopup.appendChild(this.createME("menuitem","userChrome.css","uProfMenu.edit(7,'userChrome.css');","uProfMenu_edit",0));
        menupopup.appendChild(this.createME("menuitem","userContent.css","uProfMenu.edit(7,'userContent.css');","uProfMenu_edit",0));
        menupopup.appendChild(this.createME("menuitem","userChromeShadow.css","uProfMenu.edit(7,'userChromeShadow.css');","uProfMenu_edit",0));
        menupopup.appendChild(this.createME("menuitem","userChrome.js","uProfMenu.edit(7,'userChrome.js');","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);
        menupopup.appendChild(this.createME("menuitem","policies.json","uProfMenu.edit(9,'policies.json');","uProfMenu_edit"),0);
        // Ende Einbindung von Konfigdateien
    	
    	// 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 Funktionen",this.abouts,"uProfMenu_about",1);
          }
        }
        // Ende Einbindung von abouts
    	
    	// Einbindung von Menü Funktionen
        var submenu = menupopup.appendChild(this.createME("menu","Funktionen",0,0,"submenu-extra2"));
        var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-extra2-items"));
        this.fillMenu("submenu-extra2","submenu-extra2-items", "Funktionen",
          [
            {label:'Addon-Manager', command:"BrowserAddonUI.openAddonsMgr();"},
    		{label:'Einstellungen', command:"openPreferences();"},
    		{label:'about:config', command:"openTrustedLinkIn('about:config', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');"},
    		{label:'about:support', command:"openTrustedLinkIn('about:support', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');"},
    		{label:'Browser-Werkzeuge', command:"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();",
    		},			  
    		{label:'Browser-Konsole', command:"var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\
                          var { BrowserConsoleManager } = require('resource://devtools/client/webconsole/browser-console-manager');\
                          BrowserConsoleManager.openBrowserConsoleOrFocus();",
            },
    		{label:'Entwickler-Werkzeuge', command:"var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\
                    var { gDevToolsBrowser } = require('devtools/client/framework/devtools-browser');\
                    gDevToolsBrowser.toggleToolboxCommand(window.gBrowser, Cu.now());",
            },
            {label:'Neustart im abgesicherten Modus', command:"safeModeRestart();"},		
    	  ],
          "extra2-directory",7);
        // Ende Einbindung von Menü Funktionen	  
    
        // Einbindung von Menü Verzeichnisse
        var submenu = menupopup.appendChild(this.createME("menu","Verzeichnisse",0,0,"submenu-extra"));
        var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-extra-items"));
        this.fillMenu("submenu-extra","submenu-extra-items", "Verzeichnisse",
          [
            {label:'Installationsordner', command:"uProfMenu.prefDirOpen('CurProcD')"},
    		{label:'Profilordner', command:"uProfMenu.prefDirOpen('ProfD')"},
            {label:'Icons', command:"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'Icons');"},
    		{label:'IconsMenü', command:"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'IconsMenü');"},
    		{label:'IconsHamburger', command:"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'IconsHamburger');"},
    		{label:'Bookmark-Backups', command:"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'bookmarkbackups');"},
    		{label:'Addonordner', command:"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'extensions');"},
    		{label:'Startup-Cacheordner', command:"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'startupCache');"},
    		{label:'FoxIcons', command:"uProfMenu.dirOpen('C:\\FoxIcons');"}, 
    		{label:'FoxIcons2', command:"uProfMenu.dirOpen('C:\\FoxIcons2');"},
    		{label:'FoxBilder', command:"uProfMenu.dirOpen('C:\\FoxBilder');"},
    		{label:'Download Firefox', command:"uProfMenu.dirOpen('D:\\Download Firefox');"}
    	  ],
          "extra-directory",7);
    	// Ende Einbindung von Menü Verzeichnisse  
        
        menupopup.appendChild(document.createXULElement('menuseparator'));
    	
        // Einbindung von Ordnern
        switch (this.gmOrdner) {
          case 1:
            menupopup.appendChild(this.createME("menuitem","GM-skripty","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'gm_scripts');","uProfMenu_folder"),0);
            break;
          case 2:
            menupopup.appendChild(this.createME("menuitem","USL-skripty","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'UserScriptLoader');","uProfMenu_folder"),0);
            break;
          case 3:
            menupopup.appendChild(this.createME("menuitem","Skripty Scriptish","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(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'CSS');","uProfMenu_folder"),0);
        }
        menupopup.appendChild(this.createME("menuitem","Ordner chrome","uProfMenu.prefDirOpen('UChrm');","uProfMenu_folder"),0);
        menupopup.appendChild(this.createME("menuitem","Ordner CSSWeb","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'CSSWeb');","uProfMenu_folder"),0);
        menupopup.appendChild(this.createME("menuitem","Ordner CSS","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'css');","uProfMenu_folder"),0);
    	
        //menupopup.appendChild(this.createME("menuitem","Profilordner","uProfMenu.prefDirOpen('ProfD');","uProfMenu_folder"),0);
        
    	//menupopup.appendChild(this.createME("menuitem","Installationsordner","uProfMenu.prefDirOpen('CurProcD');","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","Startup-Cacheordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfLD')+uProfMenu.getDirSep()+'startupCache');","uProfMenu_folder"),0);
    	
        menupopup.appendChild(this.createME("menuitem","Ordner CSSAbout","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'CSSAbout');","uProfMenu_folder"),0);
    	menupopup.appendChild(this.createME("menuitem","Ordner Scripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'Scripte');","uProfMenu_folder"),0);
    	menupopup.appendChild(this.createME("menuitem","Ordner CSSShadow","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'CSSShadow');","uProfMenu_folder"),0);
    	
    	// Ende Einbindung von Ordnern
    	
        
    	
        // 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:
            if (this.jsSubfolder.length != 0) {
            var Path = this.getPrefDirectoryPath("UChrm") + dSep + this.jsSubfolder + dSep + Filename;
            } else {
               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 Sonstige CSS-Dateien folder
          case 5:
            var Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSAbout" + dSep + Filename;
            break;
    	  //Current is CSSShadow folder
          case 6:
            var Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSShadow" + dSep + Filename;
            break;			
          //Current is Chrome Directory
          case 7:	  
    	    var Path = this.getPrefDirectoryPath("UChrm") + dSep + Filename;
            break;
    	  //Current is Scripte folder
          case 8:
            var Path = this.getPrefDirectoryPath("UChrm") + dSep + "Scripte" + dSep + Filename;
            break;	
    	  //Current is distribution folder
          case 9:
            var Path = this.getPrefDirectoryPath("CurProcD") + dSep + "distribution" + 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+uProfMenu.getDirSep()+this.jsSubfolder);
        // 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);
          // 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", "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()+"CSSAbout");
    	 } else if (iType==6) {
          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","CSS-Dateien",cssFiles,"uProfMenu_css",3);
         } else if (iType==4) {
          this.fillMenu("submenu-cssweb","submenu-cssweb-items","CSSWeb-Dateien",cssFiles,"uProfMenu_css",4);
         } else if (iType==5) {
          this.fillMenu("submenu-cssabout","submenu-cssabout-items","CSSAbout-Dateien",cssFiles,"uProfMenu_css",5);
         } else if (iType==6) {
          this.fillMenu("submenu-cssshadow","submenu-cssshadow-items","CSSShadow-Dateien",cssFiles,"uProfMenu_css",6);
         }
      },
    
      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);
    	   }else if (sTyp==6){
            var mitem = this.createME("menuitem",scriptArray[i],"uProfMenu.edit(6,'"+scriptArray[i]+"')",sClass,0);		
           } else if (sTyp==7){
            var mitem = this.createME("menuitem",scriptArray[i].label,scriptArray[i].command,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');
          document.getElementById("ExtraConfigMenu-popup").hidePopup();
        }
      },
    
      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

    Zitat von .DeJaVu

    wobei xyz123 das Element des entsprechenden Eintrags ist.

    Alles was ich dazu gefunden habe ist probiert worden, aber ohne Erfolg.:rolleyes:

  • Ganze Seite nach unten oder oben Scrollen

    • FuchsFan
    • 2. Mai 2025 um 14:39
    Zitat von Mira_Belle

    aber mir ist aufgefallen, dass in der Nightly nicht mehr "gehovert" wird!

    Den Button selbst schon, aber mir gelingt es auch nicht, den Pfeilen eine andere Farbe zu geben.

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • FuchsFan
    • 2. Mai 2025 um 14:28

    Ich bitte in der Sache nochmals um Hilfe. Im Beitrag #1 ist der zweite Codee für Hoover vorhanden, was bis zur Version 138 für jeden einzelnen Button den roten Pfeil bringt. Sieht dann so aus:

    In Version 139/140 will mir das nicht gelingen, es auch dort so einzurichten. Wenn ich z.B. diesen Code dafür einsetze, so werden alle Button gleichzeitig angesprochen.

    CSS
    /*rechts der kleine Pfeil bei hoover*/
    #ExtraConfigMenu-popup:hover > menu::after {
      content: "" !important;
      background-image: url("..//icons/down2.png") !important;
      margin-right: 12px !important; 
      display: block !important;
      background-repeat: no-repeat !important;
      background-position: 0px 3px !important;
      background-size: 14px 14px !important;
    }

    Was dann so aussieht:

    Bilder

    • 140.png
      • 8,45 kB
      • 310 × 140
  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • FuchsFan
    • 1. Mai 2025 um 19:08
    Zitat von grisu2099

    Dann war meine Schuß ins Blaue ja wenigstens ein halber Treffer...

    Genau so ist es. :thumbup:

    Zitat von .DeJaVu

    einfach nur ärgerlich - und unhöflich gegenüber den Helfern.

    Ich bitte alle Helfer um Verzeihung, wusste nicht, dass es so wichtig ist.

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • FuchsFan
    • 1. Mai 2025 um 17:29
    Zitat von Sören Hentzschel

    oder es wurde nicht bedacht, dass wenn ::after genutzt wird, es zwingend die Eigenschaft content geben muss

    Das war natürlich der gröbste Fehler, ich bedanke mich für den Hinweis.

    Zitat von .DeJaVu

    Wäre noch hilfreich, das Script zu posten, mindestens zu verlinken.

    Es lag aber nicht zwingend an dem Script, denn darin hat sich nichts geändert. Gibt es hier im Forum an jeder Ecke.;)

    Zitat von Horstmann

    Wie ebenfalls erwähnt, ist .menu-right jetzt wohl menu::after, und hat einen anderen Pfad, irgendwie sowas.

    Danke, das hat mich jetzt auf die Lösung gebracht, denn content  fehlte, und es muss jetzt dazu background-image heißen.

    Damit funktioniert es dann wieder;

    CSS
    #ExtraConfigMenu-popup menu::after {
      content: "" !important;
      background-image: url("..//icons/rechts6.png") !important;
    }
  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • FuchsFan
    • 1. Mai 2025 um 14:48
    Zitat von grisu2099

    Mal ein Schuß ins Blaue

    Das hatte ich auch gesehen, aber will mir trotzdem nicht gelingen.:rolleyes:

  • Selektor für kleinen Pfeil in CSS-Code zum extra-config-menü.uc.js ab v139

    • FuchsFan
    • 1. Mai 2025 um 14:12

    Bis zur Version 138 funktioniert dafür dieser Code:

    CSS
    /*rechts der kleine Pfeil*/
    #ExtraConfigMenu-popup menu > .menu-right {
    	list-style-image: url("..//icons/rechts6.png") !important;
    }
    
    #ExtraConfigMenu-popup menu:hover > .menu-right {
      list-style-image: url("..//icons/down2.png") !important;
      margin-right: 8px !important; 
      padding-right: 20px !important;
      display: block !important;
      width: 16px !important;
      height: 16px !important;
      background-repeat: no-repeat !important;
      background-position: 0px 0px !important;
      background-size: 17px 17px !important;
    }
    Alles anzeigen


    Ich finde den neuen Selektor dafür nicht, bitte helfen.

  • Firefox v136.0a1 - Skript „saveTo“ funktioniert nicht mehr

    • FuchsFan
    • 19. April 2025 um 22:06
    Zitat von 2002Andreas

    Kompl. Skript dann:

    2002Andreas

    Sorry, Andreas, konnte nicht mehr online sein.

    Mein Dank geht an dich, das funktioniert perfekt, wie immer bei dir. :thumbup::thumbup::thumbup::)

    Ich wünsche dir, und auch allen Mitlesern, schöne Osterfeiertage.<3

  • Firefox v136.0a1 - Skript „saveTo“ funktioniert nicht mehr

    • FuchsFan
    • 19. April 2025 um 16:38
    Zitat von 2002Andreas

    Zeile 25 im Skript:

    Habe es im Original übernommen, aber lässt sich nicht ändern.

    Ich stelle mal das geänderte Script hier ein, schaust du mal bitte, ob es bei dir funktioniert.

    CSS
    // ==UserScript==
    // @include       chrome://mozapps/content/downloads/unknownContentType.xhtml
    // @charset       UTF-8
    // @version       Fx114+
    
    // ==/UserScript==
    (function () {
    	
    	if (location.href !== 'chrome://mozapps/content/downloads/unknownContentType.xhtml') return;
    	
      const Cu = Components.utils;
      const { FileUtils } = ChromeUtils.importESModule( 'resource://gre/modules/FileUtils.sys.mjs');
        
      setTimeout(function () {
        saveTo();
      }, 200);
    
      function saveTo() {
        // Config
        const dirArray = [
    	        ['D:\\Download Firefox', 'Download Firefox'],
                ['D:\\Download Firefox\\Dokumente'],
                ['D:\\Download Firefox\\Bilder'],
                ['D:\\Download Firefox\\Software'], 
                ['D:\\Download Firefox\\Ablage'],
                ['D:\\Download Firefox\\Sonstiges'],
                ["C:\\", "C:"],
                ["E:\\", "E:"],
                ];
        const button = document.getElementById('unknownContentType').getButton('cancel');
        const saveTo = button.parentNode.insertBefore(document.createXULElement('button'), button);
        const saveToMenu = saveTo.appendChild(document.createXULElement('menupopup'));
    
        saveTo.classList.toggle('dialog-button');
        saveTo.label = 'Speichern in…';
        saveTo.type = 'menu';
    
    
        const css =`
          hbox.dialog-button-box button.dialog-button menupopup {
            background: gold !important;
            min-width: 220px !important;
            padding: 5px !important;
            margin: 15px 0 0 -62px !important;
            border: 3px solid dodgerblue !important;
        }
            hbox.dialog-button-box button.dialog-button menupopup menuitem{
            appearance: none !important;
            color: blue !important;
            background: #fefefc !important; 
            border: 1px solid silver !important;
            margin-top: 1px !important;
            padding-left: 12px !important;
        }
            hbox.dialog-button-box button.dialog-button menupopup menuitem:hover {
            background: greenyellow !important;
            border: 1px solid red !important;
        }    
            hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic label.menu-iconic-text{
            color: blue !important;    
            font-size: 15px !important;
            font-weight: 600 !important;
                padding: 3px !important;
    			padding-left: 85px !important;
    			padding-right: 12px !important;
    
        } 
    	/* [FF139+] -> */
    		hbox.dialog-button-box button.dialog-button menupopup menuitem:not([highlightable]) > .menu-highlightable-text, menuitem[highlightable] > .menu-text {
    			  display: none;
    		}
    		/* <- [FF139+] */
    
    	`;
    
        const sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
        const uri = Services.io.newURI('data:text/css,' + encodeURIComponent(css));
        sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    
        dirArray.forEach(function (directory) {
          const [name, dir] = [directory[1], directory[0]];
          const mi = document.createXULElement('menuitem');
          const item = saveToMenu.appendChild(mi);
          item.setAttribute('label', (name || (dir.match(/[^\\/]+$/) || [dir])[0]));
          item.setAttribute('image', 'moz-icon:file:///' + dir + '\\');
          item.setAttribute('class', 'menuitem-iconic');
          item.addEventListener('click', function () {
            const locationtext = document.getElementById('locationtext');
            const pathFile = dir + '\\' + (locationtext ? locationtext.value : document.getElementById('location').value);
            const file = new FileUtils.File(pathFile);
            dialog.mLauncher.saveDestinationAvailable(file);
            dialog.onCancel = function () {};
            close();
          });
        });
      }
    }());
    Alles anzeigen
  • Firefox v136.0a1 - Skript „saveTo“ funktioniert nicht mehr

    • FuchsFan
    • 19. April 2025 um 16:07
    Zitat von 2002Andreas
    Zitat von BrokenHeart

    Jetzt sollte es auch in der Nightly wieder so funktionieren

    :thumbup:

    2002Andreas

    Hilf mir mal bitte, ich bekomme den Text nicht nach rechts verlagert.:rolleyes:

Unterstütze uns!

Jährlich (2025)

101,9 %

101,9% (662,48 von 650 EUR)

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