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

Beiträge von Mira_Belle

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mira_Belle
    • 12. Januar 2025 um 11:44

    2002Andreas Ist nur ein Versuch!

    JavaScript
    // ==UserScript==
    // @name           Thunderbird.uc.js
    // @namespace      ithinc#mozine.cn
    // @description    External Applications
    // @include        main
    // @compatibility  Firefox 3.5.x
    // @author         ithinc
    // @version        20091212.0.0.1 Initial release
    // ==/UserScript==
    
    /* :::: External Applications :::: */
    
    var gExternalApplications = {
      type: 'button', //'menu' or 'button'
      insertafter: 'urlbar-container',
    
      apps: [
        
        {name: 'Thunderbird', path: 'C:\\Program Files\\Mozilla Thunderbird\\thunderbird.exe'},
       
      ],
    
      init: function() {
        for (var i=0; i<this.apps.length; i++) {
          if (!this.apps[i].path) continue;
          if (!this.apps[i].args) this.apps[i].args = [];
    
          this.apps[i].path = this.apps[i].path.replace(/\//g, '\\');
    
          var ffdir = Cc['@mozilla.org/file/directory_service;1'].getService(Ci.nsIProperties).get('CurProcD', Ci.nsIFile).path;
          if (/^(\\)/.test(this.apps[i].path)) {
            this.apps[i].path = ffdir.substr(0,2) + this.apps[i].path;
          }
          else if (/^(\.)/.test(this.apps[i].path)) {
            this.apps[i].path = ffdir + '\\' + this.apps[i].path;
          }
        }
    
        if (this.type == 'menu') {
          var mainmenu = document.getElementById('main-menubar');
          var menu = mainmenu.appendChild(document.createXULElement('menu'));
          menu.setAttribute('label', 'Start');
          menu.setAttribute('accesskey', 'a');
    
          var menupopup = menu.appendChild(document.createXULElement('menupopup'));
          for (var i=0; i<this.apps.length; i++) {
            menupopup.appendChild(this.createMenuitem(this.apps[i]));
          }
        }
        else {
          var menubarItems = document.getElementById(this.insertafter);
          var toolbaritem = menubarItems.parentNode.insertBefore(document.createXULElement('toolbaritem'), menubarItems.nextSibling);
    	  toolbaritem.id = 'ExtAppButtons';
          toolbaritem.setAttribute("class", "chromeclass-toolbar-additional");
          toolbaritem.setAttribute("orient", "horizontal");
          for (var i=0; i<this.apps.length; i++) {
            toolbaritem.appendChild(this.createButton(this.apps[i]));
          }
        }
      },
    
      exec: function(path, args) {
        for (var i=0; i<args.length; i++) {
          args[i] = args[i].replace(/%u/g, gBrowser.currentURI.spec);
        }
    
        var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        file.initWithPath(path);
        if (!file.exists()) {
          throw 'File Not Found: ' + path;
        }
    
        if (!file.isExecutable() || args.length==0) {
          file.launch();
        }
        else {
          var process = Cc['@mozilla.org/process/util;1'].getService(Ci.nsIProcess);
          process.init(file);
          process.run(false, args, args.length);
        }
      },
    
      createButton: function(app) {
        if (app.name == 'separator')
          return document.createXULElement('toolbarseparator');
    
        var item = document.createXULElement('toolbarbutton');
        item.setAttribute('class', 'toolbarbutton-1 chromeclass-toolbar-additional');
        item.setAttribute('label', app.name);
        item.setAttribute('image', 'moz-icon:file:///' + app.path + '?size=16');
            //item.setAttribute('oncommand', 'gExternalApplications.exec(this.path, this.args);');
    		item.setAttribute('oncommand', function(event) {
    			gExternalApplications.exec(this.path, this.args);
    		}, true);
       // item.setAttribute('tooltiptext', app.name);
        item.path = app.path;
        item.args = app.args;
        return item;
      },
    
      createMenuitem: function(app) {
        if (app.name == 'separator')
          return document.createXULElement('menuseparator');
    
        var item = document.createXULElement('menuitem');
        item.setAttribute('class', 'menuitem-iconic');
        item.setAttribute('label', app.name);
        item.setAttribute('image', 'moz-icon:file:///' + app.path + '?size=16');
            //item.setAttribute('oncommand', 'gExternalApplications.exec(this.path, this.args);');
    		item.setAttribute('oncommand', function(event) {
    			gExternalApplications.exec(this.path, this.args);
    		}, true)
        item.path = app.path;
        item.args = app.args;
        return item;
      }
    };
    gExternalApplications.init();
    Alles anzeigen

    Wenn sich jemand meiner Skripte annehmen würde, bitte.
    Wichtig für mich wäre jenes, welches im ZIP ist!
    Und die Liste ist ja auch schon etwas kleiner, es sind ja nur noch 6 Stück.
    Wo bei zwei im Prinzip gleich sind, als fünf, quasi.

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mira_Belle
    • 12. Januar 2025 um 01:40

    zu1.
    Oh, ehrlich? Dann muss ich noch mal schauen.

    zu2.
    :/ Habe ich übersehen! Sorry.

    zu3.
    Danke, habe ich nach diesem "Muster" korrigiert.


    Nachtrag!
    zu2.

    JavaScript
            let undoItems = SessionStore.getClosedTabDataForWindow(window);
            undoItems.map(function (item, id) {
                var m = document.createXULElement('menuitem');
                m.setAttribute('label', item.title);
                m.setAttribute('image', item.image );
                m.setAttribute('class', 'menuitem-iconic bookmark-item');
            //    m.setAttribute('oncommand', 'undoCloseTab(' + id + ')');
                m.addEventListener('command', function(event) {
    				undoCloseTab(' + id + ');
    			}, true);
                popup.appendChild(m);
            });
    Alles anzeigen

    will einfach nicht! Why?

    :!:Nachtrag II:!:
    Ich Hirni 8o! Zeile 40 vergessen. Jetzt funktioniert es.

    Letzter Nachtrag!
    zu1.
    Ja, aber es funktioniert wohl ganz anders und ich habe jenes gar nicht in Benutzung,
    sondern habe nur jenes von FuchsFan angepasst!
    "Mein" Skript generiert einen verschiebbaren Button.

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mira_Belle
    • 12. Januar 2025 um 00:53

    BrokenHeart Jep!
    Habe mir die 136.0a1 parallel installiert und meine Skripts alle durch getestet!

    Es sind acht an der Zahl, die nicht mehr funktionieren. :/

    JavaScript
    /* Restart item script for Firefox 89+ by Aris
    
      - left-click on restart item: normal restart
      - middle-click on restart item: restart + clear caches
      - right-click on restart item: no special function
      
      - option: display restart icon in menubars 'File' menu
      - option: display restart icon in main menus popup
    
      - based on 'addRestartButton.uc.js' script by Alice0775
      - restart code from Classic Theme Restorer add-on
      - invalidate caches from Session Saver add-on
    
      https://github.com/Aris-t2/CustomJSforFx/blob/master/scripts/restart_item_in_menu.uc.js
    */
    
    var appversion = parseInt(Services.appinfo.version);
    var menuicon = false;
    var appmenuicon = false;
    
    var RestartMenuFileAppItems = {
      init: function() {
    
    	var button_label = "Neustart";
    
    	try {
    	  restartitem_appmenu = document.createXULElement("toolbarbutton");
    	  restartitem_appmenu.setAttribute("label", button_label);
    	  restartitem_appmenu.setAttribute("id","appMenu-restart-button");
    	  restartitem_appmenu.setAttribute("class","subviewbutton");
    	  restartitem_appmenu.setAttribute("insertbefore", "appMenu-quit-button2");
    	  restartitem_appmenu.setAttribute("onclick", "if (event.button == 0) {RestartMenuFileAppItems.restartApp(false);} else if (event.button == 1) {RestartMenuFileAppItems.restartApp(true)};");
    	  restartitem_appmenu.setAttribute("oncommand", "RestartMenuFileAppItems.restartApp(false);");  
    	  	  
    	  var AMObserver = new MutationObserver(function(mutations) {
    	    mutations.forEach(function(mutation) {
    			if(document.querySelector("#appMenu-restart-button") == null ) document.querySelector("#appMenu-quit-button2").parentNode.insertBefore(restartitem_appmenu,document.getElementById("appMenu-quit-button2"));
    	    });    
    	  });
    	
    	 AMObserver.observe(document.querySelector("#PanelUI-menu-button"), { attributes: true, attributeFilter: ['open'] });
    	
    	} catch(e) {}
    		  
    	 let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); // Pfad zum Profilordner und gleich in den entsprechenden Unterordner
    	 let ButtonIcon = "restart.svg"; // Name & Dateiendung des anzuzeigenden Symbols!    
    	 let sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);       
    	 let uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(`
       
    		#appMenu-restart-button { list-style-image: url("${ProfilePath}/${ButtonIcon}") }
    		#appMenu-restart-button > .toolbarbutton-icon {
    			margin-inline-end: 6px !important;
    			width: 19px !important;
    			height: 19px !important;
    			}
       		#appMenu-restart-button > image:nth-child(1) {
    			margin-left: -2px !important;
    			}
    
    		`), null, null);
       
    	 sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
    	
      },
    
      restartApp: function(clearcaches) {
    
    	var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"].createInstance(Components.interfaces.nsISupportsPRBool);
    	var observerSvc = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
    
    	if(clearcaches) {
    	  Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).invalidateCachesOnRestart();
    	}
    	observerSvc.notifyObservers(cancelQuit, "quit-application-requested", "restart");
    	if(cancelQuit.data) return false;
    	Services.startup.quit(Services.startup.eRestart | Services.startup.eAttemptQuit);
    
      }
    }
    
    RestartMenuFileAppItems.init();
    Alles anzeigen


    JavaScript
    // ==UserScript== 
    // @name           
    // @description    Tab schließen + Kontextmenü auch in dem Einstellungsfenster
    // @charset        UTF-8
    // @author         @aborix
    // @version        v2024.09.10
    // @note           Vorlage Script von @aborix (+ Änderungen von @milupo aus dem Fuchsforum 1.10.24)
    // @note           Zeile 32 Anpassung von @milupo ( 08.10.2024 ab Fx 132 > tabbrowser-tabbox statt appcontent)
    // Zeile 29        https://www.camp-firefox.de/forum/thema/112673/?postID=1247653#post1247653
    // Zeile 32        https://www.camp-firefox.de/forum/thema/138429/?postID=1257843#post1257843
    // Source          https://www.camp-firefox.de/forum/thema/131567/?postID=1158359#post1158359
    // Weitere Url     https://www.camp-firefox.de/forum/thema/138429/?postID=1257796#post1257796
    // Weitere Url     https://www.camp-firefox.de/forum/thema/138429/?postID=1257854#post1257854
    // Weitere Url     https://www.camp-firefox.de/forum/thema/112673/?postID=1247653#post1247653
    
    
    (function() {
    
      if (!window.gBrowser)
        return;
    
      var contextMenu = document.getElementById('contentAreaContextMenu');
      var menuseparator = document.createXULElement('menuseparator');
      menuseparator.id = 'context-sep-closetab';
      contextMenu.append(menuseparator);
      var menuitem = document.createXULElement('menuitem');
      menuitem.id = 'context-closetab';
      menuitem.setAttribute('label', 'Tab schließen');
      menuitem.setAttribute('oncommand', 'BrowserCommands.closeTabOrWindow();');
      contextMenu.append(menuitem);
    
      var appcontent = document.getElementById('tabbrowser-tabbox');
      appcontent.addEventListener('contextmenu', event => { 
        setTimeout(() => {
          if (gContextMenu && !gContextMenu.shouldDisplay) {
            for (let string of 'back forward reload bookmarkpage'.split(' ')) {
              document.getElementById('context-' + string).removeAttribute('hidden');
            }
            document.getElementById('context-stop').setAttribute('hidden', 'true');
            const A = 'navigation sep-navigation savepage sep-paste selectall sep-viewsource viewsource viewinfo sep-bidi inspect-a11y inspect sep-closetab closetab'.split(' ');
            for (let node of contextMenu.childNodes) {
              if (A.includes(node.id.substring(8)))
                node.removeAttribute('hidden');
              else
                node.setAttribute('hidden', 'true');
            }
            contextMenu.openPopupAtScreen(event.screenX, event.screenY, true, event);
          }
        }, 50);
      });
    })();
    Alles anzeigen


    JavaScript
    // Translate_DeepL.uc.js
    // https://github.com/ardiman/userChrome.js/tree/master/contexttranslate
    // ex ContextTranslate.uc.js///
    // modifiziert by universum 123, Umlaute geändert by 2002Andreas
    // https://www.camp-firefox.de/forum/thema/126100/?postID=1107070#post1107070
    
    (function () {
    	if (location.href !== 'chrome://browser/content/browser.xhtml') return;
    	let translate = function () {
    		let browserMM = gBrowser.selectedBrowser.messageManager;
    		browserMM.addMessageListener('getSelection', function listener(message) {
    			let t = (message.data !== '');
    			let e = (document.charset || document.characterSet);
    			if (t) {
    				openWebLinkIn('https://www.deepl.com/translator#en/de/' + encodeURIComponent(message.data), 'tab');
    			} else {
    				openWebLinkIn('https://www.deepl.com/translate?u=' + encodeURIComponent(gBrowser.currentURI.spec) + '&hl=de-DE&ie=' + e + '&sl=auto&tl=de-DE', 'tab');
    			};
    			browserMM.removeMessageListener('getSelection', listener, true);
    		});
    		browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getSelection().toString())', true);
    	}
    	let menuitem = document.createXULElement('menuitem');
    		menuitem.id = 'context-DeepLtranslate';
    		menuitem.setAttribute('label', '\u00dcbersetzen (DeepL)');
    		menuitem.setAttribute('oncommand', '(' + translate.toString() + ')()');
    		menuitem.classList.add('menuitem-iconic');
    	let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
    	let ButtonIcon = "DeepL_2.png";
    		menuitem.style.listStyleImage = 'url("' + ("file:" + ProfilePath + "/chrome/icons/" + ButtonIcon) + '")';
    	let refItem = document.getElementById('context-inspect');
    	refItem.parentNode.insertBefore(menuitem, refItem);
    })();
    Alles anzeigen

    Das hier ist dem Vorherigen sehr ähnlich, nur dass per Google übersetzt wird!

    JavaScript
    // ContextTranslate_Google.uc.js
    // https://github.com/ardiman/userChrome.js/tree/master/contexttranslate
    // ex ContextTranslate.uc.js///
    // modifiziert by universum 123, Umlaute geändert by 2002Andreas
    // https://www.camp-firefox.de/forum/thema/126100/?postID=1107070#post1107070
    
    (function () {
    	if (location != 'chrome://browser/content/browser.xhtml')
    		return;
    	let translate = function () {
    		let browserMM = gBrowser.selectedBrowser.messageManager;
    		browserMM.addMessageListener('getSelection', function listener(message) {
    			let t = (message.data !== '');
    			let e = (document.charset || document.characterSet);
    			if (t) {
                    openWebLinkIn('https://translate.google.com/?sl=en&tl=de&text=' + encodeURIComponent(message.data), 'tab');
    			} else {
    				openWebLinkIn('https://translate.google.com/translate?u=' + encodeURIComponent(gBrowser.currentURI.spec) + '&hl=de-DE&ie=' + e + '&sl=auto&tl=de-DE', 'tab');
    			};
    			browserMM.removeMessageListener('getSelection', listener, true);
    		});
    		browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getSelection().toString())', true);
    	}
    	let menuitem = document.createXULElement('menuitem');
    	menuitem.id = 'context-googletranslate';
    	menuitem.setAttribute('label', '\u00dcbersetzen (Google)');
    	menuitem.setAttribute('oncommand', '(' + translate.toString() + ')()');
    	menuitem.classList.add('menuitem-iconic');
    	let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
    	let ButtonIcon = "Google.svg";
    	menuitem.style.listStyleImage = 'url("' + ("file:" + ProfilePath + "/chrome/icons/" + ButtonIcon) + '")';
        let refItem = document.getElementById('context-inspect');
    	refItem.parentNode.insertBefore(menuitem, refItem);
    })();
    Alles anzeigen
    JavaScript
    // newTabButtonUndoTabList.uc.js
    
    "use strict";
    /* ******************************************************************************************************** */
    /* Beschreibung                                                                                             */
    /* Bei Rechtsklick auf die Neuen Tab Schaltfläche, wird im Kontextmenü,                                     */
    /* der Eintrag zum Wiederherstellen des zuletzt geschlossenen Tabs angezeigt.                               */
    /* Customized by BrokenHeart                                                                                */
    /*                                                                                                          */
    /* https://www.camp-firefox.de/forum/thema/112673/?postID=1223733#post1223733                               */
    /* https://www.camp-firefox.de/forum/thema/112673/?postID=1228286#post1228286                               */
    /*                                                                                                          */
    /* ******************************************************************************************************** */
    
    (function () {
    
        if (!window.gBrowser){
            return;
        }
        
        gBrowser.tabContainer.addEventListener('click', function (e) {
            if (e.originalTarget.id != 'tabs-newtab-button') return;
            switch (e.button) {
                case 1:
                    undoCloseTab(0);
                    break;
                case 2:
                    UCT.makePopup(e);
                    event.preventDefault();
                    break;
            }
        }, false);
    
    })();
    
    var UCT = {
        init: function () {
            var mp = document.createXULElement("menupopup");
            mp.id = "undo-close-tab-list";
            mp.setAttribute("onpopupshowing", "UCT.onpopupshowing(event);");
            mp.setAttribute("placespopup", true);
            mp.setAttribute("tooltip", "bhTooltip");
            mp.setAttribute("popupsinherittooltip", true);
            document?.getElementById("mainPopupSet")?.appendChild(mp);
        },
    
        makePopup: function (e) {
    
            if (SessionStore.getClosedTabCountForWindow(window) != 0) {            
                document.getElementById("undo-close-tab-list").openPopupAtScreen(e.screenX +2, e.screenY +2, false);
            }
            else
            {
                console.log("--- Es gibt keinen Tab, der wiederhergestellt werden kann ---");
            }
        },
    
        onpopupshowing: function (e) {
            var popup = e.target;
    
            while (popup.hasChildNodes())
                popup.removeChild(popup.firstChild);
    
            let undoItems = SessionStore.getClosedTabDataForWindow(window);
            undoItems.map(function (item, id) {
                var m = document.createXULElement('menuitem');
                m.setAttribute('label', item.title);
                m.setAttribute('image', item.image );
                m.setAttribute('class', 'menuitem-iconic bookmark-item');
                m.setAttribute('oncommand', 'undoCloseTab(' + id + ')');
                popup.appendChild(m);
            });
        },
    };
    
    setTimeout(function() {
          UCT.init();
      },250);
    Alles anzeigen

    Das hatte ich schon mal gepostet, funktioniert aber nicht!

    JavaScript
    //SkipToTopAndBottom.uc.js
    (function() {
    
        let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");  // Pfadangabe zum Profilordner
        let up = "arrow-up.svg";
    
        let menuitem = document.createXULElement('menuitem');
            menuitem.id = 'context-to-top';
            menuitem.classList.add('menuitem-iconic');
            menuitem.setAttribute('tooltiptext' , 'Zum Seitenanfang springen');
            menuitem.style.listStyleImage = 'url("' + ("file:" + ProfilePath + "/chrome/icons/" + up) + '")';
            menuitem.setAttribute('oncommand' , "ownerGlobal.gBrowser.selectedBrowser.messageManager.loadFrameScript(' data: , content.scrollTo({ top: 0, left: 0, behavior: \"smooth\" }) ' , false);");
        let refItem = document.getElementById('context-reload');
        refItem.parentNode.insertBefore(menuitem, refItem);
         
        })();
        
        (function() {
    
        let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");  // Pfadangabe zum Profilordner
        let down = "arrow-down.svg";
        
        let menuitem = document.createXULElement('menuitem');
            menuitem.id = 'context-to-bottom';
            menuitem.classList.add('menuitem-iconic');
            menuitem.setAttribute('tooltiptext' , 'Zum Seitenende springen');
            menuitem.style.listStyleImage = 'url("' + ("file:" + ProfilePath + "/chrome/icons/" + down) + '")';
            menuitem.setAttribute('oncommand' , "ownerGlobal.gBrowser.selectedBrowser.messageManager.loadFrameScript(' data: , content.scrollTo({ top: 100000, left: 0, behavior: \"smooth\" }) ' , false);");
        let refItem = document.getElementById('context-reload');
        refItem.parentNode.insertBefore(menuitem, refItem);
         
        })();
    Alles anzeigen
    JavaScript
    // ==UserScript==
    // @name           UndoListInTabmenuToo.uc.js
    // @namespace      http://space.geocities.yahoo.co.jp/gl/alice0775
    // @description    Kürzlich geschlossene Tabsliste in Tab-Kontext und Hauptkontextmenü einfügen.
    // @include        main
    // @compatibility  Firefox 117
    // @author         Alice0775
    // @version        2023/07/02 Einträge für Fenster entfernt
    // @version        2023/06/16 08:00 Bug 1819675 - Expand recently closed tabs to include all Windows
    // @version        2022/05/10 fix ref to context-media-eme-separator
    // @version        2021/12/09 remove JSON.parse (Bug 1733425)
    // @version        2021/04/25 fix 1689378
    // @version        2019/11/14 remove eval
    // @version        2019/06/30 10:00 Bug 1555060 Convert <tabs> to a custom element
    // @version        2019/06/24 23:00 wait for gBrowser initialized
    // @version        2019/05/21 08:30 fix 69.0a1 Bug 1551320 - Replace all createElement calls in XUL documents with createXULElement
    // @version        2018/05/10 60
    // @version        2017/11/18 nsIPrefBranch to nsIPrefBranch
    // @version        2010/09/18 00:00 4.0b7pre
    // @version        2009/02/03 13:00 Tab-Verlauf im Tooltip anzeigen
    // @Note           Fügt die UndoClose-Tab-Liste zu Tabs und Kontextmenüs hinzu
    // @OriginalCode   Orginalcode aus browser.js für populateUndoSubmenu verwenden
    // @version        2018/05/09 15:00 61
    // ==/UserScript==
    // @version        2010/03/26 13:00  Minefield/3.7a4pre Bug 554991 -  allow tab context menu to be modified by normal XUL overlays
    // @version        2010/03/15 00:00  Minefield/3.7a4pre Bug 347930 -  Tab strip should be a toolbar instead
    // @version        2009/09/09 15:00 Mittelklick-Handhabung
    // @version        2009/09/03 22:00 Firefox3.7a1pre Funktion wurde wieder hergestellt. (Bug 489925. getElementById should not return anonymous nodes)
    // @version        2009/08/22 00:00 Firefox3.6 Ändern des stringbandle
    // @version        2009/04/24 00:00 #394759 [Firefox:Session Restore]-Add undo close window feature
    // @version        2008/10/12 18:00 Fx3.0.4pre Mittelklick-Popupmenü wurde nicht geschlossen und andere Korrekturen
    // @version        2007/10/05 10:00
    
    var UndoListInTabmenu = {
    // -- config --
      TABCONTEXTMENU : false , //Im Tabkontextmenü: anzeigen: true, nicht anzeigen: false
      CONTEXTMENU    : false,  //Im Hauptkontextmenü: anzeigen: true , nicht anzeigen: false
    // -- config end--
      ss: null,
    
      get tabContext() {
        return document.getElementById("tabContextMenu");
      },
    
      get navigatorBundle() {
        return Services.strings.createBundle(
               "chrome://browser/locale/browser.properties"
               );
      },
    
      init: function(){      
        var css =`
          #tabContextUndoList :is(menu,menuitem),
          #ContextUndoList :is(menu,menuitem) {
            min-height: 20px !important;
            padding-top: 0 !important; 
            padding-bottom: 0 !important;
          } 
        `;  
      var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
      var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
      sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
    
        if (this.TABCONTEXTMENU){
          //Tabkontextmenü
          var tabContext = this.tabContext;
          this.makePopup(tabContext, null, "tabContextUndoList");
        }
        if (this.CONTEXTMENU){
          //Hauptkontextmenü
          var contextMenu = document.getElementById("contentAreaContextMenu");
          var refItem = document.getElementById("context-media-eme-separator");
          this.makePopup(contextMenu, refItem, "ContextUndoList");
        }
        // Geschlossene Tabs dem NS-Sitzungsspeicher entnehmen
        this._ss = SessionStore;
    
      },
    
      makePopup: function(popup, refItem, id){
        var menu;
        //label
        const locale = "de";
    
        //Liste kürzlich geschlossener Tabs
        const LABELTEXT = "Kürzlich geschlossene Tabs";    //create menu
        menu = document.createXULElement("menu");
        menu.setAttribute("label", LABELTEXT);
        menu.setAttribute("accesskey", "T");
        if (id)
          menu.setAttribute("id", id);
        var menupopup = document.createXULElement("menupopup");
        menupopup.setAttribute("onpopupshowing", "UndoListInTabmenu.populateUndoSubmenu(this);");
        menu.appendChild(menupopup);
        popup.insertBefore(menu, refItem);
    
        //Eventlistener hinzufügen
        popup.addEventListener('popupshowing',function(event) {
          UndoListInTabmenu.toggleRecentlyClosedWindows();
          if (UndoListInTabmenu._ss.getClosedTabCount(window) == 0) {
            menu.setAttribute("disabled", true);
            return;
          }
          menu.removeAttribute("disabled");
        },false);
      },
      
       /* Befüllen, wenn das Chronik-Menü geöffnet ist (Fx3.6) */
       
      populateUndoSubmenu: function(undoPopup) {
            while (undoPopup.hasChildNodes()) {
                undoPopup.removeChild(undoPopup.firstChild);
            }
            var utils = RecentlyClosedTabsAndWindowsMenuUtils;
            var tabsFragment = utils.getTabsFragment(
              window,
          "menuitem",
           aPrefixRestoreAll =  true,
          "menu-history-reopen-all-tabs"
        ); 
            undoPopup.appendChild(tabsFragment);
            undoPopup.firstChild.setAttribute("accesskey", "R");
            var m = undoPopup.insertBefore(document.createXULElement("menuitem"), undoPopup.childNodes[0]);
            m.setAttribute("label", "Letzten geschlossenen Tab wieder öffnen (s)");
            m.setAttribute("oncommand", "undoCloseTab()");
            m.setAttribute("accesskey", "o");
        undoPopup.insertBefore(document.createXULElement(""), undoPopup.childNodes[2]); 
      
        // populate tab historis for tooltip
        var undoItems = UndoListInTabmenu._ss.getClosedTabDataForWindow(window);
        for (var i = 0; i < undoItems.length; i++) {
          var entries = undoItems[i].state.entries;
          var tooltiptext = "";
          for (var j = entries.length - 1; j > -1; j--){
            if (j != entries.length - 1)
              tooltiptext += "\n";
            tooltiptext += parseInt(j + 1, 10) + ". " + entries[j].title;
          }
          undoPopup.childNodes[i + 2/*restore all, sep*/].setAttribute("tooltiptext", tooltiptext);
        }
    
        // "Append Clear undo close tb list"
        undoPopup.appendChild(document.createXULElement(""));
    
        m = undoPopup.appendChild(document.createXULElement("menuitem"));
        m.setAttribute("label", "Liste der letzten Tabs l\u00F6schen");
        m.setAttribute("accesskey", "h");
        m.addEventListener("command", function() {
          let prefs = Services.prefs;
          let max_undo = prefs.getIntPref("browser.sessionstore.max_tabs_undo");
          prefs.setIntPref("browser.sessionstore.max_tabs_undo", 0);
          prefs.setIntPref("browser.sessionstore.max_tabs_undo", max_undo);
        }, false);
      },
    
      toggleRecentlyClosedWindows: function PHM_toggleRecentlyClosedWindows() {
        // enable/disable the Recently Closed Windows sub menu
        let undoPopup = this.historyUndoWindowPopup3;
        // no restorable windows, so disable menu
        if (this._ss.getClosedWindowCount() == 0)
          this.historyUndoWindowPopup3.parentNode.setAttribute("disabled", true);
        else
          this.historyUndoWindowPopup3.parentNode.removeAttribute("disabled");
      },
    
      /**
       * Populate when the history menu is opened
       */
      populateUndoWindowSubmenu: function PHM_populateUndoWindowSubmenu(undoPopup) {
            while (undoPopup.hasChildNodes()) {
                undoPopup.removeChild(undoPopup.firstChild);
            }
            let utils = RecentlyClosedTabsAndWindowsMenuUtils;
            let windowsFragment = utils.getWindowsFragment(
          window,
          "menuitem",
           aPrefixRestoreAll =  true,
          "menu-history-reopen-all-windows"
        );
        undoPopup.appendChild(windowsFragment);
        undoPopup.firstChild.setAttribute("accesskey", "R");
        undoPopup.insertBefore(document.createXULElement(""), undoPopup.childNodes[1]);
        } 
    };
    
    // Wir sollten die Weiterleitung nur starten, wenn das Browserfenster den Startprozess abgeschlossen hat
    // Ansonsten sollten wir warten, bis der Start abgeschlossen ist.
        if (gBrowserInit.delayedStartupFinished) {
        UndoListInTabmenu.init();
        } 
        else {
        let delayedStartupFinished = (subject, topic) => {
        if (topic == "browser-delayed-startup-finished" &&
            subject == window) {
          Services.obs.removeObserver(delayedStartupFinished, topic);
          UndoListInTabmenu.init();
        }
        };
        Services.obs.addObserver(delayedStartupFinished,
                               "browser-delayed-startup-finished");
        }
    Alles anzeigen

    Und das Letzte ist zu groß (lang), als dass ich es hier posten könnte.
    Deshalb als ZIP

    Appmenu_neu2.uc.js.zip

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mira_Belle
    • 11. Januar 2025 um 23:41

    Wegen der Funktion an den Anfang oder das Ende einer Page zu scrollen,
    nutze ich dieses Skript:

    JavaScript
    //SkipToTopAndBottom.uc.js
    (function() {
    
        let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");  // Pfadangabe zum Profilordner
        let up = "arrow-up.svg";
    
        let menuitem = document.createXULElement('menuitem');
            menuitem.id = 'context-to-top';
            menuitem.classList.add('menuitem-iconic');
            menuitem.setAttribute('tooltiptext' , 'Zum Seitenanfang springen');
        //    menuitem.style.listStyleImage='url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAiElEQVR42mNkoBAw4pFjAuIWIP4NxA1A/J8UA0Ca5wFxPJQ/C4gzsBnCSIRmBnyGMBKpGachjCRoxmoII4maMQyBGVAOxB1EaoaBEiDuxRaI4kD8AocmCSB+iS8QRw2AAHYgfgXEfGjin4BYDIh/EjIABNyBuAyIuaD8b0DcBcQ70RXiy41EAQBJ/SQRxtinwAAAAABJRU5ErkJggg==")';
            menuitem.style.listStyleImage = 'url("' + ("file:" + ProfilePath + "/chrome/icons/" + up) + '")';
        //    menuitem.setAttribute('oncommand' , "ownerGlobal.gBrowser.selectedBrowser.messageManager.loadFrameScript(' data: , content.scrollTo(0,0) ' , false);");
            menuitem.setAttribute('oncommand' , "ownerGlobal.gBrowser.selectedBrowser.messageManager.loadFrameScript(' data: , content.scrollTo({ top: 0, left: 0, behavior: \"smooth\" }) ' , false);");
        let refItem = document.getElementById('context-reload');
        refItem.parentNode.insertBefore(menuitem, refItem);
         
        })();
        
        (function() {
    
        let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");  // Pfadangabe zum Profilordner
        let down = "arrow-down.svg";
        
        let menuitem = document.createXULElement('menuitem');
            menuitem.id = 'context-to-bottom';
            menuitem.classList.add('menuitem-iconic');
            menuitem.setAttribute('tooltiptext' , 'Zum Seitenende springen');
        //    menuitem.style.listStyleImage='url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhUlEQVR42mNkoBAw4hB3B+IyIOaC8r8BcRcQ7yTGAHYgfgXEfGjin4BYDIh/EjJAHIhf4HCZBBC/HDUAuwHFQNzDQBqoAOJORiSDZgBxGpGaFwJxEhD/Q/YCsYbANWMLA0KGoGjGFYi4DMHQjMsAbIZg1YzPAJhcAxCzAnENNs2EDCAKAADTlCMRQhQlFQAAAABJRU5ErkJggg==")';
            menuitem.style.listStyleImage = 'url("' + ("file:" + ProfilePath + "/chrome/icons/" + down) + '")';
        //    menuitem.setAttribute('oncommand' , "ownerGlobal.gBrowser.selectedBrowser.messageManager.loadFrameScript(' data: , content.scrollTo(0,100000) ' , false);");
            menuitem.setAttribute('oncommand' , "ownerGlobal.gBrowser.selectedBrowser.messageManager.loadFrameScript(' data: , content.scrollTo({ top: 100000, left: 0, behavior: \"smooth\" }) ' , false);");
        let refItem = document.getElementById('context-reload');
        refItem.parentNode.insertBefore(menuitem, refItem);
         
        })();
    Alles anzeigen

    Wie immer Symbole und eventuell den Pfad ändern!

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mira_Belle
    • 11. Januar 2025 um 23:17

    Also ich hätte da eine ganze Sammlung von Skripten, wo ich vermute, dass sie angepasst werden müssten.
    Es sind neun an der Zahl! Würde die jemand für mich "testen"?
    Und mir auch mitteilen, welche nicht funktionieren wollen.
    Oder gibt mir jemand per PN eine Anleitung, wie ich eine Vorabversion des Firefoxes so installiere,
    dass mein Profil, aber auch die stabile Version nicht angetastet wird.
    Muss ich mir eine VM anlegen? Fragen über Fragen.

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mira_Belle
    • 11. Januar 2025 um 22:47
    Zitat von FuchsFan
    Zitat von Mira_Belle

    Kann man für einzelne Skripts nicht ein Unterforum aufmachen

    Da würde ich vorschlagen ein Unterforum zu eröffnen, in dem nur die lauffähigen Scripte eingestellt werden, alles ohne Diskussion.

    Wer übernimmt?;)

    Das Unterforum müsste aber erst einmal angelegt werden.
    Und wir sollten auch darüber "sprechen", ob es nicht auch eine kleine Erklärung zu dem Skript geben sollte.
    Also welche Funktion es hat z.B. und eventuell auch ein Bildchen?
    Denn so schön auch die Sammlungen auf Github sind, sei es von Endor oder anderen,
    ich persönlich finde es immer schwierig mich durch die ganzen Skripten durchzuwühlen, wenn ich etwas suche.
    Und von den Skriptnamen kann man auch nicht immer so wirklich gut auf die Funktion schließen.

  • Die Sozialen Medien zerfallen immer mehr

    • Mira_Belle
    • 11. Januar 2025 um 22:15

    Sören Hentzschel Du hast recht!
    Und meine Formulierung war, ist unpassend.
    Sorry.

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mira_Belle
    • 11. Januar 2025 um 22:13

    Wow, wow, wow, ....
    Macht mal langsam! Ich verliere hier den Überblick!

    Kann man für einzelne Skripts nicht ein Unterforum aufmachen
    und da das jeweilige Skript "besprechen"?

    Ich habe gerade so gar keine Ahnung, welche Skripte jetzt wieder funktionieren und welche noch in der Pipeline hängen.

    Bin über Skripte gestolpert, die ich so ähnlich auch verwende, aber mir sind keine Korrekturen untergekommen.

    Nachtrag:!:
    Eventuell unter "Individuelle Anpassungen" ein Unterforum für die Skripte?

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mira_Belle
    • 11. Januar 2025 um 16:28
    Zitat von milupo
    Zitat von Mira_Belle

    komme ich gerade auch nicht weiter

    Was klappt denn nicht? M. E. brauchst du dort nichts ersetzen. onCommand und onCreated sind keine Inline-Eventhandler. Achte hier auf die Schreibweise: Inline-Eventhandler werden durchweg klein geschrieben, da gibt es keine Großbuchstaben.

    Beitrag

    RE: Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    […]

    Das heißt es grundsätzlich. Die Attribute für Inline-Eventlistener beginnen immer mit on und das lässt man dann weg, weil das nicht Teil des Event-Namens ist. Und mit grundsätzlich meine ich, dass dem so ist, wenn wir hier wirklich vom entsprechenden HTML- / XUL-Event sprechen. Man darf nicht blind alles ersetzen, was mit on beginnt. Die onClick- oder onBuild-Methoden, die Teil der CustomizableUI.createWidget-API sind, bleiben beispielsweise so.
    Sören Hentzschel
    10. Januar 2025 um 07:09

    Ups.

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mira_Belle
    • 11. Januar 2025 um 16:26
    Zitat von 2002Andreas
    Zitat von Mira_Belle

    Jemand eine Idee

    Teste bitte, evtl. musst du für dich noch etwas anpassen:

    JavaScript
    //Author @BrokenHeart
    (function() {
    
       if (!window.gBrowser){
            return;
        }
    
      ...

    :/ Bin ich doof? Ist doch genau das gleiche Skript, mehr oder weniger.
    Ich bin über folgende Zeile gestolpert: onCommand: onCommand, bei mir Zeile 13,
    in Deinem Skript auch Zeile 13.
    Muss da etwa nichts geändert werden?
    Wenn Du mir im Prinzip das gleiche Skript vorschlägst, wohl nicht.

    Na ja, werde es bei Zeiten merken.

  • Skript für Add-ons Update - Pfad zum Icon ändern

    • Mira_Belle
    • 11. Januar 2025 um 16:16

    Oh, sehe gerade, habe diese Version irgendwann mal etwas abgeändert!

    JavaScript
    // Addons-UpDate-Check.uc.js
    
    // Source file: https://www.camp-firefox.de/forum/thema/135814/?postID=1263412#post1263412
    
    (function () {
      if (!window.gBrowser) return;
      try {
        CustomizableUI.createWidget({
          id: "addons-update-button",
          defaultArea: CustomizableUI.AREA_NAVBAR,
          label: "Add-ons Update",
          tooltiptext: "Add-ons aktualisieren",
                onCommand: onCommand,
        });
      } catch (e) {
        return;
      }
    
      let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, "chrome", "icons")); // Pfad zum Profilordner und gleich in den entsprechenden Unterordner
      let ButtonIcon = "sync.svg"; // Name & Dateiendung des anzuzeigenden Symbols!
      let sss = Components.classes[
        "@mozilla.org/content/style-sheet-service;1"
      ].getService(Components.interfaces.nsIStyleSheetService);
      let uri = Services.io.newURI(
        "data:text/css;charset=utf-8," +
          encodeURIComponent(`
     
            #addons-update-button { list-style-image: url("${ProfilePath}/${ButtonIcon}") }
            #addons-update-button.toolbarbutton-1.chromeclass-toolbar-additional image.toolbarbutton-icon {
              width: 28px !important;
              height: 28px !important;
              fill: #ffe10f !important;
              fill-opacity: 1 !important;
              }
     
           `),
        null,
        null
      );
    
      sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
    
      function onCommand(event) {
        event.target.ownerGlobal.openTrustedLinkIn('about:addons', 'tab');
        addEventListener('pageshow', function onPageshow(event) {
          let document = event.target;
          if (document.URL != 'about:addons') return;
          removeEventListener('pageshow', onPageshow);
          document.querySelector('addon-page-options panel-item[action="view-recent-updates"]').click();
          document.querySelector('addon-page-options panel-item[action="check-for-updates"]').click();
          content.setTimeout(function() {
            let categories = document.getElementById('categories');
            categories.querySelector('button[viewid="addons://updates/recent"]').click();
            categories.querySelector('button[viewid="addons://updates/available"]').click();
          }, 1500);
        });
      };
    })();
    Alles anzeigen
  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mira_Belle
    • 11. Januar 2025 um 16:07

    Bei "meinem" Skript hier => RE: Skript für Add-ons Update - Pfad zum Icon ändern

    komme ich gerade auch nicht weiter:!::cursing:
    Jemand eine Idee:?:

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mira_Belle
    • 11. Januar 2025 um 15:45
    Zitat von 2002Andreas

    Noch eins was nicht mehr funktioniert;)

    JavaScript
    (function() {
    
    ...
                   oncommand: '(' + onCommand.toString() + ')()'
    ...
    })();

    Wow, diese Zeile ist 'ne harte Nuss!
    Da weiß ich gerade auch nicht weiter.

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mira_Belle
    • 11. Januar 2025 um 14:22

    milupo Du musst aber Zeilen 15–17 entweder ausklammern oder löschen! (Glaube ich!)

    Wobei ich das Skript auch ganz anders aufgebaut hätte, ist aber egal, nur das Ergebnis zählt.
    (Ich mag base64 nicht! Mich stört, dass der Code, bzw. das "Bild" dann immer nachgeladen werden muss.
    Mir ist es lieber, wenn ich die "Grafik" auf dem Datenträger habe)

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mira_Belle
    • 11. Januar 2025 um 14:04
    Zitat von FuchsFan

    Doch, so auch, danke. Nur der zweite Teil für das Hamburger Menü nicht, ...

    Oh, hatte ich übersehen. Sorry.
    Aber milupo hatte ja die Korrektur geliefert. Danke.

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mira_Belle
    • 11. Januar 2025 um 13:46
    Zitat von 2002Andreas

    Hallo Mira, auch dir herzlichen Dank...funktioniert einwandfrei:):thumbup:

    Gerne doch.
    Und das, obwohl ich von Javascript nicht wirklich Ahnung habe.

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mira_Belle
    • 11. Januar 2025 um 13:12

    FuchsFan Und so funktioniert es nicht?

    JavaScript
    //        RestartFirefoxButtonM.uc.js
    //        v. 0.3 geändert von Mira
    
    (function() {
    
       if (location.href !== 'chrome://browser/content/browser.xhtml')
        return;
        
        try {
            CustomizableUI.createWidget({
                id: 'restart-button2a',
                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: 'restart-button2a',
                        class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                        label: 'Neustart',
                        tooltiptext: 'Neustart (mit Linksklick (0) und Rechtsklick (2) wird der userChrome.js-Cache geleert)',
                        style: 'list-style-image: url(file:///C:/FoxIcons/restart2.png)',
    /*                    onclick:'if (event.button == 1) { \
                                      Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
                                  }; \
                                      if (event.button == 0 || event.button == 2) { \
                                      event.preventDefault(); \
                                      Services.appinfo.invalidateCachesOnRestart(); \
                                      Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
                                  };'
    */                               
                    };  
                                 
                    for (let p in props)
                        toolbaritem.setAttribute(p, props[p]);  
                    
        /* Neu */
                    toolbaritem.addEventListener('click', event => {
                        if (event.button == 1) {
                          Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);
                        }
                    
                        if (event.button == 0 || event.button == 2) {
                          event.preventDefault();
                          Services.appinfo.invalidateCachesOnRestart();
                          Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);
                        }
                      });
        /* Bis hier */
      
                    return toolbaritem;
                }        
            });
        } catch(e) { };        
       
    })();
    
    
    /* Hamburger Menu */
    (function() {
    
    var menuitem = document.createXULElement('toolbarbutton');
    menuitem.id = 'uc_menu_Restart_H';
    menuitem.classList.add('subviewbutton', 'subviewbutton-iconic');
    menuitem.setAttribute('label' , 'Neustart');
    menuitem.setAttribute('tooltiptext' , 'Neustart');
    menuitem.style.listStyleImage= 'url(\'data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="context-fill" fill-opacity="context-fill-opacity" d="M15,1a1,1,0,0,0-1,1V4.418A6.995,6.995,0,1,0,8,15a6.954,6.954,0,0,0,4.95-2.05,1,1,0,0,0-1.414-1.414A5.019,5.019,0,1,1,12.549,6H10a1,1,0,0,0,0,2h5a1,1,0,0,0,1-1V2A1,1,0,0,0,15,1Z"/></svg>\')';
    menuitem.setAttribute('onclick', 'if (event.button == 1) { \
                                      Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
                                  }; \
                                  if (event.button == 0 || 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

    2002Andreas Magst Du mal testen?

    JavaScript
    // ClearCacheButton.uc.js
    // v. 0.2 geändert von Mira
    
    (function() {
    
        /* if (location != AppConstants.BROWSER_CHROME_URL) return; */
     if(location.href != 'chrome://browser/content/browser.xhtml') return;
        try {
           CustomizableUI.createWidget({
              id: 'clearcache-button',
              type: 'custom',
              defaultArea: CustomizableUI.AREA_NAVBAR,
              onBuild: function(aDocument) {
                 var toolbaritem = aDocument.createXULElement('toolbarbutton');
                 var attributes = {
                    id: 'clearcache-button',
                    class: 'toolbarbutton-1',
                    removable: 'true',
                    label: 'Cache leeren',
                    tooltiptext: 'Cache leeren',
                    style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAxhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw%2FeHBhY2tldCBiZWdpbj0i77u%2FIiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8%2BIDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDM0MiwgMjAxMC8wMS8xMC0xODowNjo0MyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpBQzdFNERGRDNCNkYxMUUwQjRDRUVDOEM3Q0YyMDZEMSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpBQzdFNERGRTNCNkYxMUUwQjRDRUVDOEM3Q0YyMDZEMSI%2BIDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkFDN0U0REZCM0I2RjExRTBCNENFRUM4QzdDRjIwNkQxIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkFDN0U0REZDM0I2RjExRTBCNENFRUM4QzdDRjIwNkQxIi8%2BIDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY%2BIDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8%2BKcFfnQAAAuZJREFUeNqkkslv1EgUxr%2FyUm272267O510RCcThS1IhE1Bg9CAWgyZuc8px5FGHIAj4sAdLvwBuXDgDwAklguI5QBCiGWQWEYsEyAKUTrB9JLEbaddLhfVSbghhERJr0ol1fu9V9%2F7iBACP7O07jZ5dXL1IlIJ4wAtuiAXLsF%2BdAObjozB6S%2BDcANyQxDHuHX59l9DmwdO9i1%2BOK79cCmRggDbgjaf4K5WTT8vnFB8%2BvTHAEIMa1bxH56IAzR9Zo3%2FNgwEJos7HN8HEPmlNP1VNwqndcvzqJZFv2XLTkLEzXdj2Vz%2BsfKNtJLMtLpyIFZ2UJ47qxuqJ%2FiyhAUwCxVoVgFhnPBPi2K9A%2FmYENKNQ1Ax3Ak6V4ousyx39ExA9mfLogEmQqjyDV96iRV%2FKmVh5gEIWwdIdaT6RI60Fzp9Xw59f8vGubO%2BMdB%2F7VkTI41ebDY7SGf%2Fx8zb16jPzk7ZPHwlZKK2ppGQxcnf8uS6aj4pBi%2F%2BKPXqh5xyCNLzEvM1C63QwLv5aWwdMGBo1vWokSREVdYAaqrqgoiMoqqPSNweK%2FW0TylGHlpCsGtHBnwkBuNL2DNeAmMxf%2FOieD8TebLldA1AFHJUVv%2FMhdafj6erfT3MTjiBxIJJCBcUumkiYVInwfjyXLTCOzEIXXdiumpBbEhSMeSQBleVDvScC2QqIKp0JRIZEeJ2EzSv0sEtrWMfn89PJlzUv05hlgtedazCRYf17LS8NtTew1BUipS1pMDLYFEMKxtDcIHRg4N%2FFgcKe33fPr8mYk48qdBKYHI7O%2FWhaA46fkxaD2mSUjh210xLKPVpqNUasB0Nb98kHb%2FutdztR1%2BtAnRTn6mOVmsLtYWR9mJk3%2Flv5SZd%2Fnf7TDOHil13389r8e%2F7QKenaaS6v8xltFytNDJ%2Bt1iu1Lqzx7l75zCxewK6pkuVWcavN50o6rhhO3CiMDTSVZspiecYKzTrffLyuUU3b7dZkuCLAAMAxwpPxFIuoXQAAAAASUVORK5CYII%3D)',
    //                oncommand: 'Services.cache2.clear();'
                 };
                 for (var a in attributes)
                    toolbaritem.setAttribute(a, attributes[a]);
    
      /* Neu */
    
                 toolbaritem.addEventListener('command', () => {
                    Services.cache2.clear();
      });
    
      /* Bis hier */
    
                 return toolbaritem;
              }
           });
        } catch(e) { };
     
        var menuitem = document.createXULElement ('menuitem');
        menuitem.id = 'clearcache-item';
        menuitem.setAttribute('label', 'Cache leeren');
        menuitem.setAttribute('oncommand', 'Services.cache2.clear();');
        var separator = document.getElementById('devToolsSeparator');
        separator.parentElement.insertBefore(menuitem, separator);
     
     })();
    Alles anzeigen
  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mira_Belle
    • 11. Januar 2025 um 12:41
    Zitat von FuchsFan
    Zitat von 2002Andreas

    Ansonsten, das betrifft wohl noch weitere Skipte

    Ja, und auch dieses:

    RestartFirefoxButtonM.uc.js

    Ich stelle mal mein geändertes Skript hier ein!
    Könnt ja die Änderungen übernehmen. ;)

    JavaScript
    // Restart_Firefox.uc.js
    // RestartFirefoxButtonM.uc.js
    // v. 0.6
    // Source file https://www.camp-firefox.de/forum/thema/126132/?postID=1093563#post1093563
    
    (function() {
        if (location.href !== 'chrome://browser/content/browser.xhtml') return;
        try {
            CustomizableUI.createWidget({
                id: 'restart-button2a',
                type: 'custom',
                defaultArea: CustomizableUI.AREA_NAVBAR,
                onBuild: function(aDocument) {
                    var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');                
                //    let profilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'))
    //                let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");  // Pfadangabe zum Profilordner
    //                let ButtonIcon = "restart.svg"  // Name & Dateiendung des anzuzeigenden Symbols
                    let props = {
                        id: 'restart-button2a',
                        class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                        label: 'Neustart',
                        tooltiptext: 'Neustart (der userChrome.js-Cache wird geleert)',
                    //    style: 'list-style-image: url("' + profilePath + buttonIcon + '");',
    //                    style: 'list-style-image: url("' + ("file:" + ProfilePath + "/chrome/icons/" + ButtonIcon) +'");',
                /*        onclick: 'if (event.button == 0) { \
                            Services.appinfo.invalidateCachesOnRestart(); \
                            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 (let p in props)
                        toolbaritem.setAttribute(p, props[p]);  
                    
        /* Neu */
                    toolbaritem.addEventListener('click', event => {
                        if (event.button == 1) {
                          Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);
                        }
                    
                        if (event.button == 0 || event.button == 2) {
                          event.preventDefault();
                          Services.appinfo.invalidateCachesOnRestart();
                          Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);
                        }
                      });
        /* Bis hier */
    
                    return toolbaritem;
                }        
            });
        } catch(e) { };
    
        let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); // Pfad zum Profilordner und gleich in den entsprechenden Unterordner
        let ButtonIcon = "restart.svg"; // Name & Dateiendung des anzuzeigenden Symbols!    
        let sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);       
        let uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(`
      
            #restart-button2a { list-style-image: url("${ProfilePath}/${ButtonIcon}") }
            #restart-button2a.toolbarbutton-1.chromeclass-toolbar-additional image.toolbarbutton-icon {
              width: 32px !important;
              height: 32px !important;
              fill: #f60000 !important;
              fill-opacity: 1 !important;
              }
      
           `), null, null);
      
        sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
    
    })();
    Alles anzeigen

    Zu: ClearCacheButton.uc.js

    Ich glaube, da muss nichts geändert werden.

    Ach, nee, klar!
    Aus oncommand: 'Services.cache2.clear();' wird
    toolbaritem.addEventListener('command', () => {
                  Services.cache2.clear();
    });
    Und gehört zwischen Zeile 25 und 26.

  • Die Sozialen Medien zerfallen immer mehr

    • Mira_Belle
    • 11. Januar 2025 um 12:36

    War meinerseits ein kleiner Ausflug in die Geschichte! Sorry.
    Solche Themen sind halt immer etwas schwierig. Deshalb besser tot schweigen. Mh.

  • Die Sozialen Medien zerfallen immer mehr

    • Mira_Belle
    • 10. Januar 2025 um 22:45


    Es gibt da gute Beispiele! Z.B. Polen, die wären an PIS fast zu Grunde gegangen!
    Oder ganz aktuell, Österreich! Wo bei da damit nicht zurechnen ist, dass die Demokratie zerlegt wird.
    Gibt in der aktuellen Lage das System nicht her.
    Aber Ungarn, in Ungarn ist die Demokratie faktisch nicht mehr vorhanden!

    Es ist eben nicht so, dass eine Demokratie so einen Schmutz ertragen kann.

    PS: Auch diesen Beitrag habe ich mit Absicht etwas geändert!

Unterstütze uns!

Jährlich (2025)

94,2 %

94,2% (612,48 von 650 EUR)

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