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

Beiträge von BarbaraZ-

  • Windows 11 25H2 ist da

    • BarbaraZ-
    • 17. Oktober 2025 um 16:27

    Heute Morgen Win11 25H2 angeboten bekommen.
    Habe noch nie so schnell ein Update installiert.

    Ich bin absolut zufrieden damit.

  • Es gibt ältere Versionen dieses Beitrages - warum eigentlich?

    • BarbaraZ-
    • 6. Oktober 2025 um 14:20

    Okay. Danke habe es gefunden.

  • Es gibt ältere Versionen dieses Beitrages - warum eigentlich?

    • BarbaraZ-
    • 6. Oktober 2025 um 14:17

    Das sieht bei mir so aus:

    Von daher fehlt bei mir was.

  • Es gibt ältere Versionen dieses Beitrages - warum eigentlich?

    • BarbaraZ-
    • 6. Oktober 2025 um 14:11
    Zitat

    Ist ja peinlich, wenn jemand eins meiner Skripte nutz und denkt ich sei irgendwie doof!

    Ich denke, hier sollte es richtigerweise heißen:

    "Ist ja peinlich, wenn jemand eines meiner Skripte nutzt und denkt, ich sei irgendwie doof!"
    Hätte das gerne farblich abgesetzt, kann es aber nicht finden. Sollte auch so verständlich sein.

    Ist aber nicht schlimm, mir passieren hin und wieder auch Rechtschreib- und Fipptehler

  • Aufruf extra confing menu.uc.js

    • BarbaraZ-
    • 3. Oktober 2025 um 18:08

    Jepp. Nutze ich ja auch schon gefühlt, seit es FF gibt. Na gut, vielleicht noch nicht so lange aber etliche Jahre.

  • Windows 11 25H2 ist da

    • BarbaraZ-
    • 3. Oktober 2025 um 18:06

    Ich denke, ich werde warten, bis es mir zum download angeboten wird.

  • Aufruf extra confing menu.uc.js

    • BarbaraZ-
    • 3. Oktober 2025 um 18:01

    Vielen Dank für die wertvollen Hinweise aus den Beiträge #7 und #8 von 2002Andreas und milupo .

    Ich wusste, hier im Forum werden Sie geholfen und man kann sich drauf verlassen, dass es auch klappt.

    Jetzt ist alles wieder so, wies sein soll. :thumbup:

  • Aufruf extra confing menu.uc.js

    • BarbaraZ-
    • 3. Oktober 2025 um 16:39

    Hier meine UserLoader.uc.js

    JavaScript
    // ==UserScript==
    // @name           UserCSSLoader
    // @description    CSS-Codes - Styles laden und verwalten
    // @namespace      http://d.hatena.ne.jp/Griever/
    // @author         Griever
    // @include        main
    // @license        MIT License
    // @compatibility  Firefox 141+
    // @charset        UTF-8
    // @version        0.0.4r4
    // @note           0.0.4r4 prevent close menu when middleclick
    // @note           0.0.4r3 Fx92: getURLSpecFromFile() -> getURLSpecFromActualFile()
    // @note           0.0.4r2 AUTHOR_SHEET-Unterstützung hinzugefügt, wichtig: Dateiendung muss .author.css sein!
    // @note           0.0.4 Remove E4X
    // @note           CSS Entry-Klasse erstellt
    // @note           Style-Test-Funktion überarbeitet
    // @note           Wenn die Datei gelöscht wurde, CSS beim Neu-Erstellen und Löschen des Menüs abbrechen
    // @note           uc einlesen .uc.css temporäre Korrespondenz zum erneuten Lesen
    // ==/UserScript==
    /****** Bedienungsanleitung ******
    
    CSS-Ordner im Chrome-Ordner erstellen, CSS-Dateien dort ablegen - speichern.
    Diejenigen, deren Dateiname mit "xul-" beginnen, diejenigen, die mit ".as.css" enden, sind AGENT_SHEET, 
    alle anderen außer USER_SHEET werden gelesen. Da der Inhalt der Datei nicht überprüft wird,
    darauf achten, die Angabe von @namespace nicht zu vergessen!
    
    Schaltfläche wird in Navigationsleiste eingefügt
    Linksklick auf Stil, zum aktivieren/deaktivieren
    Mittelklick auf Stil zum aktivieren/deaktivieren, ohne Menü zu schließen
    Rechtsklick auf Stil zum Öffnen im Editor
    Strg+Linksklick zum Anzeigen im Dateimanager
    
    Verwenden des in "view_source.editor.path" angegebenen Editors
    Dateiordner kann in Konfiguration geändert werden
    
     **** Anleitung Ende ****/
     
    /* Konfiguration */
    // Position: als Menü anzeigen = 1, als frei verschiebbare-Schaltfläche = 0
    let position = 0;
    // alternativer Dateimanager, Bsp.:
    // let filemanager = "C:\\Programme\\totalcmd\\TOTALCMD64.EXE";
    let filemanager = "C:\\Programme\\TotalCommander\\TOTALCMD64.EXE"";
    // eventuelle Parameter für den alternativen Dateimanager, sonst filemanagerParam = "";
    //let filemanagerParam = "/O /T";//Totalcommander
    let filemanagerParam = "";
    // Unterordner für die CSS-Dateien:
    let cssFolder = "CSS";
    // zusätzlich Chrome-Ordner im Untermenü anzeigen: 1 = ja, 0 = nein
    let showChrome = 1;
    /* Konfiguration Ende */
    
    (function(){
    	
    let { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
     
    // Wenn beim Start ein weiteres Fenster (zweites Fenster) vorhanden ist, beenden
    let list = Services.wm.getEnumerator("navigator:browser");
    while(list.hasMoreElements()){ if(list.getNext() != window) return; }
    
    if (window.UCL) {
    	window.UCL.destroy();
    	delete window.UCL;
    }
    const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
    
    window.UCL = {
    	USE_UC		: "UC" in window,
    	AGENT_SHEET	: Ci.nsIStyleSheetService.AGENT_SHEET,
    	USER_SHEET 	: Ci.nsIStyleSheetService.USER_SHEET,
    	AUTHOR_SHEET: Ci.nsIStyleSheetService.AUTHOR_SHEET,
    	readCSS    	: {},
    	get disabled_list() {
    		let obj = [];
    		try {
    			obj = decodeURIComponent(this.prefs.getCharPref("disabled_list")).split("|");
    		} catch(e) {}
    		delete this.disabled_list;
    		return this.disabled_list = obj;
    	},
    	get prefs() {
    		delete this.prefs;
    		return this.prefs = Services.prefs.getBranch("UserCSSLoader.")
    	},
    	get styleSheetServices(){
    		delete this.styleSheetServices;
    		return this.styleSheetServices = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
    	},
    	get FOLDER() {
    		let aFolder;
    		try {
    			// UserCSSLoader.FOLDER verwenden
    			let folderPath = this.prefs.getCharPref("FOLDER");
    			aFolder = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile)
    			aFolder.initWithPath(folderPath);
    		} catch (e) {
    			aFolder = Services.dirsvc.get("UChrm", Ci.nsIFile);
    			aFolder.appendRelativePath("CSS");
    		}
    		if (!aFolder.exists() || !aFolder.isDirectory()) {
    			aFolder.create(Ci.nsIFile.DIRECTORY_TYPE, 0664);
    		}
    		delete this.FOLDER;
    		return this.FOLDER = aFolder;
    	},
    		
    	getFocusedWindow: function() {
    		let win = document.commandDispatcher.focusedWindow;
    		if (!win || win == window) win = content;
    		return win;
    	},
    
    	init: function() {
    		const cssmenu = $C("menu", {
    			id: "usercssloader-menu",
    			tooltiptext: "UserCSSLoader\n\nLinksklick: Stylesheets anzeigen\nMittelklick: Styles importieren",
    			label: "CSS",
    			accesskey: "C"
    		});
    		const menupopup = $C("menupopup", {
    			id: "usercssloader-menupopup"
    		});
    		cssmenu.appendChild(menupopup);
    
    		let menu = $C("menu", {
    			label: "Style-Loader-Menü",
    			id: "style-loader-menu",
    			accesskey: "y"
    		});
    		menupopup.appendChild(menu);
    		let mp = $C("menupopup", { id: "usercssloader-submenupopup" });
    		menu.appendChild(mp);
    		let rebuildItem = $C("menuitem", {
    			label: "Styles importieren",
    			accesskey: "R",
    			acceltext: "Alt + R",
    		});
    		rebuildItem.addEventListener("command", () => UCL.rebuild());
    		mp.appendChild(rebuildItem);
    		mp.appendChild($C("menuseparator"));
    		let createCSS = $C("menuitem", {
    			label: "CSS-Datei erstellen",
    			accesskey: "E",
    		});
    		createCSS.addEventListener("command", () => UCL.create());
    		mp.appendChild(createCSS);
    		let openFolder = $C("menuitem", {
    			label: "CSS-Ordner öffnen",
    			accesskey: "O",
    		});
    		openFolder.addEventListener("command", () => UCL.openFolder());
    		mp.appendChild(openFolder);
    		let editChromeItem = $C("menuitem", {
    			label: "userChrome.css bearbeiten",
    			//hidden: false,
    		});
    		editChromeItem.addEventListener("command", () => UCL.editUserCSS("userChrome.css"));
    		mp.appendChild(editChromeItem);
    		let editContentItem = $C("menuitem", {
    			label: "userContent.css bearbeiten",
    			//hidden: false,
    		});
    		editContentItem.addEventListener("command", () => UCL.editUserCSS("userContent.css"));
    		mp.appendChild(editContentItem);
    		
    		let styleTestChrome = $C("menuitem", {
    			label: "Stil Testen (Chrome)",
    			id: "usercssloader-test-chrome",
    			hidden: true,
    			accesskey: "C",
    		});
    		styleTestChrome.addEventListener("command", () => UCL.styleTest("window"));
    		mp.appendChild(styleTestChrome);
    		let styleTest = $C("menuitem", {
    			label: "Stil Testen(Webseiten)",
    			id: "usercssloader-test-content",
    			hidden: true,
    			accesskey: "W",
    		});
    
    		menu = $C("menu", {
    			label: ".uc.css",
    			accesskey: "U",
    			hidden: !UCL.USE_UC
    		});
    		menupopup.appendChild(menu);
    		mp = $C("menupopup", { id: "usercssloader-ucmenupopup" });
    		menu.appendChild(mp);
    		let UCrebuild = $C("menuitem", {
    			label: "Importieren(.uc.js)",
    		});
    		UCrebuild.addEventListener("command", () => UCL.UCrebuild());
    		mp.appendChild(UCrebuild);
    		mp.appendChild($C("menuseparator", { id: "usercssloader-ucsepalator" }));
    
    		
    		CustomizableUI.createWidget({
    			id: 'usercssloader-menu-item',
    			type: 'custom',
    			defaultArea: CustomizableUI.AREA_NAVBAR,
    			onBuild: function(aDocument) {
    				let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbaritem');
    				toolbaritem.id = 'usercssloader-menu-item';
    				toolbaritem.className = 'chromeclass-toolbar-additional';
    				return toolbaritem;
    			}
    		});
    		$('usercssloader-menu-item').appendChild(cssmenu);
    
    		let key = $C("key", {
    			id: "usercssloader-rebuild-key",
    			key: "R",
    			modifiers: "alt",
    		});
    		key.addEventListener("command", () => UCL.rebuild());
    		$("mainKeyset").appendChild(key);
    
    		this.rebuild();
    		this.initialized = true;
    		if (UCL.USE_UC) {
    			setTimeout(function() {
    				UCL.UCcreateMenuitem();
    			}, 1000);
    		}
    		window.addEventListener("unload", this, false);
    	},
    	uninit: function() {
    		const dis = [];
    		for (let x of Object.keys(this.readCSS)) {
    			if (!this.readCSS[x].enabled)
    				dis.push(x);
    		}
    		this.prefs.setCharPref("disabled_list", encodeURIComponent(dis.join("|")));
    		window.removeEventListener("unload", this, false);
    	},
    	destroy: function() {
    		var i = document.getElementById("usercssloader-menu");
    		if (i) i.parentNode.removeChild(i);
    		var i = document.getElementById("usercssloader-rebuild-key");
    		if (i) i.parentNode.removeChild(i);
    		this.uninit();
    	},
    	handleEvent: function(event) {
    		switch(event.type){
    			case "unload": this.uninit(); break;
    		}
    	},
    	rebuild: function() {
    		let ext = /\.css$/i;
    		let not = /\.uc\.css/i;
    		let files = this.FOLDER.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
    
    		while (files.hasMoreElements()) {
    			let file = files.getNext().QueryInterface(Ci.nsIFile);
    			if (!ext.test(file.leafName) || not.test(file.leafName)) continue;
    			let CSS = this.loadCSS(file);
    			CSS.flag = true;
    		}
    		for (let leafName of Object.keys(this.readCSS)) {
    			const CSS = this.readCSS[leafName];
    			if (!CSS.flag) {
    				CSS.enabled = false;
    				delete this.readCSS[leafName];
    			}
    			delete CSS.flag;
    			this.rebuildMenu(leafName);
    		}
    		if (this.initialized) {
    			if (typeof(StatusPanel) !== "undefined")
    				StatusPanel._label = "Styles importiert";
    			else
    				XULBrowserWindow.statusTextField.label = "Styles importiert";
    		}
    	},
    	loadCSS: function(aFile) {
    		var CSS = this.readCSS[aFile.leafName];
    		if (!CSS) {
    			CSS = this.readCSS[aFile.leafName] = new CSSEntry(aFile);
    			if (this.disabled_list.indexOf(CSS.leafName) === -1) {
    				CSS.enabled = true;
    			}
    		} else if (CSS.enabled) {
    			CSS.enabled = true;
    		}
    		return CSS;
    	},
    	rebuildMenu: function(aLeafName) {
    		var CSS = this.readCSS[aLeafName];
    		var menuitem = document.getElementById("usercssloader-" + aLeafName);
    		if (!CSS) {
    			if (menuitem)
    				menuitem.parentNode.removeChild(menuitem);
    			return;
    		}
    
    		if (!menuitem) {
    			menuitem = $C("menuitem", {
    				label		: aLeafName,
    				id			: "usercssloader-" + aLeafName,
    				class		: "usercssloader-item " + (CSS.SHEET == this.AGENT_SHEET? "AGENT_SHEET" : CSS.SHEET == this.AUTHOR_SHEET? "AUTHOR_SHEET": "USER_SHEET"),
    				type		: "checkbox",
    				autocheck	: "false",
    			});
    			menuitem.addEventListener("command", () => { UCL.toggle(aLeafName); });
    			menuitem.addEventListener("mouseup", (event) => { if (event.button === 1) event.preventDefault(); });
    			menuitem.addEventListener("click", (event) => { UCL.itemClick(event); });
    			document.getElementById("usercssloader-menupopup").appendChild(menuitem);
    		}
    		menuitem.setAttribute("checked", CSS.enabled);
    	},
    	toggle: function(aLeafName) {
    		var CSS = this.readCSS[aLeafName];
    		if (!CSS) return;
    		CSS.enabled = !CSS.enabled;
    		this.rebuildMenu(aLeafName);
    	},
    	itemClick: function(event) {
    		if (event.button == 0) return;
    
    		event.preventDefault();
    		event.stopPropagation();
    		let label = event.currentTarget.getAttribute("label");
    
    		if (event.button == 1) {
    			this.toggle(label);
    		}
    		else if (event.button == 2) {
    			closeMenus(event.target);
    			this.edit(this.getFileFromLeafName(label));
    		}
    	},
    	getFileFromLeafName: function(aLeafName) {
    		let f = this.FOLDER.clone();
    		f.QueryInterface(Ci.nsIFile); // use appendRelativePath
    		f.appendRelativePath(aLeafName);
    		return f;
    	},
    	styleTest: function(aWindow) {
    		aWindow || (aWindow = this.getFocusedWindow());
    		new CSSTester(aWindow, function(tester){
    			if (tester.saved)
    				UCL.rebuild();
    		});
    	},
    
    	openFolder: function() {
    		this.FOLDER.launch();
    	},
    	
    	editUserCSS: function(aLeafName) {
    		let file = Services.dirsvc.get("UChrm", Ci.nsIFile);
    		file.appendRelativePath(aLeafName);
    		this.edit(file);
    	},
    	edit: function(aFile) {
    		var editor = Services.prefs.getCharPref("view_source.editor.path");
    		if (!editor) return alert("Unter about:config den vorhandenen Schalter:\n view_source.editor.path mit dem Editorpfad ergänzen");
    		try {
    			var UI = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
    			UI.charset = window.navigator.platform.toLowerCase().indexOf("win") >= 0? "Shift_JIS": "UTF-8";
    			var path = UI.ConvertFromUnicode(aFile.path);
    			var app = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
    			app.initWithPath(editor);
    			var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
    			process.init(app);
    			process.run(false, [path], 1);
    		} catch (e) {}
    	},
    	create: function(aLeafName) {
    		if (!aLeafName) aLeafName = prompt("Name des Styles", dateFormat(new Date(), "%Y_%m%d_%H%M%S"));
    		if (aLeafName) aLeafName = aLeafName.replace(/\s+/g, " ").replace(/[\\/:*?\"<>|]/g, "");
    		if (!aLeafName || !/\S/.test(aLeafName)) return;
    		if (!/\.css$/.test(aLeafName)) aLeafName += ".css";
    		let file = this.getFileFromLeafName(aLeafName);
    		this.edit(file);
    	},
    	UCrebuild: function() {
    		let re = /^file:.*\.uc\.css(?:\?\d+)?$/i;
    		let query = "?" + new Date().getTime();
    		Array.slice(document.styleSheets).forEach(function(css){
    			if (!re.test(css.href)) return;
    			if (css.ownerNode) {
    				css.ownerNode.parentNode.removeChild(css.ownerNode);
    			}
    			let pi = document.createProcessingInstruction('xml-stylesheet','type="text/css" href="'+ css.href.replace(/\?.*/, '') + query +'"');
    			document.insertBefore(pi, document.documentElement);
    		});
    		UCL.UCcreateMenuitem();
    	},
    	UCcreateMenuitem: function() {
    		let sep = $("usercssloader-ucsepalator");
    		let popup = sep.parentNode;
    		if (sep.nextSibling) {
    			let range = document.createRange();
    			range.setStartAfter(sep);
    			range.setEndAfter(popup.lastChild);
    			range.deleteContents();
    			range.detach();
    		}
    
    		let re = /^file:.*\.uc\.css(?:\?\d+)?$/i;
    		Array.slice(document.styleSheets).forEach(function(css) {
    			if (!re.test(css.href)) return;
    			let fileURL = decodeURIComponent(css.href).split("?")[0];
    			let aLeafName = fileURL.split("/").pop();
    			let m = $C("menuitem", {
    				label		: aLeafName,
    				tooltiptext	: fileURL,
    				id			: "usercssloader-" + aLeafName,
    				type		: "checkbox",
    				autocheck	: "false",
    				checked		: "true",
    			});
    			m.css = css;
    			m.addEventListener("command", function() {
    				this.setAttribute("checked", !(this.css.disabled = !this.css.disabled));
    			});
    			m.addEventListener("mouseup", function(event) {
    				if (event.button === 1) event.preventDefault();
    			});
    			m.addEventListener("click", function(event) {
    				UCL.UCItemClick(event);
    			});
    			popup.appendChild(m);
    		});
    	},
    	UCItemClick: function(event) {
    		if (event.button == 0) return;
    		event.preventDefault();
    		event.stopPropagation();
    
    		if (event.button == 1) {
    			event.target.doCommand();
    		}
    		else if (event.button == 2) {
    			closeMenus(event.target);
    			let fileURL = event.currentTarget.getAttribute("tooltiptext");
    			let file = Services.io.getProtocolHandler("file").QueryInterface(Ci.nsIFileProtocolHandler).getFileFromURLSpec(fileURL);
    			this.edit(file);
    		}
    	},
    };
    
    function CSSEntry(aFile) {
    	this.path = aFile.path;
    	this.leafName = aFile.leafName;
    	this.lastModifiedTime = 1;
    	this.SHEET = /^xul-|\.as\.css$/i.test(this.leafName) ?
    		Ci.nsIStyleSheetService.AGENT_SHEET:
    		/\.author\.css$/i.test(this.leafName)?
    			Ci.nsIStyleSheetService.AUTHOR_SHEET:
    			Ci.nsIStyleSheetService.USER_SHEET;
    }
    CSSEntry.prototype = {
    	sss: Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService),
    	_enabled: false,
    	get enabled() {
    		return this._enabled;
    	},
    	set enabled(isEnable) {
    		var aFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile)
    		aFile.initWithPath(this.path);
    
    		var isExists = aFile.exists(); // true, wenn die Datei bereits existiert
    		var lastModifiedTime = isExists ? aFile.lastModifiedTime : 0;
    		var isForced = this.lastModifiedTime != lastModifiedTime; //true, wenn es eine Änderung in der Datei gibt
    
    		var fileURL = Services.io.getProtocolHandler("file").QueryInterface(Ci.nsIFileProtocolHandler).getURLSpecFromActualFile(aFile);
    		var uri = Services.io.newURI(fileURL, null, null);
    
    		if (this.sss.sheetRegistered(uri, this.SHEET)) {
    			// Wenn diese Datei bereits gelesen wurde
    			if (!isEnable || !isExists) {
    				this.sss.unregisterSheet(uri, this.SHEET);
    			}
    			else if (isForced) {
    				// Nach Stornierung erneut einlesen
    				this.sss.unregisterSheet(uri, this.SHEET);
    				this.sss.loadAndRegisterSheet(uri, this.SHEET);
    			}
    		} else {
    			// Datei wurde nicht gelesen
    			if (isEnable && isExists) {
    				this.sss.loadAndRegisterSheet(uri, this.SHEET);
    			}
    		}
    		if (this.lastModifiedTime !== 1 && isEnable && isForced) {
    			log(this.leafName + " wurde aktualisiert");
    		}
    		this.lastModifiedTime = lastModifiedTime;
    		return this._enabled = isEnable;
    	},
    };
    
    function CSSTester(aWindow, aCallback) {
    	this.win = aWindow || window;
    	this.doc = this.win.document;
    	this.callback = aCallback;
    	this.init();
    }
    CSSTester.prototype = {
    	sss: Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService),
    	preview_code: "",
    	saved: false,
    	init: function() {
    		this.dialog = openDialog(
    			"data:text/html;charset=utf8,"+encodeURIComponent('<!DOCTYPE HTML><html lang="ja"><head><title>CSSTester</title></head><body></body></html>'),
    			"",
    			"width=550,height=400,dialog=no");
    		this.dialog.addEventListener("load", this, false);
    	},
    	destroy: function() {
    		this.preview_end();
    		this.dialog.removeEventListener("unload", this, false);
    		this.previewButton.removeEventListener("click", this, false);
    		this.saveButton.removeEventListener("click", this, false);
    		this.closeButton.removeEventListener("click", this, false);
    	},
    	handleEvent: function(event) {
    		switch(event.type) {
    			case "click":
    				if (event.button != 0) return;
    				if (this.previewButton == event.currentTarget) {
    					this.preview();
    				}
    				else if (this.saveButton == event.currentTarget) {
    					this.save();
    				}
    				else if (this.closeButton == event.currentTarget) {
    					this.dialog.close();
    				}
    				break;
    			case "load":
    				var doc = this.dialog.document;
    				doc.body.innerHTML = '\
    					<style type="text/css">\
    						:not(input):not(select) { padding: 0px; margin: 0px; }\
    						table { border-spacing: 0px; }\
    						body, html, #main, #textarea { width: 100%; height: 100%; }\
    						#textarea { font-family: monospace; }\
    					</style>\
    					<table id="main">\
    						<tr height="100%">\
    							<td colspan="4"><textarea id="textarea"></textarea></td>\
    						</tr>\
    						<tr height="40">\
    							<td><input type="button" value="Preview" /></td>\
    							<td><input type="button" value="Save" /></td>\
    							<td width="80%"><span class="log"></span></td>\
    							<td><input type="button" value="Close" /></td>\
    						</tr>\
    					</table>\
    				';
    				this.textbox = doc.querySelector("textarea");
    				this.previewButton = doc.querySelector('input[value="Preview"]');
    				this.saveButton = doc.querySelector('input[value="Save"]');
    				this.closeButton = doc.querySelector('input[value="Close"]');
    				this.logField = doc.querySelector('.log');
    
    				var code = "@namespace url(" + this.doc.documentElement.namespaceURI + ");\n";
    				code += this.win.location.protocol.indexOf("http") === 0?
    					"@-moz-document domain(" + this.win.location.host + ") {\n\n\n\n}":
    					"@-moz-document url(" + this.win.location.href + ") {\n\n\n\n}";
    				this.textbox.value = code;
    				this.dialog.addEventListener("unload", this, false);
    				this.previewButton.addEventListener("click", this, false);
    				this.saveButton.addEventListener("click", this, false);
    				this.closeButton.addEventListener("click", this, false);
    
    				this.textbox.focus();
    				let p = this.textbox.value.length - 3;
    				this.textbox.setSelectionRange(p, p);
    
    				break;
    			case "unload":
    				this.destroy();
    				this.callback(this);
    				break;
    		}
    	},
    	preview: function() {
    		var code = this.textbox.value;
    		if (!code || !/\:/.test(code))
    			return;
    		code = "data:text/css;charset=utf-8," + encodeURIComponent(this.textbox.value);
    		if (code == this.preview_code)
    			return;
    		this.preview_end();
    		var uri = Services.io.newURI(code, null, null);
    		this.sss.loadAndRegisterSheet(uri, Ci.nsIStyleSheetService.AGENT_SHEET);
    		this.preview_code = code;
    		this.log("Preview");
    	},
    	preview_end: function() {
    		if (this.preview_code) {
    			let uri = Services.io.newURI(this.preview_code, null, null);
    			this.sss.unregisterSheet(uri, Ci.nsIStyleSheetService.AGENT_SHEET);
    			this.preview_code = "";
    		}
    	},
    	save: function() {
    		var data = this.textbox.value;
    		if (!data) return;
    
    		var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
    		fp.init(window, "", Ci.nsIFilePicker.modeSave);
    		fp.appendFilter("CSS Files","*.css");
    		fp.defaultExtension = "css";
    		if (window.UCL)
    			fp.displayDirectory = UCL.FOLDER;
    		var res = fp.show();
    		if (res != fp.returnOK && res != fp.returnReplace) return;
    
    		var suConverter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
    		suConverter.charset = "UTF-8";
    		data = suConverter.ConvertFromUnicode(data);
    		var foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
    		foStream.init(fp.file, 0x02 | 0x08 | 0x20, 0664, 0);
    		foStream.write(data, data.length);
    		foStream.close();
    		this.saved = true;
    	},
    	log: function() {
    		this.logField.textContent = dateFormat(new Date(), "%H:%M:%S") + ": " + $A(arguments);
    	}
    };
    
    UCL.init();
    
    function $(id) { return document.getElementById(id); }
    function $A(arr) { return Array.slice(arr); }
    function $C(name, attr) {
    	const el = document.createElementNS(XULNS, name);
    	if (attr) Object.keys(attr).forEach(function(n) { el.setAttribute(n, attr[n]) });
    	return el;
    }
    function dateFormat(date, format) {
    	format = format.replace("%Y", ("000" + date.getFullYear()).substr(-4));
    	format = format.replace("%m", ("0" + (date.getMonth()+1)).substr(-2));
    	format = format.replace("%d", ("0" + date.getDate()).substr(-2));
    	format = format.replace("%H", ("0" + date.getHours()).substr(-2));
    	format = format.replace("%M", ("0" + date.getMinutes()).substr(-2));
    	format = format.replace("%S", ("0" + date.getSeconds()).substr(-2));
    	return format;
    }
    
    function log(mes) { console.log(mes); }
    })();
    Alles anzeigen

    Dann habe ich noch:

    ExtraConfigMenu.css

    CSS
    #submenu-CSSShadow::before,
    #submenu-cssweb::before,
    #submenu-cssforum::before,
    #submenu-css::before,
    #submenu-ucjs::before {
      margin-right: 2px !important; 
      margin-left: -20px !important;
      content: '' !important;
      display: block !important;
      width: 19px !important;
      height: 15px !important;
      background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADC0lEQVQ4jYWTa0wVBBiGXxHKLmyobUe3rFaOFBRcDAs1OM0WBsWEtZZQLSugUNSBI0wEFDAPMAQ6XGY5Qd2JDlK0qTDczDnDSmIoCmarcRiXgCmH2yE4l6c/xepH9Px+vmffj++T5uHbo7l+CeEh8fM5/4n9Qk1+0b43MFRYTq0urq0LtlrX/+/Q8MDAFvq7LBez42eeyypGg6Dm39DHX6G40lH/PQfPblnrGyZJsyNtz0wOdRr+FaiLf+LDS+WJB1XaNq2GHlR/GyVbMCamUWbZD13vgC0TT+9+sO3D1VnQLEn6Y+iXp+xtSTe4a5rBUc6d1nRWRr2J1mSwPT8HpgpgugrPeBXYK2Gigu4z7zNyJfO0JGnm3q9rGcrD4/gMt+0Q2LKhLw8G8sHxKZ67Zhg1M2sr4t7VNNoqkzgWG0C9Obxsbn1Xxwd4xo7jvBCHu8+Ep78Iek24bEdwdB2mtySWG4mPci76EW6ejMSabaBsT/SBucDQ2ZibDJqZOB/H1PepTLXuZLw1hYnz6UweXoOzdhH2muU07V3MriB/GvaGU53xaspcoL/mxWuuzmz6a40MWl+h3xJNX3EUM/Wv42kK5IfCeBICHyZ542M0ZoXSU7WBL46mvyZJmvoy6ZDz+ufYG2PpLAzgekkw3TufxNlSjftiKJc++YjYlYuo2+HPj/nBXMtfxzepy+luPRYhSaIjmYa3Q8d7zME07vKjPTUAR+Vu3B1bGT1jwrpNDJeu4ve8ZXTmLCEvxovcKB/aL1cHaOb2T0Hu796lvfCFse6KCHpLNjN7MgLXz+lw6wATV97jxI6Xydjsw5EEb7Zv8iYm2Hs2cvXCMUkbdM56Ytlk4UtwKwX31UCcLWFMn47A2RJDfZqRVQ/K9fhSTa7w08D9XuqSdFnS15LKJa2TJL21Qs0jmc/iyI1gLG8jwwWRmJ5fiqQ7kpokHZdUIGm3pG2SQsPCwh745xX73idlBfmqYf1iNS1ZoHpJOX/JmyQ9LclgMBgeMhqN3vP9k1dISIiPpIWSFswn/s2f5mHBqON1Ok8AAAAASUVORK5CYII=") !important;
      background-repeat: no-repeat !important;
      background-position: 0 0 !important;
      background-size: 15px 15px !important;
    }
    
    .uProfMenu_clipboard::before {
      margin-right: 2px !important; 
      margin-left: -20px !important;
      content: '' !important;
      display: block !important;
      width: 19px !important;
      height: 15px !important;
      background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACHklEQVQ4jYXSQUhTcRzA8QdBhy7hpYPgxQ7VocPAXaZQCmMkKEUSqBA2WrjCUXhzAxM10LQZQ4NoOGswDCtcSbmM3HhaMicUtIWUDw0myDusMd97Y+a30zafG/WH7+3///D/wU8QBEF4t7aNazpBm2eVFne0bPYna7hnf6LlQDh8uqe+IKdVUhkNOa2WLZFM45rdwj7+oxRpfbhCKqMhSllWN3OFRCmLKGUJxXfRcvD6u4Lr1WYpcmnkE6mMpnt8EMkDseQeseQe/XNb9Ae+lQL5CwcTpSwL6wobO4pupCaXWArEt/d1Hf5FKL5L8OtvUhmNxsHlItB8vzxwGFlYV1hYV8oDclotC+SROwEzVq8BUcqWAo2Dy/8E4tv73Hx2nrvBVq48OoWcVv8POPx1OPx1dE4ZsXoNOF+2EIi66X7ejGWsknpnRA8kU3qgc8rITMxTKBB1437fjW9pCJvfQs29Y0Wg3hkhmVK5/KaY1WtgJuZhdN7B6LyDgTkbvcEOeoMdTIT7aJ+s5UzfUQqAJKt0hf/gTYA3AW2PTxOIuvF/HsG3NIRvaYiBOTsT4T5sfgsne6rQcloR2NhRuP4hV+jiRDWWsUoaHpzANFxB+2Qt44u9XHtqxuw5i/HW2+IITS4ROa0iySobO4qu/OaZhiu46mvggseAltP0mzi9uMWN0Sjnbn+kxh4qW7XzOFU9RzB1hbAOr/Ai8gtBEIS/L2O87ytW43AAAAAASUVORK5CYII=") !important;
      background-repeat: no-repeat !important;
      background-position: 0 0 !important;
      background-size: 15px 15px !important;
    } 
    
    .uProfMenu_folder::before {
      margin-right: 2px !important; 
      margin-left: -20px !important;
      content: '' !important;
      display: block !important;
      width: 19px !important;
      height: 15px !important;
      background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB/0lEQVQ4jY2STWjTYBjHX69et4Dvrq2HwS47exRUPIR5Uzz4wcY8FC8exNExYZCuFQJtusuKbIVAP0gqSCfkJBOmBF5pcWHHQkmz1nQQqhDN5OXvofSL0G7/8+//e3ie9yXHx19xWK2Ccw4yJUEQIL9/gC9HRzAMA5ZljdiEJMH3fZRLxakCTauAcw7HtpGQJHDO4XkefN/vdxQli4wsw7HtkIQxNoQzsoz8/gHKpSI0rQLDMEZ8p9PG9uZGSGIYBjzPg+u6ME0TmlaBomTBOcdhtTo5MAiCkIQxhkajAVVV0em04dg2PM8DY2zyFuPZ3tzARbMJQghJPngBzjlUVYWqqnBdF5ZlIbeXm3ozQgghbjKFlihCpxT//D9I7uwiubMLRcmiXCoiCILZgno0gl6pAJ1SfLh7D89ff5pdGM/1JxZic/OoRyP4Xf0InVJ8e/rsaoKF9RPc3DrDtdvf8erdKXRK0SsV0BJFpAVh5oebKC+lznH/8XtYmQx0ShE0GnAePkJaENA7/RGWjJcXpS5W4rUhNJBcNJtor64hLQj4+/NsJFmOMSxK3WH5zsvPoQk6pahHI0OJTmmfWYnXJsrLMTZ1x4FksI4TfwOSLxhYWD/BUuocN25Jl146NjePliiivbqGX91un8/t5bD1NoF6rXalp8rIMkzTBCGE/Aej45/2D3b80gAAAABJRU5ErkJggg==") !important;
      background-repeat: no-repeat !important;
      background-position: 0 0 !important;
      background-size: 15px 15px !important;
    }
    
    menuitem.uProfMenu_ucjs::before,
    menuitem.uProfMenu_css::before,
    .uProfMenu_edit::before {
      margin-right: 2px !important; 
      margin-left: -20px !important;
      content: '' !important;
      display: block !important;
      width: 19px !important;
      height: 15px !important;
      background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAByklEQVQ4jZ3Qz0uTARjA8adD/0qWF82KwNC62G1HrRgUL3iwOZU5XlHmeA/vYYsFY+/7TnROOnQNgs6RhFbLH9A7DV9ljg0Z+B4cbEO8CN8OG7wKbmgPfHlOz+fwiLQmbqyQMJYxrAxm+uoMK0PCWOad+QG5OHoyw+pajqkfIAaI1SYDQr/g6/ef6MmMh8zHTer1BsFvp3x06djU6imNeoP5uOkBs3qSWrWKvIf1BsT3wb8G3Z9AFkDMVhZICmrVKrN60gNULcGJ6yJJWCjC63Xo/Qy3MiCLIEsXsuDEdVG1hAeEIjGOKxUkBW9/dzhuAceVCqFIzAMm53SOSmXEhMdfOhwvgaThqFRmck73gICqUSwcIhbcznY4bgHFwiEBVfOAsVAEZ++g+bAsyEqbss2nOnsHjIUiHjAanGE77+A3tpBXOcTfppc53lhbbNsOo8EZD1AC02zsFNjMO9i7Dvm/V2fvOmzaDhs7BZTAtAcMK+PcfTDIvUfPLvfwKV19g3T1DVzqzv0BhpXxJhCOxqidnf9X4WgMCUdj/HFKpNLZa297v0wqnW0CE6qGb0ShdnZ+4z2haohvRKGnf4jeJ89vVE//EL4XCv8AU/F+h6m656UAAAAASUVORK5CYII=") !important;
      background-repeat: no-repeat !important;
      background-position: 0 0 !important;
      background-size: 15px 15px !important;
    }
    
    #submenu-about::before,
    .uProfMenu_about::before {
      margin-right: 2px !important; 
      margin-left: -20px !important;
      content: '' !important;
      display: block !important;
      width: 19px !important;
      height: 15px !important;
      background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC2ElEQVQ4jY2Se0wMABzHv2S9FHmkJjVxkmtCa/MIUa6a1jo9xKSRHJUpY3nMI4UeoqyHVrMe8yjXoiKrcGqLu5Yp1yGvKIm7SYjiOl//xW00379/n88f3+8PGCGygnSLQNGK0JFu/pmBuvxjzwMmMc7ZMF4VbGn2X5C644kPO1pKGg6E8E2kBVnqSNba8NlhE3ZGWtQtsDWdOqLgam7qHk3X66388Crw1l15W3yVgtGZhTwQF8AKicP7/Zt8AgBMH1FSeXKHffaT3o59rRrG3FfT5fJjmiXWEAFJdA1PrJPJZGMAwGu2mQfZbKoHn15sYlPU+XWo5oOWl3sG2fhxkHua39Eu7wERU054RHFV4EZl24Wc5HNiG5IFjnqCyEvXGss1Wsr7frCpb5CVPd8ZJ3/BmoZcajLXsGeXHe8EWlJV6Mkbp8c06MFKpdJKKG1l2ss+lnb381L3ALPbnvJHdTS1yULqioz5pdCKd/aOo2S2gPVVqbP0C8zPKjc4I6PH3S6GKt5yw612dqd5UysNIm8I2ZwSwmVz7Gls505YelGtlv2eVieNSCi5Vk1szqVR3j2OKn7Em9vmk7VZ/HnblVUnjhAOq4ng4zT330tvn5VUlIaKhwV8KOFR36W9EMUTW6U8u3MtmbOduhYxP5alULoe/Jxuz2+J5uxJMGTYcnMOw/1KufPPxnC2Z4jU0bERWlWaP1m8mEPtu0nVQX6tD2NOlJgbfW25I8qJQrEfjZ38CocFTdevW39OEZGqSFIxh7raRRw4705trR/LYpdwsmAeseUUUVxPi4wKjvfaPgRgJQCTYUnoNFzR7FvIb/Hu/JToRvVxb6a4TSBmLifWJRGxeTRLukhzT4kWMDwEwAOAvd4KpoDEdeKoarcpox9YG6IL42Z8wSyRFs5BOriE9GOasxLAMQBBAOYCMP7bJxsAGAtgEgABAFcA7gCWABACsBYIBEZ/Ar8AX7iDBFj3wIsAAAAASUVORK5CYII=") !important;
      background-repeat: no-repeat !important;
      background-position: 0 0 !important;
      background-size: 15px 15px !important;
    }
    
    :is(#submenu-CSSShadow,
    #submenu-cssweb::before,
    #submenu-cssforum,
    #submenu-css,
    #submenu-ucjs,
    .uProfMenu_clipboard,
    .uProfMenu_folder,
    menuitem.uProfMenu_ucjs,
    menuitem.uProfMenu_css,
    #submenu-about,
    menuitem.uProfMenu_edit,
    .uProfMenu_about):hover {
      background: red !important;
      border-width: thin !important;
      border-color: #aecff7 !important;
      border-style: solid !important;
    }
    /*Abstände der Einträge im Kontextmenü wieder schmaler*/
    menupopup > menuitem,
    menupopup > menu {
      padding-block: 1px !important;
      padding-inline-start: 25px !important;
    }
    Alles anzeigen

    und zuletzt:

    ExtraConfigMenu-button.css

    CSS
    //* ExtraConfigMenu-button *//
    
    #submenu-ucjs-items,
    #submenu-about-items{
    	margin-left: 3px !important;
        }
    
    menupopup#ExtraConfigMenu-popup menuitem:hover,
    menupopup#ExtraConfigMenu-popup menu:hover{
    	color:red !important;
    	cursor:pointer !important;
       }
    
    #ExtraConfigMenu-button > dropmarker, 
    #ExtraConfigMenu-button > hbox > .toolbarbutton-menu-dropmarker {
    display: none !important;
       }	
       
    menupopup#ExtraConfigMenu-popup menu:hover >.menu-right{	
     Background: url("../Icons/Pfeil vorwärts.gif") !important;
      -moz-image-region: rect(0px 15px 15px 0px) !important;
       }
    	   
    .uProfMenu_clipboard{
    appearance:none !important;
    background: url("../Icons/clipboard.gif") no-repeat !important;
    padding-left: 6px !important;
    background-position: 5px 2px !important;
       }
      
    .uProfMenu_clipboard:hover{
    appearance:none !important;
    background: red url("../Icons/clipboard.gif") no-repeat !important;
    padding-left: 6px !important;
    background-position: 5px 2px !important;
       }
    
    .uProfMenu_ucjs{
    appearance:none !important;
    background: url("../Icons/Haken dran.gif") no-repeat !important;
    padding-left: 6px !important;
    background-position: 5px 2px !important;
       }
    
    .uProfMenu_ucjs:hover{
    appearance:none !important;
    background: red url("../Icons/Haken dran.gif") no-repeat !important;
    padding-left: 6px !important;
    background-position: 5px 2px !important;
       }
    
    #submenu-ucjs{
    appearance:none !important;
    background: url("../Icons/Ordner.gif") no-repeat !important;
    padding-left: 6px !important;
    background-position: 5px 2px !important;
       }
       
    #submenu-ucjs:hover{
    appearance:none !important;
    background: dodgerblue url("../Icons/Ordner.gif") no-repeat !important;
    padding-left: 6px !important;
    background-position: 5px 2px !important;
       }
    
    .uProfMenu_folder{    
    appearance:none !important;
    background: url("../Icons/folder.png") no-repeat !important;
    padding-left: 6px !important;
    background-position: 5px 2px !important;
       }
       
    .uProfMenu_folder:hover{    
    appearance: none!important;
    background: red url("../Icons/folder.png") no-repeat !important;
    padding-left: 6px !important;
    background-position: 5px 2px !important;
       }
    
    .uProfMenu_edit{              
    appearance:none !important;
    background: url("../Icons/Block.png") no-repeat !important;
    padding-left: 6px !important;
    background-position: 5px 2px !important;
       }
                  
    .uProfMenu_edit:hover{              
    appearance:none !important;
    background: red url("../Icons/Block.png") no-repeat !important;
    padding-left:6px !important;
    background-position: 5px 2px !important;
       }
    
    #submenu-about,
    .uProfMenu_about{       
    appearance:none !important;
    background: url("../Icons/AbisZ.gif") no-repeat !important;
    padding-left: 6px !important;
    background-position: 5px 2px !important;
       }
       
    #submenu-about:hover,
    .uProfMenu_about:hover{       
    appearance:none !important;
    background: dodgerblue url("../Icons/AbisZ.gif") no-repeat !important;
    padding-left: 6px !important;
    background-position: 5px 2px !important;
       }
    Alles anzeigen

    Leider bin ich überfragt, was wie und wo mit wem zusammenhängt.

    Daher meine Hilfeanfrage.

  • Der Glückwunsch-Thread

    • BarbaraZ-
    • 3. Oktober 2025 um 13:20

    Auch von mir noch nachträglich alles gute.

  • Aufruf extra confing menu.uc.js

    • BarbaraZ-
    • 3. Oktober 2025 um 13:18

    Moin,
    mit dem Update auf die Version 143.0.3 läuft hier einiges unrund.

    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: 'E:\\Notepad++\\notepad++.exe',
     TextOpenExe: 'E:\\Notepad++\\notepad++.exe',
     // Falls gewuenscht, in Zeile 15 einen Dateimanager eintragen (komplett leer lassen fuer Dateimanager des Systems) Beispiele:
     // vFileManager: 'C:\\Programme\\TotalCommander\\Totalcmd64.exe',
     vFileManager: 'C:\\Programme\\TotalCommander\\Totalcmd64.exe',
     // 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: 'helpMenu',
    // 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 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:cache','about:config','about:crashes','about:downloads','about:home','about:logins','about:support','about:preferences','about:profiles'],
     // 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: 0,
     // Ende der Konfiguration
     init: function() {
       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 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=);  \
             margin-top: 0px !important; \
             opacity: 1 !important;\
         } \
         #ExtraConfigMenu-button > dropmarker, #ExtraConfigMenu-button > hbox > .toolbarbutton-menu-dropmarker { \
           display: none !important; \
         }";
       var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
       var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
       sss.loadAndRegisterSheet(uri,sss.AGENT_SHEET);
        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"));
       // Anlegen von Untermenues fuer userChromeJS-Skripte und CSS-Dateien (befuellen spaeter)
       var submenu = menupopup.appendChild(this.createME("menu","Meine 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","CSSShadow",0,0,"submenu-CSSShadow"));
       var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-CSSShadow-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"));
       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","Bild Url","uProfMenu.edit(0,'Bild Url.css');","uProfMenu_edit",0));
        //menupopup.appendChild(this.createME("menuitem","config Einträge.css","uProfMenu.edit(0,'config Einträge.css');","uProfMenu_edit",0));
        /*menupopup.appendChild(this.createME("menuitem","Forum.css","uProfMenu.edit(0,'./CSSWeb/Forum.css');","uProfMenu_edit",0)); */
       menupopup.appendChild(this.createME("menuitem","userChrome.css","uProfMenu.edit(0,'userChrome.css');","uProfMenu_edit",0));
        menupopup.appendChild(this.createME("menuitem","userChromeShadow.css","uProfMenu.edit(0,'userChromeShadow.css');","uProfMenu_edit",0));
       menupopup.appendChild(this.createME("menuitem","userContent.css","uProfMenu.edit(0,'userContent.css');","uProfMenu_edit",0));
       menupopup.appendChild(this.createME("menuitem","userChrome.js","uProfMenu.edit(0,'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);
       // Ende Einbindung von Konfigdateien
       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;
       }
       menupopup.appendChild(this.createME("menuitem","CSS-Ordner ","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'css');","uProfMenu_folder"),0);
       menupopup.appendChild(this.createME("menuitem","CSSShadow-Ordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'CSSShadow');","uProfMenu_folder"),0);
       menupopup.appendChild(this.createME("menuitem","CSSWeb-Ordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'CSSWeb');","uProfMenu_folder"),0);
        menupopup.appendChild(this.createME("menuitem","cssforum","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'cssforum');","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","Icons-Ordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'Icons');","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 about","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'about');","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(typeof(ToolRstartMod) != "undefined" || this.enableRestart) menupopup.appendChild(this.createME("menuitem","Neustart",
       "try{ToolRstartMod.restartApp(false);} catch(e){alert(e);}","uProfMenu_restart"),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 "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("return " + 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

    So sieht das ganze jetzt aus:

    Erbitte um Hilfe.

  • Aufruf des Profilordners klappt nicht mehr

    • BarbaraZ-
    • 18. September 2025 um 10:44

    Auch hier: Besten Dank<3

  • Aufruf des Profilordners klappt nicht mehr

    • BarbaraZ-
    • 18. September 2025 um 10:38

    Da es in diese Rubrik passt, gleich noch einen hinterher:

    JavaScript
    // ==UserScript==
    // @name           BackupProfileFuchsFan.uc.js
    // @namespace      BackupProfile.github.com
    // @description    Schaltfläche zum Sichern des Firefoxprofils
    // @charset        UTF-8
    // @author         ywzhaiqi、defpt
    // @version        v2018.01.10
    // @note           Vorlage Script von ywzhaiqi (+ Mischung aus diversen Varianten aus dem Fuchsforum 1.11.21)
    // @note           Sicherungsdatei enthaelt auch Profilname
    // @reviewURL      http://bbs.kafan.cn/thread-1758785-1-1.html
    (function () {
        ChromeUtils.importESModule("resource:///modules/CustomizableUI.sys.mjs");
        CustomizableUI.createWidget({
            id : "Backup-button",
            defaultArea : CustomizableUI.AREA_NAVBAR,
            label : "Profilsicherung",
            tooltiptext : "Sichern der aktuellen Konfiguration",
            onClick: function(){
                // Speicherort  
                var path = "D:\\Firefox-Profil-Ordner\\";
                // Ausschlussliste
                var excludes = 'bookmarkbackups *cache* crashes fftmp *healthreport* minidumps safebrowsing *webapps* saved-telemetry-pings *thumbnails* *session* *Telemetry* *hotfix* *.sqlite-shm *.sqlite-wal *.bak parent.lock blocklist.xml content-prefs.sqlite directoryLinks.json mimeTypes.rdf compatibility.ini parent.lock formhistory.sqlite';
    
                let backup = path => {
                    
                    excludes = excludes.replace(/\./g, '\\.').replace(/\*/g, '.*').replace(/\s+/g, '|');
                    excludes = new RegExp(excludes, 'i');
    
                    var zw = Cc['@mozilla.org/zipwriter;1'].createInstance(Ci.nsIZipWriter);
                    var pr = {PR_RDONLY: 0x01, PR_WRONLY: 0x02, PR_RDWR: 0x04, PR_CREATE_FILE: 0x08, PR_APPEND: 0x10, PR_TRUNCATE: 0x20, PR_SYNC: 0x40, PR_EXCL: 0x80};
                    var fu = ChromeUtils.importESModule('resource://gre/modules/FileUtils.sys.mjs').FileUtils;
                    var dir = new FileUtils.File(PathUtils.join(PathUtils.profileDir,[]));
    
                    let d = new Date();
                    d = d.getDate().toString().padStart(2, '0') + '.' + (d.getMonth() + 1).toString().padStart(2, '0') + '.' + d.getFullYear().toString().padStart(2, '0')  + '  '  + d.getHours().toString().padStart(2, '0') + '\uA789' + d.getMinutes().toString().padStart(2, '0') + '\uA789' + d.getSeconds().toString().padStart(2, '0');
    
                    // Die folgende Zeile formt den Archivnamen
                    var archiveName = 'Mein Profil vom ' + ' ' + d + '.zip';  /* 'd' ersetzt 'localnow' */ 
    
                    var xpi = fu.File(path + '\\' + archiveName);
    
                    zw.open(xpi, pr.PR_RDWR | pr.PR_CREATE_FILE | pr.PR_TRUNCATE);
                    
                    // --- FUCHSFAN --->
                    let profPath = dir.leafName + "/";
                    zw.addEntryDirectory(profPath, Date.now() * 1000, false);
                    // <--- FUCHSFAN ---
                    
                    var dirArr = [dir];
                    for (var i=0; i<dirArr.length; i++) {
                        var dirEntries = dirArr[i].directoryEntries;
                        while (dirEntries.hasMoreElements()) {
                            var entry = dirEntries.getNext().QueryInterface(Ci.nsIFile);
                            if (entry.path == xpi.path) {
                                continue;
                            }
    
                            if (entry.isDirectory()) {
                               dirArr.push(entry);
                            }
    
                            var relPath = entry.path.replace(dirArr[0].path, '');
                            if (relPath.match(excludes)) {
                                continue;
                            }
    
                            var saveInZipAs = relPath.substr(1);
                            saveInZipAs = saveInZipAs.replace(/\\/g,'/');
                            
                            // --- FUCHSFAN --->
                            saveInZipAs = profPath+saveInZipAs;
                            // <--- FUCHSFAN ---
                            
                            // Konfigurationsdateien können gesperrt werden
                            try {
                                zw.addEntryFile(saveInZipAs, Ci.nsIZipWriter.COMPRESSION_FASTEST, entry, false);
                            } catch (e) {}
                        }
                    }
                    zw.close();
                    alert('Die aktuelle Konfiguration wurde als:\n'+ archiveName +'\ngesichert in:\n' + path);
    
                    function alert(aString, aTitle) {
                        Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService).showAlertNotification("", aTitle, aString, false, "", null);
                    }
    
                    function bupgetCurrentProfileName(){
                        function readFile(aFile){
                            var stream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);    stream.init(aFile, 0x01, 0, 0);
                            var cvstream = Cc["@mozilla.org/intl/converter-input-stream;1"].createInstance(Ci.nsIConverterInputStream);
                            cvstream.init(stream, "UTF-8", 1024, Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);
                            var content = "", data = {};
                            while (cvstream.readString(4096, data)) {
                                content += data.value;
                            }
                            cvstream.close();
                            return content.replace(/\r\n?/g, "\n");
                        }
                        var PrefD = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("PrefD", Components.interfaces.nsIFile);
                        var ini = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("AppRegD", Components.interfaces.nsIFile);
    
                        ini.append("profiles.ini");
                        var ini = readFile(ini);
                        var profiles = ini.match(/Name=.+/g);
                        var profilesD = ini.match(/Path=.+/g);
                        for ( var i = 0; i < profiles.length;i++) {
                        if ((profilesD[i]+"$").indexOf(PrefD.leafName+"$") >= 0) {
                            profiles[i].match(/Name=(.+)$/);
                            return RegExp.$1;
                            }
                        }
                        return null;
                    }
                                    
                };
    
                if (!path) {
                    let nsIFilePicker = Ci.nsIFilePicker;
                    let fp = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
                    fp.init(window, 'Sicherungspfad wählen', nsIFilePicker.modeGetFolder);
                    fp.open( async aResult => {
                        let promise = new Promise(function(resolve) {
                                if(aResult == nsIFilePicker.returnOK) {
                                path = fp.file.path;
                                resolve(path);
                            }
                            else {
                                console.log("PATH-ERROR: " + path);
                                return;
                            }
                        })
                        await promise;
                        backup(path);
                    });
                }
                else {
                   backup(path);
                }
    
            },
            
        });
        
        var cssStr = '@-moz-document url("chrome://browser/content/browser.xhtml"){'
             + '#Backup-button .toolbarbutton-icon {'
             + 'list-style-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1%2B%2FAAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNC8xMS8wOGGVBZQAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzQGstOgAAABxklEQVQ4ja2UMUgbURjHfxeSFBzuBEuCkkAgIA5JDdzWohVnQe3UpRDE2UXpKKXdWro4ixlcdNJAydxiyHZkCIKIOEnLpZQSRFFz%2Bjqk73nvuDtb2j883nv%2F73u%2F%2B%2B69ewf%2FWUZgbgEFYDgiPw18B86An8DtQw%2BYdF1XRLVGoyGEEKJara4Bj0MKIhGYDxuGQVSTqtVqH0ql0uzvNzLigCQSicjmeZ7K63Q6u5VKZRoYigXGVWhZlpbbbrfrwKjfS4ZVGKVCoUCz2aTX65FOp6WdA04igf69CsqyLMrlctAWsRXGAf9EavXyFELEZT4A2TwYsLQKF%2BYXAJhb3VPep4%2BLzK3uqd7vS9Xr%2B2qsAW9u4eyoxcZSFoCVLZfTwxaA6v2xjaUsuYmnWrU60IOr%2FmD8etvl%2Fausikl%2FZcsFULEbD02hwPUdl7cvs1qiBAb9eOCdwdjEM2AABdh88wJA%2BbK%2FX6MDtVPmHyRPOfjRPfc87%2FPfgJLJ5AzwRc0BbNseB8a63e6TuKsXpnw%2BP5nJZAzgq%2BM4x3IPzwFM07woFovv%2Bv3%2BUDTiXqlU6tI0zQs%2FI%2FSe2bYt%2FyCPgJFA%2BAdwDeA4zrfg2l%2BwUqCoC1F3YQAAAABJRU5ErkJggg%3D%3D)'
             + '}}';
        var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
        var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
        sss.loadAndRegisterSheet(ios.newURI("data:text/css;base64," + btoa(cssStr), null, null), sss.USER_SHEET);
    
    })();
    Alles anzeigen
  • Aufruf des Profilordners klappt nicht mehr

    • BarbaraZ-
    • 18. September 2025 um 10:35

    Wie immer:

    perfekt und Danke

  • Aufruf des Profilordners klappt nicht mehr

    • BarbaraZ-
    • 18. September 2025 um 10:25

    Hier gibt es Schwierigkeiten, es erfolgt kein Aufruf.

    JavaScript
    // Profilordner öffnen
    (function() {
      if (location != 'chrome://browser/content/browser.xhtml') return;
       try {
                CustomizableUI.createWidget({
                id: 'Profilordner',
                type: 'custom',
                defaultArea: CustomizableUI.AREAS,
                onBuild: function(aDocument) {         
                   var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                   var props = {
                      id: 'Profilordner',
                      class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                      removable: true,
                      label: 'Profil Button',
                      tooltiptext: 'Profilordner',
                      style: 'list-style-image: url(data:image/gif;base64,R0lGODlhEAAQAOZMAP/////MAF06AJhlAJNgAP//AP/lAP/UAJViAP/JANShAJRhAP/OAJRgAOy5AMaSAP/nAMyZAP/IAP/NAOazAP/RAMmVALaAAH5TAJNfAM2aAP/dT//XOv/KAOPOkMeRAP/nhOSxAOu4AP3KAOrTkv/nrv//1c6bAKdyAP/TAP/bPdWsMr6LA7iCALqGALiEAJNeAMCMAP/gcv/eYdGdAP/TEP/mgv/2y//gg/3JAP/ila97AP/aKsWPAJFbAJZgALeBAMiVAPC9AP/rOum2AHlQAP/4zP//z//jPpNdAP/LANixNP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEwALAAAAAAQABAAAAefgEyCg4SFhoeFDQ0LjIiCCyU5IwEBBAiXCAOEBDohFBREIg6jQgibODQKqgonDz0fPkkwDQMEMhYRERpBMUsAv8C1Mw8uLUAXKwA2EgkJDJoEGy8swAAgCZQMz0wEKigkN8wJHZQBFZrcPDsAHErllBMT6AQ1HkYVKQf6++hMGUgAhhgYSBAChH4/TBwpwLAhw35MMAiYSLFiEUcYmQQCADs=)',
                      oncommand: "Services.dirsvc.get('ProfD', Ci.nsIFile).launch();"
                   };            
                   for (var p in props)
                      toolbaritem.setAttribute(p, props[p]);            
                   return toolbaritem;
                }      
             });
             CustomizableUI.registerToolbarNode(tb);
           } catch(e) { };
           }) ();
    Alles anzeigen

    Mit der Bitte um Prüfung. Danke

  • In memoriam

    • BarbaraZ-
    • 8. September 2025 um 12:53
    Christoph von Dohnányi ist tot: Dirigent mit 95 Jahren gestorben
    Der Grandseigneur unter den deutschen Dirigenten ist tot. Der gebürtige Berliner Christoph von Dohnányi prägte jahrzehntelang Oper und Orchester, nun ist er in…
    www.spiegel.de
  • Der Glückwunsch-Thread

    • BarbaraZ-
    • 2. September 2025 um 13:43

    Moin

    auch ich möchte nicht vergessen, die Dir besten Glückwünsche zu senden.

    Genieße den Tag und hab Spaß.

  • Der Glückwunsch-Thread

    • BarbaraZ-
    • 13. August 2025 um 11:27

    Oh, das ist schön. Dann geniesse diese. Durch die Jahresanpassung blickt ja keiner mehr durch.

    Dürfte aber, glaube ich komplett erledigt sein.

  • Der Glückwunsch-Thread

    • BarbaraZ-
    • 13. August 2025 um 11:09

    Die besten Glückwünsche zum Geburtstag an milupo auch von mir. Genieße den Tag. []P - Kaffee für Dich.

    Wieder ein Jahr näher an der Rente dran. Bald hast Du es geschafft.

  • Meldungen über Spam im Forum

    • BarbaraZ-
    • 5. August 2025 um 06:21

    Hier:

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    einmal löschen bitte.

  • Der Glückwunsch-Thread

    • BarbaraZ-
    • 29. Juli 2025 um 13:25

    Die allerbesten Glückwünsche an Road-Runner .

    Genieße den Tag. []P und Kuchen für Dich.

Unterstütze uns!

Jährlich (2025)

104,5 %

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

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