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

Beiträge von Boersenfeger

  • Diskussion über neues Unterforum nur für Skripte

    • Boersenfeger
    • 8. Mai 2025 um 17:35

    Ein Problem, was ich dabei sehe:

    Es gibt Scripte, die werden hier zur Diskussion gestellt, haben aber keine Bezeichnung....

    Wenn man sich hier darauf verständigt, dass zur Diskussion gestellte Scripte ungefähr so angelegt sind:

    JavaScript
    // ==UserScript==
    // @name				Change Password
    // @namespace	http://space.geocities.yahoo.co.jp/gl/alice0775
    // @description	
    // @include			chrome://passwordmgr/content/passwordManager.xhtml
    // @compatibility  14.0.*
    // @author         Alice0775
    // @version		   2019/12/19 17:00 Anpassungen .xul nach .xhtml
    // @version        2008/12/08 18:10 
    // @version        2008/12/07 18:00 
    // @version        2008/12/07 16:00 filter
    // @version        2008/12/06 19:00 Firefox 3.0, 3.1, 3.2a1pre
    // @version        2008/02/21 20:00
    // ==/UserScript==
    Alles anzeigen

    .. würde dies ein Nachverfolgen schon mal erleichtern.

    Viele sind aber ganz persönlich angepasst, wenn auch nur in Nuancen.
    Das Ziel wird ja sicher auch nicht sein, dass ein Script für alle User haarklein genau gleich aussieht...

  • "Firefox: Nutzerzahlen geben weiter nach" bei Caschys Blog

    • Boersenfeger
    • 7. Mai 2025 um 12:20

    ..dito... ebenso meide ich die sog. sozialen Medien.

    Und um mal ein Loblied zu singen: Ich nutze Firefox schon seit Phoenix-Zeiten, er bietet mir alles, was ich benötige. Ich habe ihn mir mit Erweiterungen, User-Scripten, user.uc.js-Scripten, CSS-Codes angepasst, habe die inneren Einstellmöglichkeiten genutzt und schließlich bin ich mit der Nightly-Version immer einen Schritt voraus. Dies war mir auch nur durch die Mitglieder dieses tollen Forums möglich. Dafür an dieser Stelle mal ein kräftiges

    DANKESCHÖN! :P:thumbup::!:

    Abschließend noch der Hinweis, dass, wenn der Firefox mal nicht mehr verfügbar sein sollte, ich mit Vivaldi weiter im Internet unterwegs sein werde. Aber bis dahin vergeht hoffentlich noch eine seeeehr lange Zeit. ;)

  • Nur die Anzeige der Ordner/Lesezeichenanzahl in einer anderen Farbe darstellen

    • Boersenfeger
    • 27. April 2025 um 11:12
    Zitat von Horstmann

    Ein grosser Unterschied wäre noch die Möglichkeit, separate CSS Dateien live editieren und speichern zu können in den Browser Werkzeugen, und auch sofort ein Ergebnis zu sehen.

    Geht wohl fast hiermit:

    JavaScript
    // cssLive.uc.js
    
    (function() {
    	    if (location.href !== 'chrome://browser/content/browser.xhtml') return;
    	//if (location !=AppConstants.BROWSER_CHROME_URL) {
    //		return;
    	
    
    
    	/*** OPTIONEN START *******************************************************/
    	
    	var cssLiveOptions = {
    		/* Falls sich die Testdatei in einem Unterverzeichnis von "chrome" 
    		befindet, bitte hier zwischen Anführungszeichen eintragen, ansonsten
    		nur die Anführungszeichen */
    		subdir: 'css',
    		/* Name der Testdatei */
    		file: 'Test.css'
    	};
    
    	/*** OPTIONEN ENDE ********************************************************/
    	
    	var buttonPath = '';
    	var testFile = Services.dirsvc.get('UChrm', Ci.nsIFile);
    	if( cssLiveOptions.subdir != '' ) {
    		testFile.append( cssLiveOptions.subdir );
    		buttonPath += cssLiveOptions.subdir + "/";
    	}
    	testFile.append( cssLiveOptions.file );
    	buttonPath += cssLiveOptions.file;
    	var buttonTxt_1 = buttonPath + " aufrufen";
    	var buttonTxt_2 = buttonPath + " ausführen";
    	var errorTxt = "Die Datei \n" + testFile.path + "\n existiert nicht.";
    
    	ChromeUtils.importESModule("resource:///modules/CustomizableUI.sys.mjs");
    
    	try {
    		CustomizableUI.createWidget({
    			id: "fp-get-css-file",
    			defaultArea: CustomizableUI.AREA_NAVBAR,
    			removable: true,
    			label: buttonTxt_1,
    			tooltiptext: buttonTxt_1,
    			onClick: function() {
    				if( testFile.exists() ) {
    					testFile.launch();
    				} else {
    					alert( errorTxt );
    				}
    			},
    			onCreated: function(aNode) {
    				aNode.style.listStyleImage = 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADJklEQVR4Xi3Pb0yVdRjG8e/ze57ncDrAOWwRhDQ7xYAMlAgIBW2txaio5TvMzZa68oWtzRdKbXbIpWyOzcWLWqXkFjUtsIksW72wuTVx+EJHCxhkSCNoKLYDwuH8e66eNV98dr24t/u+LwsAoKsucqg4tFS4kiTtge4PFAkRksADGdsyua4JXJ7ITH0yQw+ABTB3sHGipGNjJX8MgzGw6oEBQi5kPYinQBYEbDDAX5PEulJXPhqn2bQE2Fayfa2S8THOfu/wzTkDzmOQV8nAkOHMoIFgmS9K3w/i5DmP1fwqdrbRFIR6euqJ6btc2Y4jsGWM0emOWrU2FAtQRTSiid7n9EJtkQCVlebrUle9lnuLVA3v09/G8diLCFxp+DVprF2a2KHqsrACtqVbQy9L8T2qq4goaKOpz5uka22Kn1yn2gBHOPMSx9o3obJokbS8R/p3txTfK918Q+2tjwrQYPcWaW6Xdj5fKkB9B2uks+v1VICYSWXQjia4eWuB8z2/0//pGMMD04yP3qFzfzXBoE3sszGmR27Tubuc3KDDsf4ZsME2iO4GjuqXQh1orxDwv1OxBsX2VQlQcWGObnzdog/3bhCg0uIHNPLFVqnf/8DlA2ctDSTgxNFnOHFgE7jAg7kQcjnS8TRgQcCiprGQzncrIZ0i/u0so7lLODlgsh6QSMNCAix8BhJJNH6b5NwyFNhwLwWuB/NxEoemudi9wMT8Cq4LBrDwgLUULK/BPR9+jC4ytPUC17/8DR6CpYEplt+eJTX7OH9HbEL5NvKwjGvj4AHprC8DSZ+/zHJgI+uI+xdvbL9E+JRLJr+Sr5LXKd8foqY8QjqN7fxzlzhaAy8LGYHnQTxJ3hNhFlptCi4XsP7PEoaD4mr4KlveeZjNG4qYvDbKyipJolCXOI70U630Y6uvRfrZzyuvSKOvavK9Kp2OFqv3zagWLzb7s21aubBZ519HFjzrg8NP8utbu2hWMIyyHpYBYwyOa2Hn2cwuJAiHAthp+e087s4n6e5LjwzeodECAKiAffk5PJLOkJKFACzLZ8B27jfMYgUM7mKSuzPwMcB/6Jh/V5xUni0AAAAASUVORK5CYII=)';
    				return aNode;
    			}
    		});
    	} catch (e) {
    		Components.utils.reportError(e);
    	};
    
    
    	try {
    		CustomizableUI.createWidget({
    			id: "fp-register-css-file",
    			defaultArea: CustomizableUI.AREA_NAVBAR,
    			removable: true,
    			label: buttonTxt_2,
    			tooltiptext: buttonTxt_2,
    			onClick: function() {
    				if( testFile.exists() ) {
    					var CI = Components.interfaces;
    					var CC = Components.classes;
    					let sss = CC["@mozilla.org/content/style-sheet-service;1"].getService( CI.nsIStyleSheetService );
    					let ios = CC["@mozilla.org/network/io-service;1"].getService( CI.nsIIOService );
    					let fileURL = Services.io.getProtocolHandler( 'file' ).QueryInterface( Ci.nsIFileProtocolHandler ).getURLSpecFromFile( testFile );
    					let uri = ios.newURI( fileURL , null , null );
    					sss.loadAndRegisterSheet( uri , sss.AGENT_SHEET );
    				} else {
    					alert( errorTxt );
    				}
    			},
    			onCreated: function(aNode) {
    				aNode.style.listStyleImage = 'url(data:image/gif;base64,R0lGODlhEAAQAPcAAAQCVISChMTCtOTizNTSxERCRAQCZJSW1MzGzNTW1Ozq7CwqdKyqlMzKxERCjMTCxNzavLy6vMzKzPz67HRypCQiJJyahAQCdOTe1CQinLy65Pz2/PT23NTSzNzW3Ly6tExGnMTGxMS+xMzK1JSWpAQCXMTGvOzmzAQCbMTC1Nza1DQ2dKyqnNTOxExOfOTezLy+vMzOzPz+7Hx+rDQyNKSehAQCfCwqlPz+/NzWzMzGxAD/AOQA2C8A6iQAEgAAAACAAAAAAAAAAAAAAAACAAAAAAAAAAAAAADMAkPpACYSAAAAAKAVCC+LACQ/AAB3AADQhADq7QASEgAAAACwTkPqACYSAAAAAOgACAcAACgACgAAAACwnADqjAASPwAAd/8CBP8AAP8AAAAAAABwAADqAAASAAAAADB6QwSBAAA/OgB3AIQSXAGSAAE/UAF3ABDUcugdABITbwB3AHQAZ40AADQAcnYAAMwIYfsCABIAbQAAAPo4X5m1jDknN3cAdlQASLoA7z8AnAAB1f4sAP/pAP8SAP8AABIAB3UAAD8AAHcAAEWEAHXtAD8SAHcAAABOAAAAEABQKAAAAACwAENDACYmAAAAAAD+AEP/ACb/AAD/AHA4AGbqAD8SAHcAADQAAAAAAAAAAMAAAAQANOoBiBIAuQAAo29l/ogm/zQ0/3Z2/wA4XwDqjCQSNwAAdgBPJQAgAAA0AAB2APhcJULqACYSAAAAAAAAoAABuwAAUAAAAGVl/yYm/zQ0/3Z2/wAAAAEAAAAAAAAAAKAYZB0A6xMAEncAAADnRgAlgyQ0TAB2AAAARAAA6wAAEgAAAKRgdwPrUCQSTwAAAEgieAEm6yQ0EgB2AA/U5wBsJQBPNAAAdh7gHQB37QBPEgAAAHQA2QEB/yQA/wAAfy1c+ADq7AASEgAAAEgAAAEBACQAAAAAAABD5wAmJQA0NAB2dg4BAAAAAAAAAAAAAAAAPAAA7wAAnAAB1Ui4GAHtFCQSKAAAAFP6AQCZLQA5SAB3ACH5BAAAAAAALAAAAAAQABAABwi3AAsEGEiwYEEaARQk8MCQ4UIPCxNsEJhABIwIGE08wAhDxAMFFB/gGCkjhkgcEwh8DEkBQIkSAkzMcPlhZYAEDwjguLCCgw4cIGrgBBnAwwMRAzKggNBCgwsVIWxWzDkCBQkcNxhIeCCV6wMZBlDgKIEhqgiiUx+8OIBiAYsOXoka5dogBQoHJhDEpejxQYgTNizk8NrVK4EcH6JyPRuyb9/FXIluUEC5smXKOArQKMC5s2fPFQICADs=)';
    				return aNode;
    			}
    		});
    	} catch (e) {
    		Components.utils.reportError(e);
    	}
    
    })();
    Alles anzeigen
  • Grafik in Thunderbird-mail einfügen

    • Boersenfeger
    • 25. April 2025 um 14:57

    Die Anfrage wurde vom Nutzer dort gestellt und von mir beantwortet.

  • Nur die Anzeige der Ordner/Lesezeichenanzahl in einer anderen Farbe darstellen

    • Boersenfeger
    • 17. April 2025 um 16:31

    Nein, so wie abgebildet, stört mich aber auch nicht. :)

  • Nach Installaton von win 11 funktionieren Scripte nicht mehr

    • Boersenfeger
    • 17. April 2025 um 16:28

    Es sind ggf. Ergänzungen in einem neuen Profil und Programmordner nötig. Ob die einfach so übernommen werden?

    Thema

    Videoanleitung für userChrome.css, userContent.css, Vorbereitung Skripte

    Nur zur Info, wer es braucht kann es gerne verlinken.

    Ich habe 3 ausführliche Videos erstellt

    1. wie man eine userChrome.css erstellt und einen Beispiel Code einfügt

    https://mozhelp.ddnss.de/dateien/forum/…e-erstellen.mp4

    2. wie man eine userContent.css erstellt und einen Beispiel Code einfügt

    https://mozhelp.ddnss.de/dateien/forum/…t-erstellen.mp4

    3. Vorbereitung von Skripten ausgehend von https://github.com/Endor8/userChrome.js/

    https://mozhelp.ddnss.de/dateien/forum/…ung-skripte.mp4

    Vielleicht hilft…
    Zitronella
    5. Juni 2021 um 14:43

    Scroll mal im Beitrag nach unten zum Zitatekasten

  • Nach Installaton von win 11 funktionieren Scripte nicht mehr

    • Boersenfeger
    • 17. April 2025 um 15:46

    Die Vorarbeiten für das Funktionieren von Scripts wurden auf dem neuen System gemacht?

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

    • Boersenfeger
    • 17. April 2025 um 15:25

    Ich bin grad im TB Problemlösen unterwegs und hier nur drübergeflogen. ?(

    Vielleicht meldet sich ja Endor dazu, denn der hatte die neue Version bereitgestellt.

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

    • Boersenfeger
    • 17. April 2025 um 14:40

    Ungetestet !

    Endor hat eine neuere Version im Angebot

    CSS
    // ==UserScript==
    // @include       chrome://mozapps/content/downloads/unknownContentType.xhtml
    // @charset       UTF-8
    // @version       Fx135+
    // ==/UserScript==
    
    (function() {
    
    	const {FileUtils} = ChromeUtils.importESModule("resource://gre/modules/FileUtils.sys.mjs");
    
    	var css = `
    		hbox.dialog-button-box button.dialog-button menupopup {
    			background: #F0F0F0 !important;
    			border: 1px solid #CCCCCC !important;
    			padding: 2px !important;
    		}
    		hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic:hover {
    			background: #91C9F7 !important;
    		}
    		hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic hbox.menu-iconic-left {
    			padding: 3px !important;
    		}
    		hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic label.menu-iconic-text{
    			padding: 3px !important;
    			padding-left: 5px !important;
    			padding-right: 12px !important;
    		}`;
    	var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
    	var uri = Services.io.newURI('data:text/css,' + encodeURIComponent(css))
    	sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    
    
    	setTimeout(function() {
    		saveTo()
    	}, 200);
    
    	function saveTo() {
    		// config
    		var dirArray = [
    		['C:\\Users\\xxxx\\Documents', 'Dokumente'],
    		['C:\\Users\\xxxx\\Pictures', 'Bilder'],
    		['C:\\Users\\xxxx\\Music', 'Musik'],
    		['C:\\Users\\xxxx\\Videos', 'Videos'],		
    		['F:\\Video', 'Videos'],
    		['F:\\Adaten\\Downloads\\Firefox\\Muell', 'Verschiedenes'],
    		["" + FileUtils.getDir('UChrm', []).path + "", "chrome"],
    		//["" + FileUtils.getDir('UChrm', ['SubScript']).path + "", "SubScript"],
    		['E:\\', 'E:'],
    		['F:\\', 'F:'],
    		['G:\\', 'G:'],
    		['H:\\', 'H:'],
    		['I:\\', 'I:'],
    		['S:\\', 'S:'],
    		];
    
    		let button = document.getElementById("unknownContentType").getButton("cancel");
    		let saveTo = button.parentNode.insertBefore(document.createXULElement("button"), button);
    		var saveToMenu = saveTo.appendChild(document.createXULElement("menupopup"));
    		saveTo.classList.toggle("dialog-button");
    		saveTo.label = "Save To";
    		saveTo.type = "menu";
    		dirArray.forEach(function(dir) {
    			var [name, dir] = [dir[1], dir[0]];
    			var mi = document.createXULElement("menuitem");
    			var 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("command", function() {
    				var locationtext = document.getElementById('locationtext');
    				var file = new FileUtils.File(dir + '\\' + (locationtext ? locationtext.value : document.getElementById('location').value));
    				dialog.mLauncher.saveDestinationAvailable(file);
    				dialog.onCancel = function() {};
    				close();
    			});
    		});
    	}
    }());
    Alles anzeigen
  • Nur die Anzeige der Ordner/Lesezeichenanzahl in einer anderen Farbe darstellen

    • Boersenfeger
    • 17. April 2025 um 14:33

    Hier klappt die Version aus #334 einwandfrei mit meiner Anpassung der Hintergrund- und Textfarbe..

    Danke dafür BrokenHeart :thumbup:

  • Meinen aktuellen Firefox vom alten aufs neue Notebook transportieren

    • Boersenfeger
    • 16. April 2025 um 13:48

    Tja, dann ist doch eigentlich alles gut... :)

    Hatte ich überlesen....

  • Meinen aktuellen Firefox vom alten aufs neue Notebook transportieren

    • Boersenfeger
    • 16. April 2025 um 11:21

    Wir wollen doch mal hoffen, dass der Fragende externe Sicherungen seines Profils/alte Festplatte, regelmäßig gefertigt hat. ;)

  • Firefox öffnet immer eine Erweiterung als neuen Tab

    • Boersenfeger
    • 15. April 2025 um 14:21

    Was ist denn unter Startseite eingetragen?

    about:preferences#home

  • Suche_Automatisch_Leeren.uc.js funktioniert nicht mehr

    • Boersenfeger
    • 13. April 2025 um 15:32

    Son Goku was mich betrifft gern geschehen, bin aber auch nur Nutzer!

    Beitrag 31 hat deinen Beitrag auch nur in eine besser lesende Form gebracht. ;)

  • Suche_Automatisch_Leeren.uc.js funktioniert nicht mehr

    • Boersenfeger
    • 13. April 2025 um 14:53

    Teste mal:

    JavaScript
    	/* Suchfeld leeren nach 4 Sekunden */
    	/* Author @aborix */
    
    	setTimeout(function() {
    	    if (location.href !== 'chrome://browser/content/browser.xhtml') return;
    	if (!window.searchbar)
          return;
    	var searchbar = document.getElementById('searchbar')
    	if (!searchbar)
          return;
    	var textbox = searchbar.textbox;
    	var tId;
    	textbox.addEventListener('input', function() {
          clearTimeout(tId);
          tId = setTimeout(function() {
             textbox.value = '';
             document.getElementById('searchbar').hidePopup();
          }, 4000);
    	});
    	}, 0);
    	
    
    /* Suchfeld sofort leeren nach Start der Suche */
    /* Author @aborix */
    /* Angepasst wieder durch Sören und milupo*/
    /*https://www.camp-firefox.de/forum/thema/135558-skript-f%C3%BCr-suchfeld-leeren-nach-start-der-suche/?postID=1212807#post1212807 */
    
    //https://www.camp-firefox.de/forum/thema/136363-offenbar-funktionieren-alle-benutzerskripte-nicht-mehr-im-nightly/?postID=1227649#post1227649
    
    /* Suchfeld automatisch leeren */
    
        (function() {
        const lazy = {};
    
        ChromeUtils.defineESModuleGetters(lazy, {   
        FormHistory: "resource://gre/modules/FormHistory.sys.mjs",
        });
    
        var searchbar = document.getElementById("searchbar");
        
        searchbar.doSearch = function(aData, aWhere, aEngine, aParams, aOneOff) {
        let textBox = this._textbox;
    
          if (aData && !PrivateBrowsingUtils.isWindowPrivate(window) && lazy.FormHistory.enabled) {
            lazy.FormHistory.update({
                op: "bump",
                fieldname: textBox.getAttribute("autocompletesearchparam"),
                value: aData,
            }, {
                handleError(aError) {
                  Cu.reportError("Saving search to form history failed: " + aError.message);
                },
            });
          }
    
          let engine = aEngine || this.currentEngine;
          let submission = engine.getSubmission(aData, null, "searchbar");
          let telemetrySearchDetails = this.telemetrySearchDetails;
          this.telemetrySearchDetails = null;
          if (telemetrySearchDetails && telemetrySearchDetails.index == -1) {
            telemetrySearchDetails = null;
          }
    
          const details = {
            isOneOff: aOneOff,
            isSuggestion: (!aOneOff && telemetrySearchDetails),
            selection: telemetrySearchDetails,
          };
         // BrowserSearch.recordSearchInTelemetry(engine, "searchbar", details);
    
          let params = {
            postData: submission.postData,
          };
          if (aParams) {
            for (let key in aParams) {
              params[key] = aParams[key];
            }
          }
          openTrustedLinkIn(submission.uri.spec, "tab", params);
    
          this.value = '';
              
          this.currentEngine = this.engines ? this.engines[0] : this._engines[0];
        };
    
        }());
    Alles anzeigen
  • Skripte funktionieren nicht mehr

    • Boersenfeger
    • 13. April 2025 um 10:59

    Ja, in der Tat, ich hätte drauf hinweisen müssen und habe dies noch oben eingefügt.:)

  • Skripte funktionieren nicht mehr

    • Boersenfeger
    • 12. April 2025 um 18:44

    Damit wird hier der geänderte CSS aktiv.

  • Skripte funktionieren nicht mehr

    • Boersenfeger
    • 12. April 2025 um 17:53
    Zitat von milupo

    Bei CSS reicht ein einfacher Neustart von Firefox.

    ..oder einmal die Tastenkombi ALT + R ;)

    Edit:

    Mit folgendem Script kann man dies unter anderem erreichen:

    Code
    // ==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 116*
    // @charset        UTF-8
    // @version        0.0.4K+
    // @note           Aktualisierungen von BrokenHeart und Speravir - www.camp-firefox.de
    // @note           BrokenHearts Änderung: https://www.camp-firefox.de/forum/thema/138792/?postID=1263814#post1263814
    // @note           Fx92: getURLSpecFromFile() -> getURLSpecFromActualFile()
    // @note           AUTHOR_SHEET-Unterstützung hinzugefügt, wichtig: Dateiendung muss .author.css sein!
    // @note           Version 0.0.4.g ermöglicht "Styles importieren" per Mittelklick und Verwendung
    // @note           eines anderen Dateimanagers (siehe in Konfiguration), ergänzt um einen
    // @note           Parameter für den Dateimanager (vFMParameter in der Konfiguration) von aborix
    // @note           Frei verschiebbare Schaltfläche eingebaut von aborix
    // @note           0.0.4 Remove E4X
    // @note           CSSEntry-Klasse erstellt
    // @note           Style-Test-Funktion überarbeitet (später entfernt)
    // @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 und 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!
    CSS-Menü wird zur Menüleiste hinzugefü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.
    Die Tastenkombinationen können im Menü eingeblendet werden (bzw. in einem Fall ausgeblendet),
    dazu nach "acceltext" suchen und den Zeilenkommentar "//" entfernen bzw. einfügen.
    Verwenden des in "view_source.editor.path" angegebenen Editors.
    Dateiordner kann in Konfiguration geändert werden.
    **** Anleitung Ende ****/
    (function(){
    /* Konfiguration */
    // Position: als Menü anzeigen = 1, als frei verschiebbare-Schaltfläche = 0
    let position = 0;
    // alternativer Dateimanager, Bsp.:
    // let filemanager = "C:\\Programme\\totalcmd\\TOTALCMD.EXE";
    let filemanager = "H:\\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;
    /* Ende Konfiguration */
    ChromeUtils.importESModule("resource://gre/modules/AppConstants.sys.mjs");
    let { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
    // Wenn beim Start ein anderes Fenster angezeigt wird (das zweite Fenster), wird es beendet
    let list = Services.wm.getEnumerator("navigator:browser");
    while(list.hasMoreElements()){ if(list.getNext() != window) return; }
    if (window.UCL) {
        window.UCL.destroy();
        delete window.UCL;
    }
    window.UCL = {
        vFileManager: filemanager,
        vFMParameter: filemanagerParam,
        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 = 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(cssFolder);
            }
            if (!aFolder.exists() || !aFolder.isDirectory()) {
                aFolder.create(Ci.nsIFile.DIRECTORY_TYPE, 0664);
            }
            delete this.FOLDER;
            return this.FOLDER = aFolder;
        },
        get CHRMFOLDER() {
            let bFolder;
            try {
                // UserCSSLoader.CHRMFOLDER verwenden
                let CHRMfolderPath = this.prefs.getCharPref("CHRMFOLDER");
                bFolder = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
                bFolder.initWithPath(CHRMfolderPath);
            } catch (e) {
                bFolder = Services.dirsvc.get("UChrm", Ci.nsIFile);
            }
            if (!bFolder.exists() || !bFolder.isDirectory()) {
                bFolder.create(Ci.nsIFile.DIRECTORY_TYPE, 0664);
            }
            delete this.CHRMFOLDER;
            return this.CHRMFOLDER = bFolder;
        },
        getFocusedWindow: function() {
            let win = document.commandDispatcher.focusedWindow;
            if (!win || win == window) win = content;
            return win;
        },
        init: function() {
            const cssmenu = $C("menu", {
                id: "usercssloader-menu",
                label: "CSS",
                tooltiptext: "UserCSSLoader\n\nLinksklick: Stylesheets anzeigen\nMittelklick: Styles importieren",
                accesskey: "S",
                //acceltext: "Alt + S",
                onclick: "if (event.button == 1) UCL.rebuild()"
            });
            const menupopup = $C("menupopup", {
                id: "usercssloader-menupopup"
            });
            cssmenu.appendChild(menupopup);
            let menu = $C("menu", {
                label: "Style-Loader-Menü",
                id: "style-loader-menu",
                accesskey: "M",
                //acceltext: "Alt + M"
            });
            menupopup.appendChild(menu);
            menupopup.appendChild($C("menuseparator"));
            let mp = $C("menupopup", { id: "usercssloader-submenupopup" });
            menu.appendChild(mp);
            mp.appendChild($C("menuitem", {
                label: "Styles importieren",
                accesskey: "I",
                //acceltext: "Alt + I",
                oncommand: "UCL.rebuild();"
            }));
            mp.appendChild($C("menuseparator"));
            mp.appendChild($C("menuitem", {
                label: "CSS-Datei erstellen",
                accesskey: "E",
                //acceltext: "Alt + E",
                oncommand: "UCL.create();"
            }));
            mp.appendChild($C("menuitem", {
                label: "CSS-Ordner öffnen",
                accesskey: "O",
                //acceltext: "Alt + O",
                oncommand: "UCL.openFolder();"
            }));
            if (showChrome === 1) {
                mp.appendChild($C("menuitem", {
                    label: "Chrome-Ordner öffnen",
                    accesskey: "X",
                    acceltext: "Alt + X",
                    oncommand: "UCL.openCHRMFolder();"
                }));
            }
            mp.appendChild($C('menuseparator'));
            mp.appendChild($C("menuitem", {
                label: "userChrome.css bearbeiten",
                hidden: false,
                oncommand: "UCL.editUserCSS('userChrome.css');"
            }));
            mp.appendChild($C("menuitem", {
                label: "userContent.css bearbeiten",
                hidden: false,
                oncommand: "UCL.editUserCSS('userContent.css');"
            }));
            menu = $C("menu", {
                label: ".uc.css",
                accesskey: "U",
                //acceltext: "Alt + U",
                hidden: !UCL.USE_UC
            });
            menupopup.appendChild(menu);
            mp = $C("menupopup", { id: "usercssloader-ucmenupopup" });
            menu.appendChild(mp);
            mp.appendChild($C("menuitem", {
                label: "Importieren(.uc.js)",
                oncommand: "UCL.UCrebuild();"
            }));
            mp.appendChild($C("menuseparator", { id: "usercssloader-ucseparator" }));
            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);
            if (position === 1) {
                let refNode = $('helpMenu');
                refNode.parentNode.insertBefore(cssmenu, refNode.nextSibling);
            }
            
            $("mainKeyset").appendChild($C("key", {
                id: "usercssloader-rebuild-key",
                oncommand: "UCL.rebuild();",
                key: "R",
                modifiers: "alt",
            }));
            
            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", 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 importieren";
            }
        },
        loadCSS: function(aFile) {
            let CSS = this.readCSS[aFile.leafName];
            if (!CSS) {
                CSS = this.readCSS[aFile.leafName] = new CSSEntry(aFile);
                if (this.disabled_list.indexOf(CSS.leafName) === -1) {
                    CSS.enabled = true;
                }
            } else if (CSS.enabled) {
                CSS.enabled = true;
            }
            return CSS;
        },
        rebuildMenu: function(aLeafName) {
            let CSS = this.readCSS[aLeafName];
            let menuitem = document.getElementById("usercssloader-" + aLeafName);
            if (!CSS) {
                if (menuitem)
                    menuitem.parentNode.removeChild(menuitem);
                return;
            }
            if (!menuitem) {
                menuitem = $C("menuitem", {
                    label : aLeafName,
                    id : "usercssloader-" + aLeafName,
                    class : "usercssloader-item " + (CSS.SHEET == this.AGENT_SHEET? "AGENT_SHEET" : CSS.SHEET == this.AUTHOR_SHEET? "AUTHOR_SHEET": "USER_SHEET"),
                    type : "checkbox",
                    autocheck : "false",
                    oncommand : "UCL.toggle('"+ aLeafName +"');",
                    onclick : "UCL.itemClick(event);",
                    onmouseup : "if (event.button == 1) event.preventDefault();",
                    tooltiptext : "Linksklick: an/aus, Menü schließt\nMittelklick: an/aus, Menü bleibt offen\nRechtsklick: bearbeiten\nStrg+Linksklick: im Dateimanager anzeigen"
                    });
                document.getElementById("usercssloader-menupopup").appendChild(menuitem);
            }
            menuitem.setAttribute("checked", CSS.enabled);
        },
        toggle: function(aLeafName) {
            let CSS = this.readCSS[aLeafName];
            if (!CSS || event.ctrlKey) return;
            CSS.enabled = !CSS.enabled;
            this.rebuildMenu(aLeafName);
        },
        itemClick: function(event) {
            let label = event.currentTarget.getAttribute("label");
            if (event.button === 0) {
                if (event.ctrlKey) {
                    event.preventDefault();
                    event.stopPropagation();
                    UCL.openFolder(label);
                } else {return;}
            }
                    event.preventDefault();
                    event.stopPropagation();
            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;
        },
        openFolder:function(label){
            const PathSep = AppConstants.platform === "win" ? "\\" : "/";
            let target= this.FOLDER.path + PathSep + label;
            if (this.vFileManager.length !== 0) {
                let file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
                let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
                let args = [this.vFMParameter,target];
                file.initWithPath(this.vFileManager);
                process.init(file);
                // Verzeichnis mit anderem Dateimanager öffnen
                process.run(false, args, args.length);
            } else {
                // Verzeichnis mit Dateimanager des Systems öffnen
                this.FOLDER.launch();
            }
        },
        openCHRMFolder:function(){
            if (this.vFileManager.length !== 0) {
                let file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
                let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
                let args = [this.vFMParameter,this.CHRMFOLDER.path];
                file.initWithPath(this.vFileManager);
                process.init(file);
                // Verzeichnis mit anderem Dateimanager öffnen
                process.run(false, args, args.length);
            } else {
                // Verzeichnis mit Dateimanager des Systems öffnen
                this.CHRMFOLDER.launch();
            }
        },
        editUserCSS: function(aLeafName) {
            let file = Services.dirsvc.get("UChrm", Ci.nsIFile);
            file.appendRelativePath(aLeafName);
            this.edit(file);
        },
        edit: function(aFile) {
            let 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 {
                let UI = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
                UI.charset = window.navigator.platform.toLowerCase().indexOf("win") >= 0? "Shift_JIS": "UTF-8";
                let path = UI.ConvertFromUnicode(aFile.path);
                let app = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
                app.initWithPath(editor);
                let process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.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-ucseparator");
            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",
                    oncommand : "if (!event.ctrlKey) {this.setAttribute('checked', !(this.css.disabled = !this.css.disabled));}",
                    onmouseup : "if(event.button === 1) event.preventDefault();",
                    onclick : "UCL.UCItemClick(event);"
                });
                m.css = css;
                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(Components.interfaces.nsIFileProtocolHandler).getURLSpecFromActualFile(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: Components.classes["@mozilla.org/content/style-sheet-service;1"]
                .getService(Components.interfaces.nsIStyleSheetService),
        _enabled: false,
        get enabled() {
            return this._enabled;
        },
        set enabled(isEnable) {
            let aFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile)
            aFile.initWithPath(this.path);
            let isExists = aFile.exists(); // true, wenn die Datei existiert
            let lastModifiedTime = isExists ? aFile.lastModifiedTime : 0;
            let isForced = this.lastModifiedTime != lastModifiedTime; // true, wenn es eine Änderung in der Datei gibt
            let fileURL = Services.io.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler).getURLSpecFromActualFile(aFile);
            let 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;
        },
    };
    UCL.init();
    function $(id) { return document.getElementById(id); }
    function $A(arr) { return Array.slice(arr); }
    function $C(name, attr) {
        let el = document.createXULElement(name);
        if (attr) Object.keys(attr).forEach(function(n) {
            if(n === "oncommand") {
                el.addEventListener('command', function(event) { Function(attr[n])(); });
            }
            else if(n === "onclick") {
                el.addEventListener('click', function(event) { Function(attr[n])(); });
            }
            else if(n === "onmouseup") {
                el.addEventListener('mouseup', function(event) { Function(attr[n])(); });
            }
            else {
                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.getDay()).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() { Application.console.log(Array.slice(arguments)); }
    })();
    Alles anzeigen

    Ab Zeile 41 sind ggf. Änderungen einzufügen.

  • extras_config_menu.uc.js in Fx 139 keine Funktion mehr

    • Boersenfeger
    • 11. April 2025 um 12:18

    Ich hab schon mal die user.js vorbereitet und wollte den Schalter bereits korrekt setzen im auskommentierten String. :)

    Edit: Danke Sören Hentzschel

  • Der Glückwunsch-Thread

    • Boersenfeger
    • 11. April 2025 um 12:12

    Büssen Alles Gute zum Geburtstag und vor allem viel Gesundheit wünscht Boersenfeger :)

Unterstütze uns!

Jährlich (2025)

108,6 %

108,6% (705,72 von 650 EUR)

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