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

  • 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 :)

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

    • Boersenfeger
    • 11. April 2025 um 12:10

    Wie muss dann der Schalter sein? 1 oder 0, oder true / false?

  • Schrift im Nightly anders als im Default-Firefox

    • Boersenfeger
    • 10. April 2025 um 16:05

    Das war nicht so, ich habe aber jetzt dort einen Eintrag mit dem Wert "0" erstellt, das half... 8o

  • MozBackup wird weiterentwickelt

    • Boersenfeger
    • 10. April 2025 um 15:28

    Da hast du recht... :thumbup:

  • Sicherheitslücke in ESET Software

    • Boersenfeger
    • 10. April 2025 um 15:13

    Dann lösch es, ich kann das ja jetzt nicht mehr...

    Habe es nicht gelesen aber auch nicht danach gesucht... :sleeping:

  • Sicherheitslücke in ESET Software

    • Boersenfeger
    • 10. April 2025 um 15:05

    Nutzer sollten updaten oder besser gleich die Sache deinstallieren..
    Der Defender und vernünftiger Umgang reicht ja. ;)

    ToddyCat: Malware nutzt Sicherheitsleck in Antivirensoftware
    Statt Systeme vor Malware zu schützen, hat eine Lücke in Eset-Virenschutz zur Ausführung von Schadsoftware geführt.
    www.heise.de
  • MozBackup wird weiterentwickelt

    • Boersenfeger
    • 10. April 2025 um 14:57

    Ich bin mit meinem verwendeten Script voll zufrieden:

    Ggf. für Mitlesende

    JavaScript
    // ==UserScript==
    // @name           BackupProfile.uc.js
    // @namespace      BackupProfile.github.com
    // @description    Schaltfläche zum Sichern des Firefoxprofils
    // @charset        UTF-8
    // @author         ywzhaiqi、defpt
    // @version        v2023.07.02 FF 115.*
    // @note           Vorlage Script von ywzhaiqi (+ Mischung aus diversen Varianten aus dem Fuchsforum 1.11.21)
    // @note           Sicherungsdatei enthaelt auch Profilname
    // @note 		   FileUtils.getFile ersetzt 2.7.23
    // @reviewURL      http://bbs.kafan.cn/thread-1758785-1-1.html
    (function () {
    	    if (location.href !== 'chrome://browser/content/browser.xhtml') return;
    	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 - Ordner festlegen - Sichern funktioniert nur wenn Speicherort- bzw. Ordner vorhanden ist!!
    			var path = "G:\\Boersenfeger\\Sicherungen\\Firefox\\Firefox Sicherung\\Nightly\\";
    			// var path = "";
    			// 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';
    
    			if (!path) {
    				var nsIFilePicker = Ci.nsIFilePicker;
    				var FP = Cc['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
    				FP.init(window, 'Sicherungspfad wählen', nsIFilePicker.modeGetFolder);
    
    				if (FP.show() == nsIFilePicker.returnOK) {
    					path = FP.file.path;
    				} else {
    					return false;
    				}
    			}
    
    			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() + '.' + (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 = 'Profil Nightly ' + ' ' + d + '.zip';  /* 'd' ersetzt 'localnow' */
    
    			var xpi = fu.File(path + '\\' + archiveName);
    
    			zw.open(xpi, pr.PR_RDWR | pr.PR_CREATE_FILE | pr.PR_TRUNCATE);
    			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,'/');
    					// 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;
    			}
    		},
    	});
    
    	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

    Zeile 22 und 25 ist dann nach Gusto noch zu ändern

  • US-Regierung streicht Fördergelder für Mozilla Foundation in Millionenhöhe

    • Boersenfeger
    • 10. April 2025 um 14:46

    Irgendwer sollte die durch Insiderhandel abgeschöpften Gewinne bei Trumpvertrauten einsammeln und an Mozilla weiterleiten.

    Hintergrund

  • Schrift im Nightly anders als im Default-Firefox

    • Boersenfeger
    • 9. April 2025 um 18:09

    Hier sieht es nun in beiden wieder normal aus. Allerdings kommt der Haken immer wieder.. ich warte jetzt mal ab....

Unterstütze uns!

Jährlich (2025)

101,9 %

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

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