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

Beiträge von bege

  • Wie können "Partition Cookies" per Add-on gelöscht werden?

    • bege
    • 16. Juni 2024 um 18:00

    Danke, Sören Hentzschel , für die Erläuterungen.

    Es geht mir darum, Cookies automatisch selektiv zu löschen. Das gehört nicht zum Umfang des Cookie Managers von Rob W, deshalb habe ich die beiden anderen Manager getestet. Der Manager von Rob W hat mir nur gezeigt, dass das Löschen unvollständig geschieht.

    "Vergiss mein nicht" gefällt mir sehr gut, wird aber leider schon länger nicht mehr entwickelt. Ich habe gerade gesehen, dass bei "Cookie AutoDelete" schon ein Issue erstellt wurde. Aber auch das (von Mozilla empfohlen) ist schon 1 1/2 Jahre alt, und die letzte Entwicklerantwort auf github war vor einem Jahr. Gibt es einen aktuellen Cookie Manager mit Auto-Delete-Funktion? Ich habe keinen gefunden.

  • Wie können "Partition Cookies" per Add-on gelöscht werden?

    • bege
    • 16. Juni 2024 um 17:15
    Zitat von .DeJaVu

    Und eine der Erweiterung ist überflüssig

    Natürlich habe ich sie nacheinander getestet. Vergiss mein nicht benutze ich schon seit Jahren.

    Zitat von Sören Hentzschel

    Sollte wirklich das gemeint sein, ist die Versionsangabe verwirrend, denn Firefox 127 unterstützt CHIPS nicht. Die Unterstützung dafür ist vor ca. einer Woche erst in der Nightly-Version von Firefox 128 aktiviert worden und noch auf Nightly-Versionen limitiert, wird also auch noch nicht für die finale Version von Firefox 128 erwartet.

    In diesem Cookie Manager https://addons.mozilla.org/de/firefox/addon/a-cookie-manager gibt es eine Spalte "Partition". Und alle Cookies, die dort einen Eintrag haben, werden nicht gelöscht.

  • Wie können "Partition Cookies" per Add-on gelöscht werden?

    • bege
    • 16. Juni 2024 um 15:06

    Da ich die meisten Cookies löschen, bestimmte aber behalten möchte, habe ich die Add-ons "Vergiss-mein-nicht" und "Cookie AutoDelete" getestet. Die funktionieren gut, aber beide löschen nicht die sogenannten "Partition Cookies". Gibt es einen Weg, auch die loszuwerden?

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

    • bege
    • 26. Mai 2024 um 10:22
    Zitat von FuchsFan
    Zitat von bege

    also im Fx 126 nicht mehr funktionieren dürften

    Das war ab Version 127 erforderlich, damit das Script wieder funktionierte.

    Danke! Ich dachte, das betrifft schon v125 oder 126.

  • Cloudflare authentifiziert nicht bei Websites mit Firefox

    • bege
    • 26. Mai 2024 um 00:54

    Bei mir stand in about:config der Wert dom.enable_resource_timing auf "false". Diesen Eintrag auf "true" zu setzen hat das Problem hier gelöst.

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

    • bege
    • 25. Mai 2024 um 20:35

    Ich habe ein paar Skripte, in denen noch der Code ChromeUtils.import('resource://devtools/shared/loader/Loader.jsm', {}) oder auch ('resource://gre/modules/FileUtils.jsm') steht, also im Fx 126 nicht mehr funktionieren dürften. Tun sie aber. Ist dieser Code vielleicht überflüssig geworden?

    Edit: In diesem Beispiel funktioniert das Skript nur mit diesem Code. Gibt es doch noch .jsm Dateien?

    Beispiel für FileUtils.jsm (Zeile 8):

    JavaScript: saveTo.uc.js
    // ==UserScript==
    // @include       chrome://mozapps/content/downloads/unknownContentType.xhtml
    // @charset       UTF-8
    // @version       Fx104+
    // ==/UserScript==
    (function () {
      const Cu = Components.utils;
      if (!window.FileUtils) Cu.import('resource://gre/modules/FileUtils.jsm');
    
      setTimeout(function () {
        saveTo();
      }, 200);
    
      function saveTo() {
       // Config
       const dirArray = [
       ['F:\\Users\\bege\\Desktop', 'Desktop'],
       ['F:\\Downloads', 'Downloads'],
       ['F:\\Eigene Dateien\\Eigene Bilder\\Symbole', 'Symbole'],
       ['F:\\Users\\bege\\AppData\\Roaming\\Mozilla\\Firefox\\icons', 'Firefox\\Icons'],
       ['F:\\Setups\\Audio-Video', 'Setups\\Audio-Video'],
       ['F:\\Setups\\Dateiverwaltung', 'Setups\\Dateiverwaltung'],
       ['F:\\Setups\\Dateiverwaltung\\FreeCommander', 'Setups_FreeCommander'],
       ['F:\\Setups\\Editoren', 'Setups\\Editoren'],
       ['F:\\Setups\\Editoren\\Notepad++', 'Setups\\Notepad++'],
       ['F:\\Setups\\Grafik', 'Setups\\Grafik'],
       ['F:\\Setups\\Internet', 'Setups\\Internet'],
       ['F:\\Setups\\Sicherheit\\KeePass', 'Setups\\Sicherheit\\KeePass'],
       ['F:\\Setups\\Tools', 'Setups\\Tools'],
       ['F:\\Setups\\Tools\\W10', 'Setups\\Tools\\W10'],
       ['F:\\Setups\\Wartung', 'Setups\\Wartung'],
       ['F:\\Setups\\Wartung\\System u. Hardware', 'Setups\\Wartung\\System, Hardw.'],
       ['F:\\Eigene Dateien\\Eigene Bilder\\aktuelleDownloads', 'Bilder'],
       ['F:\\Eigene Dateien\\Eigene Musik\\aktuelleDownloads', 'Musik'],
       ['F:\\Eigene Dateien\\Eigene Videos\\aktuelleDownloads', 'Videos'],
       [FileUtils.getDir('UChrm', []).path, 'chrome'],
       [FileUtils.getDir('UChrm', ['CSS']).path, 'CSS'],
       [FileUtils.getDir('UChrm', ['JS']).path, 'JS'],
    /*    ['C:\\', 'C:'],
       ['E:\\', 'E:'],
       ['F:\\', 'F:'],
       ['S:\\', 'S:']
     */   ];
       const button = document.getElementById('unknownContentType').getButton('cancel');
       const saveTo = button.parentNode.insertBefore(document.createXULElement('button'), button);
       const saveToMenu = saveTo.appendChild(document.createXULElement('menupopup'));
    
       saveTo.classList.toggle('dialog-button');
       saveTo.label = 'Speichern in…';
       saveTo.type = 'menu';
    
       const css =`
          hbox.dialog-button-box button.dialog-button menupopup {
            // color: white !important;
            background: #eeeeee !important;
          }
          hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic {
             padding-left: 8px !important;
          }
          hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic:hover {
            background: red !important;
            // color: white !important;
          }
          //hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic hbox.menu-iconic-left {
          //  transform: scale(.5) !important;
    	     //max-height: 20px !important;
          //}
          hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic label.menu-iconic-text {
            padding-right: 8px !important;
            padding-left: 8px !important;
            color: black !important;
          }
          //hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic hbox.menu-accel-container {
    	     //max-height: 18px !important;
          //}
        `;
    
       const sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
       const uri = Services.io.newURI('data:text/css,' + encodeURIComponent(css));
       sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    
       dirArray.forEach(function (directory) {
         const [name, dir] = [directory[1], directory[0]];
         const mi = document.createXULElement('menuitem');
         const item = saveToMenu.appendChild(mi);
         item.setAttribute('label', (name || (dir.match(/[^\\/]+$/) || [dir])[0]));
         item.setAttribute('image', 'moz-icon:file:///' + dir + '\\');
         item.setAttribute('class', 'menuitem-iconic');
         item.addEventListener('command', function () {
           const locationtext = document.getElementById('locationtext');
           const pathFile = dir + '\\' + (locationtext ? locationtext.value : document.getElementById('location').value);
           const file = new FileUtils.File(pathFile);
           dialog.mLauncher.saveDestinationAvailable(file);
           dialog.onCancel = function () {};
           close();
        });
       });
      }
    }());
    Alles anzeigen
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • bege
    • 18. Mai 2024 um 02:39
    Zitat von BrokenHeart

    Ersetze die Zeile 56 durch folgende Zeile:

    Code
    fp.init(BrowsingContext.getFromWindow(window), 'Select a File', Ci.nsIFilePicker.modeSave);

    Volltreffer, Dankeschön!

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

    • bege
    • 18. Mai 2024 um 00:05

    milupo In dem Skript sind nur die Texte und ein paar Attribute anders, leider funktioniert es auch nicht.

    So lange ist es auch nicht her, dass das Skript noch funktionierte, spätestens letztes Jahr habe ich es noch benutzt.

    Die Fehlermeldung meckert konkret über Zeile 56. Vielleicht fällt Sören Hentzschel auf, was sich da geändert hat.

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

    • bege
    • 17. Mai 2024 um 23:07

    Dieses Skript lädt und installiert ein Skript von Github über das Fx-Kontextmenü. Ich habe es eine Weile nicht benutzt, deshalb weiß ich nicht, ab welcher Fx-Version es nicht mehr funktioniert.

    Die Fehlerkonsole zeigt diesen Fehler:

    Zitat

    22:50:54.338 Uncaught NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument arg 0 [nsIFilePicker.init]
    saveUCJS file:///C:/Users/bege/AppData/Roaming/Mozilla/Firefox/Profiles/487kit50.Quantum/chrome/JS/saveUCJS_lite.uc.js:56
    onload file:///C:/Users/bege/AppData/Roaming/Mozilla/Firefox/Profiles/487kit50.Quantum/chrome/JS/saveUCJS_lite.uc.js:49
    saveUCJS_lite.uc.js:56

    Was muss da geändert werden?

    JSON: saveUCJS_lite.uc.js
    // ==UserScript==
    // @name        saveUCJS_lite.uc.js
    // @description GitHub Scripte Downloaden und Installieren
    // @charset		UTF-8
    // @include     main
    // @note		userChrome.js Update-Funktion entfernen
    // ==/UserScript==
    (function(){
    	"use strict";
    //  config Anfang true = ja  / false = nein
    	const skipDialogCxt = false	// Speichern Dialog nicht anzeigen - übergehen
    	const urgeRestart = true	// Firefox Neustarten Aufforderung nach dem Runterladen anzeigen
    //	config Ende
    	const areaMenu = document.getElementById('contentAreaContextMenu');
    	const saveLink = document.getElementById('context-savelink');
    	const github = 'https://github.com/';
    	const sep = navigator.platform.indexOf('Win') != -1? '\\' : '/';
    	
    	
    	areaMenu.addEventListener('popupshowing', function(){
    		const _areaMenu = document.getElementById('ucjs_getUCJS_areamenu');
    		if(_areaMenu) this.removeChild(_areaMenu);
    		if(!gBrowser.currentURI.spec.startsWith(github)) return;
    		if((gBrowser.currentURI.spec + gContextMenu.linkURL).indexOf('blob') == -1) return;
    		createMenu(gContextMenu.onLink? gContextMenu.linkURL : gBrowser.currentURI.spec);
    	}, false);
    	
    	function createMenu(file){
    		const url = file.replace('/blob/', '/raw/');
    		const menu = document.createXULElement('menuitem');
    			menu.setAttribute('id', 'ucjs_getUCJS_areamenu');
    			menu.setAttribute('label',(gContextMenu.onLink? 'Link' : 'Seite') + ' als uc.js Script' + ' speichern');
    			menu.setAttribute('tooltiptext', 'als uc.js speichern');
    			menu.setAttribute('class', 'menuitem-iconic');
             menu.setAttribute('style', 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANTSURBVHgBvVeNTdtAFH7vbCilUptuYFQihUhNzQQJEzSZoGSChgkIEwATNJ0AmICM4ISKWCKoHiGtVDUCn1/v2cRx4nNIcNRPgpzvnd/fvT8jLAnLsgrGVqEOQlaR0AYECwgKIRFhpNYeITkQYFeOf195njdahi8+K7hUsgzcaCPi51jgElDKdGTweOK5rgcvUYAtNl+/PVbLFuSBoDP/j3Hiec5oaQUiqzevFdGCNYAAPEkPBzpviPmNYrlsr1M4g3kxz2KxbGtoU6zb8nnoPBF7IIzyOeH8gvp/Gf2uCJUZRNRRK2e6FXnCsuxCSgEOuJTlBO3h4KZxP+jvKGbNWBFOu5AxdeO/aO9JMBwOb/vv792bJlBwNKsXWOYbeZx4jlxv4ubPlBG+2L+7c2ILLFtpPh4XslLLKtkWjGGUjHjeMzFI8fbpYYf5mPzAea5j+GjATOp4Tsg4s8B4ruPBkjDEBnuhKdgqBPyiPQSyBjlhZgS0qqZ1jgVhjGVddyCMWDC6kBP+FjgZQaxKu6wLFQU10GvQXsWlWeBrQwqaeqqoClXjP+lIciyuYE0Yuj+mWZIACrI5Da15Arssq3bngAdpQZZYpcPlApHOoIKA/wVEraFCezdhZbbX6xkCW7M7Yg94uvPGtqzCmrBbsmtaAoInKICelkY5B5EECOWhdj9AR0TNRKtCbXevkluJ4l7la1alZdlCbhmXujh4wuluuXIMOYSrlD7LonOtCbvhh71KRy0iLQlOwukW8HTSnrkuKFedEYne0HW6sEho0bbBDKqEcJgReJEYws6922s+teNpywzrtqQjuW10zYfgOs0EL4eDXkPHdLf88UJdeB2WgE9ih0t9WAd4oQSfh+yVPmjgN+77fiAaqUZC8jyTa0DZtCQLJWvSZ+JCJF+JdkIYj2ctPiRJHPALPF4p5VphXc/AIlpCuCf/ivbkeW4otdXMFsRzIfq+mohuHVgBKnNooXBlULLLpr4LeCwPyLyIA1B94QhCJyDxS2Dw7m7QP3+JAmEgo2goe2YMyvgwmfVEEsNBH1dVQGf5BNpmxAd5EuaUhJzg+FF3vp813CzshkO33+Z0UUy+w7LgohaO5tjhd5UhrbXMFtwdeXx/9py6vlU66T98qp4a9HCubgAAAABJRU5ErkJggg==)');
    			menu.addEventListener('command', function(){getFile(url)}, false);
    		areaMenu.insertBefore(menu, saveLink? saveLink : areaMenu.firstChild);
    	}
    
    	function getFile(url){
    		const title = url.split(/\//)[url.split(/\//).length -1]
    		const date = new Date();
    		const stamp = '?' + date.getTime();
    		const xhr = new XMLHttpRequest();
    			xhr.responseType = '';
    			xhr.open('GET', url + stamp);
    			xhr.send();
    			xhr.onload  = function(){
    				saveUCJS(xhr.responseText, title)
    			}
    	}
    
    	function saveUCJS(string, title){
    	  if(!skipDialogCxt){
        	const fp =Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
        		fp.init(window, 'Select a File', Ci.nsIFilePicker.modeSave);
        		fp.appendFilter('userChrome.js', '*.uc.js');
        		fp.displayDirectory = Services.dirsvc.get('UChrm', Ci.nsIFile);
        		fp.defaultExtension = 'uc.js';
        		fp.defaultString = (title == 'userChrome.js.uc.js')? 'userChrome.js' : title;
        	const result = fp.open(_saveUCJS);
        	function _saveUCJS(result){
        		if (result == Ci.nsIFilePicker.returnOK || result == Ci.nsIFilePicker.returnReplace){
            		writeFile(fp.file, string)
            	}
    		}
    	  }else{
          	const aFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
          	const dir = Services.dirsvc.get('UChrm', Ci.nsIFile).path;
            const path = dir + sep +((title == 'userChrome.js.uc.js')? 'userChrome.js' : title);
    		aFile.initWithPath(path);
          	writeFile(aFile, string);
    	  }
      	}
      	
      	function writeFile(file, string){
            const charset = 'UTF-8';
            const fileStream = Cc['@mozilla.org/network/file-output-stream;1']
            					.createInstance(Ci.nsIFileOutputStream);
            fileStream.init(file, 0x02 | 0x08 | 0x20, -1, 0);
            const converterStream = Cc['@mozilla.org/intl/converter-output-stream;1']
            					.createInstance(Ci.nsIConverterOutputStream);
            converterStream.init(
            	fileStream, 
            	charset, 
            	string.length,
            	Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER
            );
            converterStream.writeString(string);
            converterStream.close();
            fileStream.close();
            setTimeout(function(){
             	if(urgeRestart && window.confirm('Downladen abgeschlossen. Möchten Sie Firefox sofort neu starten?')) Services.appinfo.invalidateCachesOnRestart() || Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);
            },100);
    	}
    })()
    Alles anzeigen
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • bege
    • 17. Mai 2024 um 22:19
    Zitat von milupo

    Zur Information: Es gibt keine JSM-Module mehr (.jsm), nur noch ESM-Module (.sys.mjs). Letztere werden eben mit ChromeUtils.importESModule geladen.

    Danke für die Info.


    Zitat von milupo

    Du hast unterschiedliche Werte für id in den Zeilen 10 und 16. Bei mir sind die IDs identisch. Ich habe das Problem nicht. Es würde mich dann aber wundern, wenn das Problem vor Fx 126 nicht auftrat. Die Zeile mit removable: habe ich nicht.

    Das wars, danke! Die Zeile mit removable scheint nichts zu bewirken.

    Ich hatte den Button bisher nicht in Verwendung, nur die anderen Teile des Skripts. Deshalb ist es mir bisher nicht aufgefallen.

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

    • bege
    • 17. Mai 2024 um 20:55

    Der verschiebbare Neustart-Button im Skript RestartFirefox_plus.uc.js verschwindet bei mir im Fx 126.0 nach einem Neustart wieder von der Navigationsleiste zurück in die Sammlung der Buttons.

    In anderen Skripten, wo das nicht passiert, fehlt mal die Zeile removable: false,, mal heißt sie removable: true,.

    Aber beide Varianten ändern in diesem Skript nichts am Verschwinden des Buttons. Woran liegt das?

    JavaScript: RestartFirefox_plus.uc.js
        //      RestartFirefox_plus.uc.js   2
    
        (function() {
    
           if (location != 'chrome://browser/content/browser.xhtml') return;
           
    		 /* Movable Button */
           try {
              CustomizableUI.createWidget({
                 id: 'restart-button',
                 type: 'custom',
                 defaultArea: CustomizableUI.AREA_NAVBAR,
                 onBuild: function(aDocument) {         
                    var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                    var props = {
                       id: 'restartfirefox-button',
                       class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                       removable: false,
                       label: 'Neustart',
                       tooltiptext: 'Neustart (mit Rechts- und Mittelklick wird userChrome.js-Cache geleert)',
                       style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAEZ0FNQQAAsY58%2B1GTAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAN8SURBVHjaVJFNTBxlAIafb2Z29gd2l4VdYCkokAUt1AJplQRTrVqjUWMPPWHSCzb21IOn9qIHY2xMahoTTb00NmkUm5qAjdpUI61VaCxCpCVYixt%2ByvKzCwu7LDs7zMw3HmhM%2Bt6fJ0%2FyCp69wiOzZBCPcqSmIXg0HPHuC4R8nkLWyOXyYiIzfuVHzMIA%2BZsLtH18EApntUdhpzUSD5577nDLi%2FGWKjx%2BHVfR8HpFwNwsxTMzza%2BOXJ1%2B58Ev2sVEV%2ByEawXqxf8FllNWEQ9ePXzsqQOecIDU8jampSAVD76Al2BIIx4Dv2Nz7%2FYq%2B5%2BP8sNXE6WdAhdQlOM9rzUdaGiN8M9UjnKvQjzuA0UjV3AxDIcHywqRoEbXoVrKgyBtKXYEUvprmiN9oaoyvr9wl62NHJbtJeDzOo17YmprVzWOppLO2RRNwf1FSOzSUAXsCIR4QdP13UPfjhUde2mjuBXUjcXNEabOnJmq7Y4Nd7z1fu%2BJ%2FR2Jpgrm0jauAI8GlnSlBi4I0bO6sLBWHc9esxRdmjOZf5n%2B5CLWzCzOvsbKupBZ1xgmElUoC%2BgoKtRGQfNomoaND8P8XS%2Bby1olO7O6GHTl1DejGDOrNB%2BvpO7I%2Ba31%2FDP9Z28YUmqoqhCKcG2EYD6ZMUTojZ8WHmsqD%2BI6wnWFajugCkuuZaV%2FZS47wp99R7E3LbxPV6rtr7dV1pmyuBWs3hr7dZ380LC2tzseffvUHm86C1JC2A%2FrGcn509cn%2BPvTk9ibc1R06qL91Ms1CadF000ll9rVS2VykLzVr0lHOgtpuJ9yUFyXxqhKZjbH2nJRI9IZwyw2kXjvXV%2FIOWgaBcc2a%2BtjdVXR1J3iBDx8QUpQUJAuJJclseogxz441H5vrPO72cm0VSyVPJq27ZaHm8ST3Y0M9d9Kkr19A1A1x4VIObTGBfNrsJ5XmE9b6KqgvrOGhr1Vns2sgeNIkXiigvHf1liZuHWZYjINSEXRVLewZjN6bYmYbvN4rcDvVzFKLnOpErMLBpvbklClznyyyPDA6DjTX3wJWICr%2Bnb3ffjXSGpl5Nxnn88uh2ORUCBaHfVQU%2BsjVuGhKqJT5lFYShr8fGH4j42bH53EnJ4EtgEEPQOTzHx9mqXLl9AT9TS82RvreOmVcMTXVh4JhIr5kp3LFu6u3Lk%2ByMylQazU3ENYAvw3AFUTimFqj5i7AAAAAElFTkSuQmCC)',
                       onclick: 'if (event.button == 0) { \
                                      Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
                                  }; \
                                  if (event.button == 1 || event.button == 2) { \
                                      Services.appinfo.invalidateCachesOnRestart(); \
                                      Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
                                  };'
                    };            
                    for (var p in props)
                       toolbaritem.setAttribute(p, props[p]);            
                    return toolbaritem;
                 }      
              });
    		  CustomizableUI.registerToolbarNode(tb);
           } catch(e) { };   
    	         
    		/* File Menu */
           var menuitem = document.createXULElement('menuitem');   
           var props = {
              id: 'restartfirefox-fileMenu',
    			 class: 'menuitem-iconic',
              label: 'Neustart',
              tooltiptext: 'Neustart (mit Rechts- und Mittelklick wird userChrome.js-Cache geleert)',
              style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAEZ0FNQQAAsY58%2B1GTAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAN8SURBVHjaVJFNTBxlAIafb2Z29gd2l4VdYCkokAUt1AJplQRTrVqjUWMPPWHSCzb21IOn9qIHY2xMahoTTb00NmkUm5qAjdpUI61VaCxCpCVYixt%2ByvKzCwu7LDs7zMw3HmhM%2Bt6fJ0%2FyCp69wiOzZBCPcqSmIXg0HPHuC4R8nkLWyOXyYiIzfuVHzMIA%2BZsLtH18EApntUdhpzUSD5577nDLi%2FGWKjx%2BHVfR8HpFwNwsxTMzza%2BOXJ1%2B58Ev2sVEV%2ByEawXqxf8FllNWEQ9ePXzsqQOecIDU8jampSAVD76Al2BIIx4Dv2Nz7%2FYq%2B5%2BP8sNXE6WdAhdQlOM9rzUdaGiN8M9UjnKvQjzuA0UjV3AxDIcHywqRoEbXoVrKgyBtKXYEUvprmiN9oaoyvr9wl62NHJbtJeDzOo17YmprVzWOppLO2RRNwf1FSOzSUAXsCIR4QdP13UPfjhUde2mjuBXUjcXNEabOnJmq7Y4Nd7z1fu%2BJ%2FR2Jpgrm0jauAI8GlnSlBi4I0bO6sLBWHc9esxRdmjOZf5n%2B5CLWzCzOvsbKupBZ1xgmElUoC%2BgoKtRGQfNomoaND8P8XS%2Bby1olO7O6GHTl1DejGDOrNB%2BvpO7I%2Ba31%2FDP9Z28YUmqoqhCKcG2EYD6ZMUTojZ8WHmsqD%2BI6wnWFajugCkuuZaV%2FZS47wp99R7E3LbxPV6rtr7dV1pmyuBWs3hr7dZ380LC2tzseffvUHm86C1JC2A%2FrGcn509cn%2BPvTk9ibc1R06qL91Ms1CadF000ll9rVS2VykLzVr0lHOgtpuJ9yUFyXxqhKZjbH2nJRI9IZwyw2kXjvXV%2FIOWgaBcc2a%2BtjdVXR1J3iBDx8QUpQUJAuJJclseogxz441H5vrPO72cm0VSyVPJq27ZaHm8ST3Y0M9d9Kkr19A1A1x4VIObTGBfNrsJ5XmE9b6KqgvrOGhr1Vns2sgeNIkXiigvHf1liZuHWZYjINSEXRVLewZjN6bYmYbvN4rcDvVzFKLnOpErMLBpvbklClznyyyPDA6DjTX3wJWICr%2Bnb3ffjXSGpl5Nxnn88uh2ORUCBaHfVQU%2BsjVuGhKqJT5lFYShr8fGH4j42bH53EnJ4EtgEEPQOTzHx9mqXLl9AT9TS82RvreOmVcMTXVh4JhIr5kp3LFu6u3Lk%2ByMylQazU3ENYAvw3AFUTimFqj5i7AAAAAElFTkSuQmCC)',
              onclick: 'if (event.button == 0) { \
                                      Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
                                  }; \
                                  if (event.button == 1 || event.button == 2) { \
                                      Services.appinfo.invalidateCachesOnRestart(); \
                                      Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
                                  };'
           };            
           for (var p in props)
              menuitem.setAttribute(p, props[p]);      
           document.getElementById('menu_FilePopup').insertBefore(menuitem, document.getElementById('menu_FileQuitItem'));
    
    		/* App (Hamburger) Menu */
    // (function() {
            var menuitem = document.createXULElement('toolbarbutton');
            menuitem.id = 'restartfirefox-appMenu';
            menuitem.classList.add('subviewbutton', 'subviewbutton-iconic');
            menuitem.setAttribute('label' , 'Neustart');
            menuitem.setAttribute('tooltiptext' , 'Neustart (mit Rechts- und Mittelklick wird userChrome.js-Cache geleert)');
            menuitem.style.listStyleImage= 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAEZ0FNQQAAsY58%2B1GTAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAN8SURBVHjaVJFNTBxlAIafb2Z29gd2l4VdYCkokAUt1AJplQRTrVqjUWMPPWHSCzb21IOn9qIHY2xMahoTTb00NmkUm5qAjdpUI61VaCxCpCVYixt%2ByvKzCwu7LDs7zMw3HmhM%2Bt6fJ0%2FyCp69wiOzZBCPcqSmIXg0HPHuC4R8nkLWyOXyYiIzfuVHzMIA%2BZsLtH18EApntUdhpzUSD5577nDLi%2FGWKjx%2BHVfR8HpFwNwsxTMzza%2BOXJ1%2B58Ev2sVEV%2ByEawXqxf8FllNWEQ9ePXzsqQOecIDU8jampSAVD76Al2BIIx4Dv2Nz7%2FYq%2B5%2BP8sNXE6WdAhdQlOM9rzUdaGiN8M9UjnKvQjzuA0UjV3AxDIcHywqRoEbXoVrKgyBtKXYEUvprmiN9oaoyvr9wl62NHJbtJeDzOo17YmprVzWOppLO2RRNwf1FSOzSUAXsCIR4QdP13UPfjhUde2mjuBXUjcXNEabOnJmq7Y4Nd7z1fu%2BJ%2FR2Jpgrm0jauAI8GlnSlBi4I0bO6sLBWHc9esxRdmjOZf5n%2B5CLWzCzOvsbKupBZ1xgmElUoC%2BgoKtRGQfNomoaND8P8XS%2Bby1olO7O6GHTl1DejGDOrNB%2BvpO7I%2Ba31%2FDP9Z28YUmqoqhCKcG2EYD6ZMUTojZ8WHmsqD%2BI6wnWFajugCkuuZaV%2FZS47wp99R7E3LbxPV6rtr7dV1pmyuBWs3hr7dZ380LC2tzseffvUHm86C1JC2A%2FrGcn509cn%2BPvTk9ibc1R06qL91Ms1CadF000ll9rVS2VykLzVr0lHOgtpuJ9yUFyXxqhKZjbH2nJRI9IZwyw2kXjvXV%2FIOWgaBcc2a%2BtjdVXR1J3iBDx8QUpQUJAuJJclseogxz441H5vrPO72cm0VSyVPJq27ZaHm8ST3Y0M9d9Kkr19A1A1x4VIObTGBfNrsJ5XmE9b6KqgvrOGhr1Vns2sgeNIkXiigvHf1liZuHWZYjINSEXRVLewZjN6bYmYbvN4rcDvVzFKLnOpErMLBpvbklClznyyyPDA6DjTX3wJWICr%2Bnb3ffjXSGpl5Nxnn88uh2ORUCBaHfVQU%2BsjVuGhKqJT5lFYShr8fGH4j42bH53EnJ4EtgEEPQOTzHx9mqXLl9AT9TS82RvreOmVcMTXVh4JhIr5kp3LFu6u3Lk%2ByMylQazU3ENYAvw3AFUTimFqj5i7AAAAAElFTkSuQmCC)',
            menuitem.setAttribute('onclick', 'if (event.button == 0) { \
                                              Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
                                          }; \
                                          if (event.button == 1 || event.button == 2) { \
                                              Services.appinfo.invalidateCachesOnRestart(); \
                                              Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
                                          };');
            var refItem = document.getElementById('appMenu-viewCache').content.getElementById('appMenu-quit-button2');
            refItem.parentNode.insertBefore(menuitem, refItem);
    // })();
    
        })();
    Alles anzeigen

    Zitat von Endor

    bege Schau Dir mal Zeile 38 an.
    Da fehlt meiner Meinung nach etwas.
    Müsste glaube ich so sein:
    var { BrowserConsoleManager } = require('resource://devtools/client/webconsole/browser-console-manager.js');

    Mfg.
    Endor

    Das funktioniert komischerweise mit und ohne ".js". Seltsam. Aber es funktioniert.

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

    • bege
    • 17. Mai 2024 um 20:39

    Mit Fx 126.0 funktionierte bei mir das Skript browsertoolbox.uc.js nicht mehr richtig. Das Skript stammt von Endor , es erstellt einen Button zum Öffnen der Browser-Werkzeuge. Es wurde von von aborix und mir um die Funktionen Neustart und Fehlerkonsole ergänzt.

    Was nicht mehr funktionierte, war das Öffnen der Browser-Werkzeuge. In einem Skript von aminomancer, wo das funktioniert, habe ich gesehen, dass Loader.jsm und Launcher.jsm dort Loader.sys.mjs und Launcher.sys.mjs heißen und ChromeUtils.import wird zu ChromeUtils.importESModule. Jetzt funktioniert auch diese Funktion wieder.

    JavaScript: browsertoolbox.uc.js
    // browsertoolbox.uc.js
    // Ursprünglich von Endor, ergänzt von aborix und bege (alle camp-firefox.de Forum)
    
    (function() {
    
        if (location != 'chrome://browser/content/browser.xhtml')
            return;
         
         /* Movable Button */
        try {
            CustomizableUI.createWidget({
                id: 'browser-toolbox-button',
                type: 'custom',
                defaultArea: CustomizableUI.AREA_NAVBAR,
                onBuild: function(aDocument) {
                    var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                    var props = {
                        id: 'browser-toolbox-button',
                        class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                        label: 'Browser-Werkzeuge',
                        tooltiptext: 'Linksklick: Browser-Werkzeuge\nStrg+Linksklick: Fehlerkonsole\nMittelklick: Neustart (Cache leeren)',
                        style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAdUlEQVQokZVSwRHAIAgLPYfoXs7RCTpG53Avt7APrhaFU8gLMEEJAkEQgFbc7IxkVjt0r6Sp7VIVITumBpKt00FA2ThmjXzkfMMWO8EZFSj8LrUyjsG9b9DaJXq+qAIVxEUxtLHpaXE95dj1NcK2rmbwaGJ4Af0tIg00j/6iAAAAAElFTkSuQmCC)',
                        // oncommand: '(' + onCommand.toString() + ')()',
                        onclick: '(' + onClick.toString() + ')()'
                    };
                    for (var p in props)
                        toolbaritem.setAttribute(p, props[p]);
                    return toolbaritem;
                }
            });
            CustomizableUI.registerToolbarNode(tb);
        } catch(e) { };
    
        function onClick() {
            if (event.button == 0) {
            if (event.ctrlKey) {
              var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});
              var { BrowserConsoleManager } = require('resource://devtools/client/webconsole/browser-console-manager');
              BrowserConsoleManager.openBrowserConsoleOrFocus();
              event.preventDefault();
              event.stopPropagation();
            } else {
                var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});
                var { BrowserToolboxLauncher } = require('resource://devtools/client/framework/browser-toolbox/Launcher.sys.mjs');
                BrowserToolboxLauncher.init();
            }
            } else if (event.button == 1) {
              Services.appinfo.invalidateCachesOnRestart();
              Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);
            };
        };
    })();
    Alles anzeigen
  • FF126: AnimationToggleButton.uc.js tuts nich mehr

    • bege
    • 15. Mai 2024 um 23:26
    Zitat von Mitleser

    Vieleicht wars das schon?

    Super, vielen Dank. Ich vermute, dass in deinem Beitrag etwas mit den Zeilen 75 und 78 durcheinandergekommen ist. Damit auch ausschalten funktioniert muss Zeile 78 heißen setPref('none');

    Jetzt klappt alles!


    JavaScript
    // 	28_AnimationToggleButton.uc.js
    // 	v. 0.4.2
    //	211104:	BrokenHeart zuletzt in:
    //	https://www.camp-firefox.de/forum/thema/133649
    
    (function() {
    
       if (location != 'chrome://browser/content/browser.xhtml')
          return;
    
       try {
    
          CustomizableUI.createWidget({
    
             id: 'animation-button',
             type: 'custom',
             defaultArea: CustomizableUI.AREA_NAVBAR,
    
             onBuild: function(aDocument) {
    
                var button = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                var attributes = {
                   id: 'animation-button',
                   class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                   removable: 'true',
                   label: 'Animation',
                   tooltiptext: 'Klick li: Gif ∞\nKlick mi: Gif 1x \nKlick re: Gif aus',
                   oncontextmenu: 'return false'
                };
                for (var a in attributes)
                   button.setAttribute(a, attributes[a]);
                var animmode = Services.prefs.getCharPref('image.animation_mode');
                button.setAttribute('anim', animmode);
                button.IsOnce = (animmode == 'once');
    
                function onClick() {
    
                   var button = document.getElementById('animation-button');
                   function setPref(value) {
                      Services.prefs.setCharPref('image.animation_mode', value);
                   };
                   function getPref() {
                      return Services.prefs.getCharPref('image.animation_mode');
                   };
                   function setIsOnce(value) {
                      var windows = Services.wm.getEnumerator('navigator:browser');
                      while (windows.hasMoreElements()) {
                         windows.getNext().document.getElementById('animation-button').IsOnce = value;
                      };
                   };
    
                   switch (event.button) {
    
                      case 0:
                         var animmode = getPref();
                         setPref('normal');
                         if (button.IsOnce) {
                            BrowserCommands.reloadSkipCache();
                            setIsOnce(false);
                         } else {
                            if (animmode == 'normal')
                               BrowserCommands.reloadSkipCache();
                            else
                               BrowserCommands.reload();
                         };
                         break;
    
                      case 1:
                         setPref('once');
                         BrowserCommands.reloadSkipCache();
                         setIsOnce(true);
                         break;
    
                      case 2:
                         setPref('none');
                         event.preventDefault();
                         event.stopPropagation();    
                         BrowserCommands.reload();
                         break;
                   };
    
                   var windows = Services.wm.getEnumerator('navigator:browser');
                   while (windows.hasMoreElements()) {
                      windows.getNext().document.getElementById('animation-button').setAttribute('anim', getPref());
                   };
                };
    
                button.setAttribute('onclick', '(' + onClick.toString() + ')();');
                return button;
             }
          });
    
       } catch(e) { };
    
       var css =
          '#animation-button[anim="normal"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAoCAYAAAC4h3lxAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH4wkNFRE2JfCuMgAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAS6SURBVFjD7ZnNTxtHFMDfm7ENtbGxoV7b2A4gATZ2VEybCyAB5d4qUntLBZcI5dQ/oKcee4l6qBRFgTYqaUqjSFS5tVUrIEJCjQqYDxmIAwUMCV+GxMYfLDs7PQQQjhcKxY03Up60WntmZ/b93pdmdhAAoK2tTQCA9yRJsgEAgoqEUvoCEWc7Ojoet7e3Z/Vjc3Ozh1J6GRE5qFdQluXxgYGBXzjPVFODiB8dKM8Z13JQFwchRAIEjojvNzU1TQHAcgYApZQAAGxXbFeEykKdnHOqJgB30v1H+Xj5b4go6XQ6dxbAwY+UMVWyq92laoudOI9XHg2lzs5OGg6HWX9//0sPwRsmc3Nz1xHxbltbW22GB5REz/TbzhfOP43bxiWOnMRKYhXLpuWGXbJryGdhQkQPANxsaWm5ciyARbRs+Cf8t3QJXeywLWIJWy3WyUnf5NWEJmHME8D2/t2AiJ8dG0LV4ep7R5U/9Mq2frU6Uv1zvsxvsVi+OkwIRJsigDVtjRRtFkWOm6RkoWTasGeI/0cdzlWnrVarCADssMwqPaRj2ZbPLM7ACliBdNaXl+2UhS+FL32t4Zp4rjyiCCBS0XSipWSgIhU1Z1I+WTbtGfPcNj01rdXP1d/IFYQiwGbhpjNpSTqPG/T8wvOaHe3OqZPYkXTM1vxV8yPKyAAAjCvGrcBcoCsXEEQ5SDkJe8KfSoVS0at9aWP63XB5+PKplU845r0j3h7CiXi03bRiWgvMB7oop4nzABwbBtGCqDP4QfCaa8v1sChaFOGE03hp/MKSZenDJE2aTjO5PWV/7B3zfo8yKuaLadm0Vo/1N4OVwWsSSoacAgAAxDQxa0gIfQLC2Se2p+xPvCPeH5DhicluipjW66CuO1gZvMqQGXISQucVW9K26B313iaM7J7m+eJI8dPAQqCLcpp8HQAn1nFb2vakdqy2m0jkTGW2eKn4WWAxcIsCTf1vAAgoX1y92ONOuEeV+oW0MO8d8d4hUmbCnhpisfhZ3d9131Kg6ZwDIKDsX/X3CLNCqGqk6r57xz2RoXxKWPKN+r6j0ulfriTmJXOkJlrzIKcACCj71/x3hFlhBgAAOcpVo1W9roRrEgBA2BWe1I7VdpE9speT5SajYk6q0IHyvjVfrzAjhDLaOcrVI9W9er8+4ph1PKJ7VIQ8yL8ByL51X69txjahCMeRuaZcg3ndM59Ubfwb/l7btG1SzTu0Yz3g2/Dds4WULa+qrxaK65eUY8oesgffhD2yIgDhhJ9346GGHIC3APlK4rQm/c5mzaYzbx+zDHH7uQCiumhV1BH9/G0IvaYQIgAgG7eMa85C54Taqo95xzx75G/WEl3DGItRSouMK8YVz4rnrlotzTlHURQXsks+5/dlWWZqDhPOOTLGfh8aGlrP8sDg4OBGY2PjjYKCglqNRmPknBOVKb+TTqcXh4eH15UXlK8c2TQ0NLj0ev2XL8fySDwe75YkSTV5YTabKwkh3wAAl2X5YRYAIkJra+uvhJDSfQuo6tBj/zhMBgBgjF0nCi4DrVb7BQCI+wOYmq4D5QHgkVar/SnLAwdeaG5udlNKPwaASs65ao5eCSExSZLGS0tLH/T19fF/AGeo9vFEBn4KAAAAAElFTkSuQmCC)} ' +
          '#animation-button[anim="once"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAoCAYAAAC4h3lxAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH4wkNFQw22pzCLgAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAATOSURBVFjD7VlvTFtVFD/3vtcWWlpAUkrbDazQkWkilfhl+zAahARNZjIT9QMzkS8EPm+wADMxWdRhsk842cYgbsbExWRqBkMGCwrbPpBsisi/V9rCZsBoHGwPKO277x0/sJqxviKVah/Gk7y89+7Nve/8zvmdc++5jwAAVFRUFCPia4wxGyIS0JDwPC9SSr8tLS0daG1tjeknXq/XSyn9EAAoaFcIIn4RDAZPBoPBjQAB4J2o8owhRdSW5jxPkBBAAHjT5XL1AMDYhn5KaSYAwMGDa7o3XheeB9AWgqkpx/x771sXCCEyIr4YAyD6UPhM2GQyMc1xx+FYsQBYF6JUqq2t5Xw+nzw4OAigcd6rit/vP0UI+ay8vHzvBg+oyeqqMXT7tm1+YiJNIgRYScmq2eP5xWkwhPkUYuAIIcUAcKasrKw6riL375sjJ064/HN3+XC07Zu+9LCnxBw6csRfZDKFUgVi8dHdRAg5HJdC5zryA48rH5UfRvUrly4VBFJl/uzs7JN/5lZCbKoA5heeEkdGDCvxJvnyK+OyKKb/zYgn20pzVqs1AgBy9F0VwFqI3/QjOh0ooRCf8Io9Pu4Ya2t77nvG9OGkrRNqjQYD21Q5SQKalsYSsuTkpHO05bgtQilQjtszUVsrPMvzEcN2AVD13LuY4fFETPEGvfJyyGixbD2Ip6acPzY15zJK1783cF2vdHS4p5PhCVUAhCCpq7tXYMuV9U/2FRUyQ3X13YIEVtKJ5hZbhNKNTu0fMEidne5pxvSRpFMIACDX+iC9tTVQeOuW7eexnwwSAaJ4PCH9/v0Lu4zG1fStTC4IzvGmZluIEFClZN81g0Q592TN28Jenpf0SQUAAGCxiMaqKnFPVVXiE/tmHJONx3JDlMKm8dTba2AE3EJNja+Y4yRdUii0XfHN2H0NDXkipWRLmepqb1r4kwvuKVnWSSkH4A84phsa7EuUApfIuJ6etMiFi4mDSAgAIsHuHve0IOTdV+sPBOy+o0fzxGi2SVS6u9MiFz8tEmSZZ/8AAIJXr7qFri7zcstx+6zgsy1tVD4v0NBoX4wXsFuVK1fS127cKJhLKgBEgr29Rb7OrowVAABZJtjS4gzMzNgeAADMztpnGo85fkdMjDZxd8EhiknJQlHl+/oK/R3nzeLj7bIM2NTsCNTXZRhPf2wREVNTW/B/RZtr/YX+cx2WB2q9skyUj05nLgNAyk4yNrVaf3+h/+xZy0MtV2hxPdA/UORvP6NueS2Jqgfm5qxL7e2WpZ1QI9M43CawQ2THnUr85wCoBrHZLMFbh0MpA5efv0a3BcBqXcw8dGjxhf8p9C9RiAAA3rmTvrJrt21RY2e7MD1t+e2x15gamlcUJUgpfXpoWC8NDTsDGja2IknSTTUKNSqK8lDjTEFZlj+oq6ubjd2tIUJlZWUmY+wlnuddGoyLX8Ph8HfDw8OziAj19fW8IAg3AYBTFGWY4BO/ZPbt27fLaDS+CwCIiPdEUTzPGNNMZGRlZbkopW0AgIqiDMUAIISA1+vto5TmrNcDyGnJHYQQBABlfcsjn6KxBQyCTqdrBoDIowGylq6o8gAwotPpPo/xQNQLBw4c2M1x3KsA4NLSr1dK6UPG2GhOTs7Xly9fxj8A10cIqTl/HS8AAAAASUVORK5CYII=)} ' +
          '#animation-button[anim="none"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAoCAYAAAC4h3lxAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH4wkNFRMXW6/c7gAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAATFSURBVFjD7ZlfTFtVHMd/55z+Adrbv7fg5E9L/4hLpg/GkABJwcb4plnilhg18OBC9rQnn3wyZosQJXswIwzQRRBxWcbcMnSaEf6EhMiDjj9hQssmVMV20FG4QHu59x4fRgnQWwTajUviL2nannPPvb/P7/f9/dLTgwAAfD5fLgC8LAhCHgAgUJARQqIIocmampqp6urqpHnk9XpLCCEnEUIUlGtIkqSRvr6+O5Rud1OFEHoz4TxPqRqosjjUGAsIgCKEXqmoqBgHgD+3ARBCMADAO9Goo/Thw1oKQJQEEGbZnvqCgp8RQoJGoylMAkh8eD4Ws2QLAlGadiyrq8VbpVRbW0v8fr/Y29sLAAAYjphNT083IIQ6fD7f8W0ZkLN1jebxDMv+EtDrZwml2M1xjsL5+TLV+rruMBsTQqgEAJoqKyvfSwmwkpPz6LLH0+xXq5c2B41Gf6nFMvZuIHBGG48zhwTweONdhxB6P6WEbtntV7c5v2HD2dn/DBYW3jis8JvN5rrNgkAoTxYgyjDBAZ0umOomHSbT/ZhWu3xAH9Lq0zabjQcAMfFdFoCXifxW0wKIcZVK2O/DQ2az/3ZJyUWJkOVMZUQWQL2+btgtUjwA0QiCaj8Pmjeb79c5nVe6GSb0o8fTmCkIWQATx+WXrq7mp1p0Ohp9IXsfRbxgNk9eKC7+NoaQCABwW6+P/OB2t9AMQMgXMaX41OzsqQJB0O+ceikeZ6uCwZN7jrzJ9OCC09kWw5jfOt7NMKE7bneLhPFKOgApZcBwXP6Hk5Nn/TbbwIROF9RQSl7kuCJXOPyamucNe7l5xGSaqnO5vl5DSLZebjFMiHg8Ta8HAmexKOoyCgAAoF1bs52YnX37xEGatdEY+NTp/GYlhfMJu8EwYepytb4RCJxBkqTLjITStAWjcabe5brCYRzfy/XfGwx/33W7WyjGq88CYNc+vmg0Bj53uVqjGO+rzXYZDHM9Hk8zxXjtaQJIvzkcbSGW/VXWeYPhQb3T2b64o2D3atcZZq7H5fqSYhx7GgDSPYejrZllJ87b7ddCVuvoNs0bDLOfud1fLRISS0d+143G4FR+/s1MA0gjDkf7ZZb9HQBAQEg673B0hq3WMQCAJYMh0OB2t0QwXs9EDcUJ4TPShTadt9s7m1h2YuuggJD0icPReS4rK9iemzu8cEDZpGv/BSCN2e2dTTbbqNykiJB48dix/sPc4OwmITput3c22mxjSt6hpczAeFHR1UspIq8kk81AxGwev5Sbe+8o7JFlAaQn/xPRIwtwlOzIA8gWcRbPZ38QieQfllN5KyvPpQWg5zj3qxx37n8JPSMJYQCQJvX6kNliGVVa95ljmMmtv2CSAERRXCKE6Lt1ur+6nc4OpUaaUop4nv8jSUKU0muSJIlKlgmlFImieHdwcDCclIH+/v5H5eXljVqt9rhKpWIopVhhznOxWGxmaGgoLDePdh7ZlJWVFeTk5Hz8ZC0NLi8vtwqCoJi6MJlMxRjjLwCASpI0kASAEIKqqqqfMMbWjQgo6tBj4zhMAgAQRbEBy6QM1Gr1RwDAbywQlfRKOA8Aw2q1+rukDCSy4PV6CwkhbwFAMaVUMUevGOMlQRBGrFbrza6uLvovNfXp2AJLOUkAAAAASUVORK5CYII=)}';
       var stylesheet = document.createProcessingInstruction('xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"');
       document.insertBefore(stylesheet, document.documentElement);
    
    })();
    Alles anzeigen
  • FF126: AnimationToggleButton.uc.js tuts nich mehr

    • bege
    • 15. Mai 2024 um 22:57
    Zitat von Sören Hentzschel

    Ich muss mal schauen, versprechen kann ich nichts.

    🙏

  • FF126: AnimationToggleButton.uc.js tuts nich mehr

    • bege
    • 15. Mai 2024 um 22:28
    Zitat von Sören Hentzschel

    Dann hätte ich mein Add-on ja vielleicht doch veröffentlichen sollen? Ich hatte bereits 2017 ein Add-on geschrieben, welches alle drei Modi unterstützt, aber nie auf AMO veröffentlicht. :D

    Nachtrag: Funktioniert sogar noch! Auch wenn die Kontrollelemente um ein paar Pixel verrutscht sind.

    Da mich vor allem die Funktion 1x interessiert, hätte ich das Add-on gern. Bei o.g. Skript funktioniert bei mir die Änderung des Buttons nicht richtig und beim Rechtsklick bleibt die Funktion 1x. Bei Links- und Mittelklick muss ich die Seite manuell neu laden.

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

    • bege
    • 21. Februar 2024 um 22:45
    Zitat von .DeJaVu

    Vermutlich hängt das mit 4K und dem DPI-Scaling zusammen, das wäre dann Sache von Firefox und nicht dem Script.

    Ganz sicher, das betrifft hier andere, ältere Programme, aber alles andere im Firefox einschließlich aller anderen Skripte wird im Fx richtig angezeigt, wie oben schon erwähnt.


    Zitat von 2002Andreas

    Du musst das Popup erst auswählen:

    Das wusste ich, aber bei anderen Elementen kann man die dann anklicken, um sie im Inspektor zu "fixieren". Das geht bei diesem Menü nicht, es reagiert auf Klicks ganz normal. Auf deinen Hinweis hin habe ich es nochmal probiert und ohne Anklicken konnte ich die Elemente dann untersuchen.

    Letztendlich musste ich an zwei Stellen schrauben:

    CSS
    hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic hbox.menu-iconic-left {
           transform: scale(.5) !important;
    	    max-height: 20px !important;
          }
    hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic hbox.menu-accel-container {
    	     max-height: 18px !important;
    	  }

    Das hätte ich ohne deine Hinweise nicht herausgefunden. Vielen Dank!

    Das ganze Skript sieht jetzt so aus:

    JavaScript: saveTo.uc.js
    // ==UserScript==
    // @include       chrome://mozapps/content/downloads/unknownContentType.xhtml
    // @charset       UTF-8
    // @version       Fx104+
    // ==/UserScript==
    (function () {
      const Cu = Components.utils;
      if (!window.FileUtils) Cu.import('resource://gre/modules/FileUtils.jsm');
    
      setTimeout(function () {
        saveTo();
      }, 200);
    
      function saveTo() {
       // Config
       const dirArray = [
       ['F:\\Users\\bege\\Desktop', 'Desktop'],
       ['F:\\Downloads', 'Downloads'],
       ['F:\\Eigene Dateien\\Eigene Bilder\\Symbole', 'Symbole'],
       ['F:\\Users\\bege\\AppData\\Roaming\\Mozilla\\Firefox\\icons', 'Firefox\\Icons'],
       ['F:\\Setups\\Audio-Video', 'Setups\\Audio-Video'],
       ['F:\\Setups\\Dateiverwaltung', 'Setups\\Dateiverwaltung'],
       ['F:\\Setups\\Dateiverwaltung\\FreeCommander', 'Setups_FreeCommander'],
       ['F:\\Setups\\Editoren', 'Setups\\Editoren'],
       ['F:\\Setups\\Editoren\\Notepad++', 'Setups\\Notepad++'],
       ['F:\\Setups\\Grafik', 'Setups\\Grafik'],
       ['F:\\Setups\\Internet', 'Setups\\Internet'],
       ['F:\\Setups\\Sicherheit\\KeePass', 'Setups\\Sicherheit\\KeePass'],
       ['F:\\Setups\\Tools', 'Setups\\Tools'],
       ['F:\\Setups\\Tools\\W10', 'Setups\\Tools\\W10'],
       ['F:\\Setups\\Wartung', 'Setups\\Wartung'],
       ['F:\\Setups\\Wartung\\System u. Hardware', 'Setups\\Wartung\\System, Hardw.'],
       ['F:\\Eigene Dateien\\Eigene Bilder\\aktuelleDownloads', 'Bilder'],
       ['F:\\Eigene Dateien\\Eigene Musik\\aktuelleDownloads', 'Musik'],
       ['F:\\Eigene Dateien\\Eigene Videos\\aktuelleDownloads', 'Videos'],
       [FileUtils.getDir('UChrm', []).path, 'chrome'],
       [FileUtils.getDir('UChrm', ['CSS']).path, 'CSS'],
       [FileUtils.getDir('UChrm', ['JS']).path, 'JS'],
       ['C:\\', 'C:'],
       ['E:\\', 'E:'],
       ['F:\\', 'F:'],
       ['S:\\', 'S:']
       ];
       const button = document.getElementById('unknownContentType').getButton('cancel');
       const saveTo = button.parentNode.insertBefore(document.createXULElement('button'), button);
       const saveToMenu = saveTo.appendChild(document.createXULElement('menupopup'));
    
       saveTo.classList.toggle('dialog-button');
       saveTo.label = 'Speichern in…';
       saveTo.type = 'menu';
    
       const css =`
          hbox.dialog-button-box button.dialog-button menupopup {
            // color: white !important;
            background: #eeeeee !important;
          }
          hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic {
             padding-left: 8px !important;
          }
          hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic:hover {
            background: red !important;
            // color: white !important;
          }
          hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic hbox.menu-iconic-left {
            transform: scale(.5) !important;
    	     max-height: 20px !important;
          }
          hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic label.menu-iconic-text {
            padding-right: 8px !important;
          }
          hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic hbox.menu-accel-container {
    	     max-height: 18px !important;
          }
        `;
    
       const sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
       const uri = Services.io.newURI('data:text/css,' + encodeURIComponent(css));
       sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    
       dirArray.forEach(function (directory) {
         const [name, dir] = [directory[1], directory[0]];
         const mi = document.createXULElement('menuitem');
         const item = saveToMenu.appendChild(mi);
         item.setAttribute('label', (name || (dir.match(/[^\\/]+$/) || [dir])[0]));
         item.setAttribute('image', 'moz-icon:file:///' + dir + '\\');
         item.setAttribute('class', 'menuitem-iconic');
         item.addEventListener('command', function () {
           const locationtext = document.getElementById('locationtext');
           const pathFile = dir + '\\' + (locationtext ? locationtext.value : document.getElementById('location').value);
           const file = new FileUtils.File(pathFile);
           dialog.mLauncher.saveDestinationAvailable(file);
           dialog.onCancel = function () {};
           close();
        });
       });
      }
    }());
    Alles anzeigen
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • bege
    • 21. Februar 2024 um 20:38
    Zitat von 2002Andreas

    Teste bitte mal, und pass dir evtl. die Werte in Zeile 56 noch an.

    Dankeschön, da tut sich schon was. Die Symbole werden kleiner, aber der Zeilenabstand bleibt so groß. Wenn ich in Zeile 55 hbox.menu-iconic-left weglasse, wird auch die Schrift kleiner, der Zeilenabstand bleibt immer noch so groß.

    Zitat von 2002Andreas

    Wenn die Werte gleich bleiben sollen, dann reicht auch:

    transform: scale(.7) !important;

    Was meinst du damit? Das steht doch so in deinem Vorschlag.

    Ich konnte das Menü nicht mit dem Inspektor untersuchen. Gibt es einen Trick dafür?

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

    • bege
    • 20. Februar 2024 um 21:11

    Ich nutze schon lange das Skript saveTo.uc.js zur Erweiterung des Download-Popup mit einem Menü für voreingestellte Speicherorte. Nun habe ich ein Notebook mit 4k-Bildschirm, und da werden in diesem Skript die Symbole viel zu groß dargestellt. (Sonst sieht alles richtig aus im Fx.) Dadurch wird nicht das ganze Menü angezeigt und es kann auch nicht gescrollt werden.

    Ich habe nicht herausgefunden, wie ich das Skript ändern muss, damit die Symbole in der richtigen Größe angezeigt werden. Kann mir jemand helfen?

    Im Moment nutze ich das Skript ohne die Symbole (Zeile 82 auskommentiert).

    JavaScript: saveTo.uc.js
    // ==UserScript==
    // @include       chrome://mozapps/content/downloads/unknownContentType.xhtml
    // @charset       UTF-8
    // @version       Fx104+
    // ==/UserScript==
    (function () {
      const Cu = Components.utils;
      if (!window.FileUtils) Cu.import('resource://gre/modules/FileUtils.jsm');
    
      setTimeout(function () {
        saveTo();
      }, 200);
    
      function saveTo() {
       // Config
       const dirArray = [
       ['F:\\Users\\bege\\Desktop', 'Desktop'],
       ['F:\\Eigene Dateien\\DOWNLOADS', 'Downloads'],
       ['F:\\Eigene Dateien\\DriveOnWeb', 'DriveOnWeb'],
       ['F:\\Eigene Dateien\\Eigene Bilder\\Symbole', 'Symbole'],
       ['F:\\Users\\bege\\AppData\\Roaming\\Mozilla\\Firefox\\icons', 'Firefox\\Icons'],
       ['F:\\Setups\\Audio-Video', 'Setups\\Audio-Video'],
       ['F:\\Setups\\Dateiverwaltung', 'Setups\\Dateiverwaltung'],
       ['F:\\Setups\\Dateiverwaltung\\FreeCommander', 'Setups_FreeCommander'],
       ['F:\\Setups\\Editoren', 'Setups\\Editoren'],
       ['F:\\Setups\\Editoren\\Notepad++', 'Setups\\Notepad++'],
       ['F:\\Setups\\Editoren\\PSPad', 'Setups\\PSPad'],
       ['F:\\Setups\\Grafik', 'Setups\\Grafik'],
       ['F:\\Setups\\Internet', 'Setups\\Internet'],
       ['F:\\Setups\\Sicherheit\\KeePass', 'Setups\\Sicherheit\\KeePass'],
       ['F:\\Setups\\Tools', 'Setups\\Tools'],
       ['F:\\Setups\\Tools\\W10', 'Setups\\Tools\\W10'],
       ['F:\\Setups\\Wartung', 'Setups\\Wartung'],
       ['F:\\Setups\\Wartung\\System u. Hardware', 'Setups\\Wartung\\System, Hardw.'],
       ['F:\\Eigene Dateien\\Eigene Bilder\\aktuelleDownloads', 'Bilder'],
       ['F:\\Eigene Dateien\\Eigene Musik\\aktuelleDownloads', 'Musik'],
       ['F:\\Eigene Dateien\\Eigene Videos\\aktuelleDownloads', 'Videos'],
       [FileUtils.getDir('UChrm', []).path, 'chrome'],
       [FileUtils.getDir('UChrm', ['CSS']).path, 'CSS'],
       [FileUtils.getDir('UChrm', ['JS']).path, 'JS'],
       ['C:\\', 'C:'],
       ['E:\\', 'E:'],
       ['F:\\', 'F:'],
       ['S:\\', 'S:']
       ];
       const button = document.getElementById('unknownContentType').getButton('cancel');
       const saveTo = button.parentNode.insertBefore(document.createXULElement('button'), button);
       const saveToMenu = saveTo.appendChild(document.createXULElement('menupopup'));
    
       saveTo.classList.toggle('dialog-button');
       saveTo.label = 'Speichern in…';
       saveTo.type = 'menu';
    
       const css =`
          hbox.dialog-button-box button.dialog-button menupopup {
            // color: white !important;
            background: #eeeeee !important;
          }
          hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic:hover {
            background: red !important;
            // color: white !important;
          }
          hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic hbox.menu-iconic-left {
            padding-left: 6px !important;
            margin-left: 1px !important;
          }
          hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic label.menu-iconic-text {
            padding-right: 5px !important;
            padding-left: 4px !important;
          }
        `;
    
       const sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
       const uri = Services.io.newURI('data:text/css,' + encodeURIComponent(css));
       sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    
       dirArray.forEach(function (directory) {
         const [name, dir] = [directory[1], directory[0]];
         const mi = document.createXULElement('menuitem');
         const item = saveToMenu.appendChild(mi);
         item.setAttribute('label', (name || (dir.match(/[^\\/]+$/) || [dir])[0]));
         item.setAttribute('image', 'moz-icon:file:///' + dir + '\\');
         item.setAttribute('class', 'menuitem-iconic');
         item.addEventListener('command', function () {
           const locationtext = document.getElementById('locationtext');
           const pathFile = dir + '\\' + (locationtext ? locationtext.value : document.getElementById('location').value);
           const file = new FileUtils.File(pathFile);
           dialog.mLauncher.saveDestinationAvailable(file);
           dialog.onCancel = function () {};
           close();
        });
       });
      }
    }());
    Alles anzeigen
  • Ehrentitel

    • bege
    • 29. November 2023 um 20:41
    Zitat von Sören Hentzschel

    Wer sich also immer noch diese Funktion für dieses Forum wünscht, sollte sich überlegen, ob das unter diesen Voraussetzungen überhaupt noch gewünscht wird.

    Danke für den neuen Anlauf, Sören. Genau das wünsche ich mir. Positive Bewertungen/Dankeschön statt den Post zu zitieren und "Danke" zu schreiben.

    Zitat von Sören Hentzschel

    Würde jetzt jemand einen Beitrag schreiben, der nur einen Daumen nach oben oder unten beinhaltet und sonst gar nichts, ist das nicht so fein, weil das keinen Inhalt hat. Schon gar nicht, wenn das zehn Nutzer machen oder noch mehr. Das Thema wird unübersichtlich und es verursacht ja auch jedes Mal Benachrichtigungen über neue Beiträge.

    :thumbup: ;) Ich habe mich an die vielen Benachrichtigungen über neue Beiträge, die dann sinngemäß "Danke" und "Bitte" enthalten, gewöhnt, trägt ja auch zum meist freundlichen Ton hier im Forum bei, aber Likes ohne Benachrichtigung wären mir eindeutig lieber. Und wer trotzdem "Danke" und "Bitte" schreiben möchte, kann das ja auch weiterhin tun. Es geht ja nicht darum, etwas wegzunehmen, sondern um eine zusätzliche Möglichkeit der Reaktion.

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

    • bege
    • 2. November 2023 um 19:23

    BrokenHeart

    Genial! Ist das für jedes Skript angepasst verwendbar, das einen nicht verschiebbaren Button hat?

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