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

Beiträge von Endor

  • JavaScriptLoader, läuft bei mir nicht!

    • Endor
    • 11. Januar 2026 um 21:57

    Horstmann

    So geht es auch:

    CSS
    	#userChromejs_options > menu[label='Alle UserScripte in ""'] > menupopup > menuitem[checked="true"]{
        background-image: url("..//icons/Sidebar/Gruener-Hacken.png") !important;
    	background-repeat: no-repeat !important;
        background-position: 6px 8px !important;
        background-size: 16px 16px !important; 
    	padding-left: 11px !important;}
    	
    	#userChromejs_options > menu[label='Alle UserScripte in ""'] > menupopup > menuitem:not([checked="true"]){
        background-image: url("..//icons/Sidebar/notchecked.png") !important;
        background-repeat: no-repeat !important;   
        background-position: 6px 9px !important;
        background-size: 16px 16px !important;}
    	
    	#userChromejs_options > menu[label='Alle UserScripte in ""'] > menupopup > menuitem:not([checked="true"])>.menu-text{
    	margin-left: -4px !important;}
    	
    	#userChromejs_options > menu[label='Alle UserScripte in ""'] > menupopup > menuitem[checked="true"]>.menu-text{
    	margin-left: -2px !important;}
    	
    
    	#userChromejs_options > menu[label='Alle UserScripte in ""'] > menupopup > menuitem[checked="true"]>.menu-icon{
        visibility: hidden !important;}
    Alles anzeigen

    Mira_Belle

    bitte diesen mal testen.
    Mfg.
    Endor

  • JavaScriptLoader, läuft bei mir nicht!

    • Endor
    • 11. Januar 2026 um 21:42
    Zitat von Horstmann

    :nth-child ist mEn nicht ganz optimal.

    Ja das stimmt. Darum ging auch mein obiger Code mal wieder nicht.
    Leider ist für dieses popup keine id vergeben worden.

    Mira_Belle
    Habe obigen CSS Code geändert, da du den Separator entfernt hast,
    funktionierte er nicht mehr.
    Bitte teste den nochmals.
    Mfg.
    Endor

  • JavaScriptLoader, läuft bei mir nicht!

    • Endor
    • 11. Januar 2026 um 19:49

    Hallo Mira_Belle .

    Ich habe das hier so gemacht:

    CSS
    #userChromejs_options > menu:nth-child(6) > menupopup:nth-child(4) > menuitem[checked="true"]{
        background-image: url("..//icons/Sidebar/Gruener-Hacken.png") !important;
    	background-repeat: no-repeat !important;
        background-position: 6px 8px !important;
        background-size: 16px 16px !important; 
    	padding-left: 11px !important;}
    	
    	#userChromejs_options > menu:nth-child(6) > menupopup:nth-child(4) > menuitem:not([checked="true"]){
        background-image: url("..//icons/Sidebar/notchecked.png") !important;
        background-repeat: no-repeat !important;   
        background-position: 6px 9px !important;
        background-size: 16px 16px !important;}
    	
    	#userChromejs_options > menu:nth-child(6) > menupopup:nth-child(4) > menuitem:not([checked="true"])>.menu-text{
    	margin-left: -3px !important;}
    	
    	#userChromejs_options > menu:nth-child(6) > menupopup:nth-child(4) > menuitem[checked="true"]>.menu-text{
    	margin-left: -2px !important;}
    	
    	#userChromejs_options > menu:nth-child(6) > menupopup:nth-child(4) > menuitem[checked="true"]>.menu-icon{
        visibility: hidden !important;}
    Alles anzeigen

    So wird nur dieses Popup angesprochen.
    Icons:  

    Da ich Dein Script ja nicht habe, habe dazu das originale Script von alice genommen.
    Daraus sind obige Bezeichnungen.

    Mfg.
    Endor

  • JavaScriptLoader, läuft bei mir nicht!

    • Endor
    • 8. Januar 2026 um 12:37

    milupo.

    Die aktuelle Version von alice müsste passen:

    userChrome.js/135/rebuild_userChrome.uc.js at master · alice0775/userChrome.js
    Contribute to alice0775/userChrome.js development by creating an account on GitHub.
    github.com

    wichtig ist nur auch die passende unserChrome.js Datei:

    userChrome.js/135/userChrome.js at master · alice0775/userChrome.js
    Contribute to alice0775/userChrome.js development by creating an account on GitHub.
    github.com

    nur mit diesen funktioniert es hier.

    Einfache Deutsche Version von rebuild_userChrome.uc.js:

    JavaScript
    // ==UserScript==
    // @name           rebuild_userChrome.uc.js
    // @namespace      http://space.geocities.yahoo.co.jp/gl/alice0775
    // @description    userChrome.js Skriptcache leeren, neues Fenster öffnen und Script Verwaltung.
    // @charset        utf-8
    // @include        main
    // @compatibility  Firefox 135
    // @author         Alice0775
    // @version        2024/12/22 fix Bug 1936336 - Disallow inline event handlers
    // @version        2023/09/07 remove to use nsIScriptableUnicodeConverter
    // @version        2023/06/20 remove Bug 1780695 - Remove Services.jsm
    // @version        2022/04/01 23:00 Convert Components.utils.import to ChromeUtils.import
    // @version        2022/04/01 remove nsIIOService
    // @version        2020/04/25 14:00 prevent close menu when middleclick
    // Date 2019/05/21 08:30 fix 69.0a1 Bug 1534407 - Enable browser.xhtml by default, Bug 1551320 - Replace all CreateElement calls in XUL documents with CreateXULElement
    // @version        2019/04/19 14:00 Fixed 68a1 due to Bug 1519502 - Convert menu bindings to a Custom Element
    // @version        2018/04/14 00:00 de XUL
    // @version        2017/11/23 23:00 Services :(
    // @version        2017/11/14 21:00 use nsIFile instead nsILocalFile
    // @version        2017/11/14 21:00 use Services.jsm
    // @version        2016/11/28 21:00 remove "for each"
    // @version        2015/12/04 24:00 Bug 1177310 [e10s] Stop using CPOWs on application shutdow
    // @version        2013/03/20 24:00 force cancel default right click action for unknown modification
    // @version        2013/03/22 08:02 Added "use strict"
    // @version        2013/03/22 08:01 Fixed commands to work properly, even if menus had been moved into other place
    // @version        2013/03/22 08:00 Fixed dragdrop target
    // @version        2013/03/20 24:00 autocheck=false for script menu
    // @version        2012/11/30 22:00 ubuntu12.04.1 "chromeフォルダを開く" に失敗することがあるのを修正
    // ==/UserScript==
    // @version        2012/09/30 09:00 ubuntu12.04.1 "chromeフォルダを開く" に失敗することがあるのを修正
    // @version        2012/02/25 23:00 restart
    // @version        2010/10/25 22:00 Bug 574688 adon bar
    // @version        2010/07/04 00:00 nsDragAndDrop
    // @version        2009/11/14 00:00 Seamonkeyに対応
    // @version        2009/08/24 00:00 Namoroka3.6a2pre で右クリックでのスクリプト編集時にコンテキストメニューが表示されるのを修正
    // @version        2009/04/10 00:00 Minefield3.6a1pre での動作改善
    // @version        2009/03/27 00:00 nsIProcess変更
    // @version        2008/02/25 00:00 reuseのデフォルト値trueに変更
    // @version        2008/01/09 02:00 スクリプト保存ファイルピッカーをキャンセル時のエラー処理追加
    // @version        2008/01/04 16:00 スクリプトのドロップをstatusbar-display上に変更
    // @version        2007/12/15 18:00 base64データスキームの保存に対応
    // @version        2007/12/15 02:00 ttp://の保存に対応
    // @version        2007/12/15 01:00 メニューが表示されない場合があるのを修正
    // @version        2007/12/14 23:00 saveFolderModokiがある時スクリプトのリンクをステータスバーの左1/3にドロップすることで, chrmeホルダに保存するようにした
    // @version        2007/12/14 19:00 日本語のファイル名のスクリプトの有効/無効が機能していなかったのを修正
    // @version        2007/12/14 17:00 スクリプトの有効/無効/編集を設定できるようにした
    // @Note           使用するエディタを編集しておくこと
    // @Note           Required Sub-Script/Overlay Loader v3.0.38mod( https://github.com/alice0775/userChrome.js/blob/master/userChrome.js )
    
    
      var userChromejs = {
    // --- config ---
        editor: (AppConstants.platform == "win") 
                 ? "C:\\Program Files\\Notepad++\\notepad++.exe"
                 : ((AppConstants.platform == "linux")
                   ?"/usr/bin/gedit" /*"/usr/bin/xed"*/
                   : ""),
    // --- config ---
        _statusDisplay: null,
    
        get statusDisplay() {
          if (!this._statusDisplay)
            this._statusDisplay = document.getElementById('status-bar') ||
                                  document.getElementById('statusbar-display');
          return this._statusDisplay;
        },
    
        _addonbar: null,
        get addonbar() {
          if (!this._addonbar)
            this._addonbar = document.getElementById('addon-bar');
          return this._addonbar;
        },
    
        handleEvent: function(event) {
          switch(event.type) {
            case 'dragover':
              this.dragover(event);
              break;
            case 'drop':
              this.drop(event);
              break;
            case 'unload':
              this.uninit();
              break;
          }
        },
    
        createElement: function(localName, arryAttribute) {
          let elm = document.createXULElement(localName);
          for(let i = 0; i < arryAttribute.length; i++) {
            elm.setAttribute(arryAttribute[i].attr, arryAttribute[i].value);
          }
          return elm;
        },
    
        init: function(){
          window.addEventListener("unload",this , false);
    
          let ref = document.getElementById("menu_preferences");
          let menu = ref.parentNode.insertBefore(
            this.createElement("menu",
              [{attr: "id", value:"userChrome.js_menu"},
               {attr: "label", value:"userChrome.js Einstellungen"},
               {attr: "accesskey", value:"u"}
              ]), ref);
          let popup = menu.appendChild(this.createElement("menupopup",
            [{attr: "id", value:"userChromejs_options"},
             /*{attr: "onpopupshowing", value:"userChromejs.onpopup()"},*/
             {attr: "context", value:""}
            ]));
          popup.appendChild(this.createElement("menuitem",
            [{attr: "id", value:"userChrome_setting"},
             {attr: "label", value:"Skript für jedes Fenster neuladen"},
             {attr: "accesskey", value:"u"},
             /*{attr: "oncommand", value:"userChromejs.setting();"},*/
             {attr: "type", value:"checkbox"}
            ]));
          popup.appendChild(this.createElement("menuitem",
            [{attr: "id", value:"userChrome_rebuild"},
             {attr: "label", value:"userChrome.js/Neues Fenster neu erstellen"},
             {attr: "accesskey", value:"x"},
             /*{attr: "oncommand", value:"userChromejs.rebuild();"}*/
            ]));
          popup.appendChild(this.createElement("menuitem",
            [{attr: "id", value:"userChrome_restartApp"},
             {attr: "label", value:"Browser neustarten"},
             {attr: "accesskey", value:"r"},
             /*{attr: "oncommand", value:"userChromejs.restartApp();"}*/
            ]));
          popup.appendChild(this.createElement("menuitem",
            [{attr: "id", value:"userChrome_openChrome"},
             {attr: "label", value:"chrome Ordner öffnen"},
             {attr: "accesskey", value:"h"},
             /*{attr: "oncommand", value:'new Components.Constructor("@mozilla.org/file/local;1","nsIFile", "initWithPath")(Services.dirsvc.get("UChrm", Components.interfaces.nsIFile).path).reveal();'}*/
            ]));
    
          menu = ref.parentNode.insertBefore(
            this.createElement("menu",
              [{attr: "id", value:"userChromejs_script_options_Menu"},
               {attr: "label", value:"userChrome.js Scripte"},
               {attr: "accesskey", value:"s"}
              ]), ref);
          popup = menu.appendChild(this.createElement("menupopup",
            [{attr: "id", value:"userChromejs_script_options"}
            ]));
    
    
          document.getElementById('userChrome_setting').addEventListener("command", () => userChromejs.setting());
          document.getElementById('userChrome_rebuild').addEventListener("command", () => userChromejs.rebuild());
          document.getElementById('userChrome_restartApp').addEventListener("command", () => userChromejs.restartApp());
          document.getElementById('userChrome_openChrome').addEventListener("command", () => {new Components.Constructor("@mozilla.org/file/local;1","nsIFile", "initWithPath")(Services.dirsvc.get("UChrm", Components.interfaces.nsIFile).path).reveal()});
    
          if (AppConstants.platform == "linux")
            userChromejs.onpopup();
    
    
          if ("nsDragAndDrop" in window && this.statusDisplay) {
            this.statusDisplay.addEventListener('dragover',function(event){nsDragAndDrop.dragOver(event,userChromejs.dndObserver);},true);
            this.statusDisplay.addEventListener('dragdrop',function(event){nsDragAndDrop.drop(event,userChromejs.dndObserver);},true);
          } else if(this.addonbar) {
            this.addonbar.addEventListener('dragover', this ,true);
            this.addonbar.addEventListener('drop', this ,true);
          }
          this.addPrefListener(userChromejs.readLaterPrefListener); // 登録処理
          document.getElementById("menu_ToolsPopup").addEventListener("popupshowing", function(event) {if (event.target == this) userChromejs.onpopup(event);}, false);
        },
        uninit: function(){
          if ("nsDragAndDrop" in window && this.statusDisplay) {
            this.statusDisplay.removeEventListener('dragover',function(event){nsDragAndDrop.dragOver(event,userChromejs.dndObserver);},true);
            this.statusDisplay.removeEventListener('dragdrop',function(event){nsDragAndDrop.drop(event,userChromejs.dndObserver);},true);
          } else if(this.addonbar) {
            this.addonbar.removeEventListener('dragover', this ,true);
            this.addonbar.removeEventListener('drop', this ,true);
          }
          this.removePrefListener(userChromejs.readLaterPrefListener); // 登録解除
        },
    
        dragover: function(event) {
          var dragService = Cc["@mozilla.org/widget/dragservice;1"]
                            .getService(Ci.nsIDragService);
          var dragSession = dragService.getCurrentSession();
          var supportedTypes = ["text/x-moz-url", "text/unicode", "application/x-moz-file"];
          for (let type of supportedTypes) {
            if (event.dataTransfer.types.contains(type)) {
              var data = event.dataTransfer.getData(type);
              var url = (/^\s*(.*?)\s*$/m.test(data))
                         ? RegExp.$1 : null;
              if (/(\.uc\.js|\.uc\.xul|\.uc\.xul\.txt)$/.test(url)) {
                dragSession.canDrop = true;
                event.preventDefault();
                return;
              }
            }
          }
        },
    
        drop: function(event) {
          var dragService = Cc["@mozilla.org/widget/dragservice;1"]
                            .getService(Ci.nsIDragService);
          var dragSession = dragService.getCurrentSession();
          var supportedTypes = ["text/x-moz-url", "text/unicode", "application/x-moz-file"];
          for (let type of supportedTypes) {
            if (event.dataTransfer.types.contains(type)) {
              var data = event.dataTransfer.getData(type);
              this.dndObserver.onDrop(event, {data: data}, dragSession);
              return;
            }
          }
        },
    
        dragDropSecurityCheck: function dragDropSecurityCheck(event, dragSession, url) {
          if (!url)
            return false;
    
          // need to do a security check to make
          // sure the source document can load the dropped URI.
          url = url.replace(/^\s*|\s*$/g, '');
    
          if (url.indexOf('chrome://') == 0 || url.indexOf('file://') == 0)
            return url;
    
          // urlSecurityCheck
          try {
            urlSecurityCheck(url, gBrowser.contentPrincipal, Ci.nsIScriptSecurityManager.DISALLOW_INHERIT_PRINCIPAL);
          }
          catch(e) {
            event.stopPropagation();
            //throw 'Drop of ' + url + ' denied.';
            return false;
          }
          return url;
        },
    
        dndObserver: {
          getSupportedFlavours : function () {
            var flavours = new FlavourSet();
            flavours.appendFlavour("text/x-moz-url");
            flavours.appendFlavour("text/unicode");
            flavours.appendFlavour("application/x-moz-file");
            return flavours;
          },
          onDragOver: function (evt,flavour,session){},
          onDrop: function (evt,dropdata,session){
            var fname;
            evt.stopPropagation();
            evt.preventDefault();
            if (dropdata.data!=""){
              //ステータスバーの左1/3にドロップしたか
              var target = evt.target;
              while(target){
                if(target == userChromejs.statusDisplay ||
                   target == userChromejs.addonbar)
                  break;
                target = target.parentNode;
              }
              if(!target) return;
              if(evt.screenX > target.boxObject.screenX + target.boxObject.width/3) return;
    
              //saveFolderModokiが必要
              if(!saveFolderModoki) return;
              //ドロップしたurl
              var url = (/^\s*(.*?)\s*$/m.test(dropdata.data))?RegExp.$1:null;
              //保存ホルダ nsIFile
              var folder = Services.dirsvc.get("UChrm", Components.interfaces.nsIFile);
              //デフォルトのファイル名
              if(/(.*)\n?(.*)?/m.test(dropdata.data) )
                fname = RegExp.$2?RegExp.$2:"";
              //データスキームか
              if(/(^data:text\/javascript(;.*)?,?)|(^data:application\/x-javascript(;.*)?,?)/.test(url)){
                // urlSecurityCheck は saveFolderModoki.directSaveLinkで実施している
                saveScript(url, fname, folder);
              }else{
                //リンクか
                if(!/(^h?ttps?:\/\/)|(^ftp:\/\/)/.test(url)) return;
                if (/^h?.?.p(s?):(.+)$/i.test(url)){
                  url = "http" + RegExp.$1 + ':' + RegExp.$2;
                  if(!RegExp.$2) return null;
                  fname = url.match(/.+\/(.+)$/)[1];
                }
                fname = fname.replace(/\.uc\.xul\.txt$/,'.uc.xul');
                //スクリプトファイルか?
                if(/(\.uc\.js|\.uc\.xul|\.uc\.xul\.txt)$/.test(url)){
                  if (typeof gBrowser.dragDropSecurityCheck == 'function')
                    gBrowser.dragDropSecurityCheck(evt, session, url);
                  else {
                    userChromejs.dragDropSecurityCheck(evt, session, url)
                  }
                  saveScript(url, fname, folder);
                }
              }
            }
            function saveScript(url, fname, folder){
              //ファイルピッカによりnsIFile決定
              var aFile = getFolderPath(fname, folder)
              if(!aFile) return;
              //フォルダパス
              folder = aFile.path.replace(aFile.leafName,'');
              //nsILocalFileのフォルダ
              var aFolder = saveFolderModoki.initFileWithPath(folder);
              if(!aFolder) return;
              //リンクを保存
              saveFolderModoki.directSaveLink(null, url, aFile.leafName, gBrowser.currentURI, aFolder);
            }
            function getFolderPath(fname, folder){
              //ファイルピッカにより保存先決定
              var fp = Components.classes['@mozilla.org/filepicker;1']
                        .createInstance(Components.interfaces.nsIFilePicker);
                fp.init(window, "Save script As", fp.modeSave);
                fp.appendFilter("Script Files","*.uc.js; *.uc.xul");
              if(/\.uc\.js$/.test(fname)){
                fp.defaultExtension = "uc.js";
                fp.defaultString = fname;
              }else if(/\.uc\.xul$/.test(fname)){
                fp.defaultExtension = "uc.xul";
                fp.defaultString = fname;
              }else{
                fp.defaultExtension = "uc.js";
                fp.defaultString = fname + ".uc.js";
              }
              fp.displayDirectory = folder;
              if ( fp.show() == fp.returnCancel || !fp.file ) return;
              //nsIFile
              return fp.file;
            }
          }
        },
    
        rebuild: function(){
          var flag = this.getPref("userChrome.enable.reuse",'bool',true);
          this.setPref("userChrome.enable.reuse",'bool',false);
          setTimeout(function(){OpenBrowserWindow();},  0);
          setTimeout(function(self,flag){self.setPref("userChrome.enable.reuse",'bool',flag);},2000,this,flag);
        },
        setting: function(){
          var flag = this.getPref("userChrome.enable.reuse",'bool',true);
          this.setPref("userChrome.enable.reuse",'bool',!flag);
        },
        onpopup: function(event){
          var menu;
          var flag = this.getPref("userChrome.enable.reuse",'bool',true);
          var menuitem = document.getElementById('userChrome_setting');
          menuitem.setAttribute('checked', !flag);
    
          var menupopup = document.getElementById("userChromejs_options");
          for(var i = 4, len = menupopup.childNodes.length; i < len; i++){
            menupopup.removeChild(menupopup.lastChild);
          }
    
          var menuseparator = document.createXULElement('menuseparator');
          menupopup.appendChild(menuseparator);
    
          menuitem = document.createXULElement('menuitem');
          menuitem.setAttribute('label','userCrome.js Aktivieren/Deaktivieren');
          //menuitem.setAttribute('oncommand','userChromejs.chgDirStat("*");');
          //menuitem.setAttribute('onclick','userChromejs.clickDirMenuitem(event,true);');
          menuitem.setAttribute('type','checkbox');
          menuitem.setAttribute('checked', !userChrome_js.dirDisable['*']);
          menuitem.dirName = '*';
          menupopup.appendChild(menuitem);
          menuitem.addEventListener('command', () => userChromejs.chgDirStat("*"));
          menuitem.addEventListener('click', (event) => userChromejs.clickDirMenuitem(event,true));
    
          for(var j = 0, lenj = userChrome_js.arrSubdir.length; j < lenj; j++){
            var dirName = userChrome_js.arrSubdir[j] == "" ? "root" : userChrome_js.arrSubdir[j];
            var flg = false;
            for(var i = 0, len = userChrome_js.scripts.length; i < len; i++){
              var script = userChrome_js.scripts[i];
              if(script.dir != dirName) continue;
              flg = true;
              break;
            }
            if(!flg){
              for(var i = 0, len = userChrome_js.overlays.length; i < len; i++){
                var script = userChrome_js.overlays[i];
                if(script.dir != dirName) continue;
                flg = true;
                break;
              }
            }
            if(!flg) continue;
    
    
            menu = document.createXULElement('menu');
            menu.setAttribute('label','chrome/' + (dirName=="root"?"":dirName) );
            menu.addEventListener('click', (event) => userChromejs.clickDirMenu(event));
            //menu.setAttribute('onclick','userChromejs.clickDirMenu(event);');
            if(userChrome_js.dirDisable[dirName])
              menu.setAttribute('style', 'font-style:italic;');
            menu.dirName = dirName;
    
            menupopup = document.createXULElement('menupopup');
            //menupopup.setAttribute('onpopupshowing','event.stopPropagation();');
    
            menuitem = document.createXULElement('menuitem');
            menuitem.setAttribute('label','chrome/' + (dirName=="root"?"":dirName) + ' Aktivieren/Deaktivieren  Scripte Chromeordner');
            //menuitem.setAttribute('oncommand', 'userChromejs.chgDirStat(this.dirName);');
            //menuitem.setAttribute('onclick','userChromejs.clickDirMenuitem(event);');
            menuitem.setAttribute('type', 'checkbox');
            menuitem.setAttribute('checked', !userChrome_js.dirDisable[dirName]);
            menuitem.dirName = dirName;
            menupopup.appendChild(menuitem);
            menuitem.addEventListener('command', () => userChromejs.chgDirStat(this.dirName));
            menuitem.addEventListener('click', (event) => userChromejs.clickDirMenuitem(event));
    
            menuseparator = document.createXULElement('menuseparator');
            menupopup.appendChild(menuseparator);
    
            var flg = false;
            for(var i = 0, len = userChrome_js.scripts.length; i < len; i++){
              var script = userChrome_js.scripts[i];
              if(script.dir != dirName) continue;
                flg = true;
                menuitem = document.createXULElement('menuitem');
                menuitem.setAttribute('label',script.filename);
                //menuitem.setAttribute('oncommand','userChromejs.chgScriptStat(this.script.filename);');
                //menuitem.setAttribute('onclick','userChromejs.clickScriptMenu(event);');
                //menuitem.setAttribute('onmouseup','if(event.button == 1) event.preventDefault();');
                menuitem.setAttribute('type','checkbox');
                menuitem.setAttribute('autocheck','false');
                menuitem.setAttribute('checked',!userChrome_js.scriptDisable[script.filename] );
                if(script.description)
                  menuitem.setAttribute('tooltiptext',script.description);
                menuitem.script = script;
                menupopup.appendChild(menuitem);
                menuitem.addEventListener('command', () => userChromejs.chgScriptStat(this.script.filename));
                menuitem.addEventListener('click', (event) => userChromejs.clickScriptMenu(event));
                menuitem.addEventListener('mouseup', (event) => {if(event.button == 1) event.preventDefault()});
            }
            for(var i = 0, len = userChrome_js.overlays.length; i < len; i++){
              var script = userChrome_js.overlays[i];
              if(script.dir != dirName) continue;
                if(flg){
                  menuseparator = document.createXULElement('menuseparator');
                  menupopup.appendChild(menuseparator);
                }
                flg = false;
                menuitem = document.createXULElement('menuitem');
                menuitem.setAttribute('label',script.filename);
                //menuitem.setAttribute('oncommand','userChromejs.chgScriptStat(this.script.filename);');
                //menuitem.setAttribute('onclick','userChromejs.clickScriptMenu(event);');
                //menuitem.setAttribute('onmouseup','if(event.button == 1) event.preventDefault();');
                menuitem.setAttribute('type','checkbox');
                menuitem.setAttribute('autocheck','false');
                menuitem.setAttribute('checked',!userChrome_js.scriptDisable[script.filename] );
                if(script.description)
                  menuitem.setAttribute('tooltiptext',script.description);
                menuitem.script = script;
                menupopup.appendChild(menuitem);
                menuitem.addEventListener('command', () => userChromejs.chgScriptStat(this.script.filename));
                menuitem.addEventListener('click', (event) => userChromejs.clickScriptMenu(event));
                menuitem.addEventListener('mouseup', (event) => {if(event.button == 1) event.preventDefault()});
            }
            menu.appendChild(menupopup);
            menupopup = document.getElementById("userChromejs_options");
            menupopup.appendChild(menu);
          }
        },
    
        clickDirMenu: function(event){
          if(event.button == 1 || event.button == 2){
            event.stopPropagation();
            event.preventDefault();
            userChromejs.chgDirStat(event.target.dirName);
            if(event.target.firstChild && event.target.firstChild.firstChild)
              event.target.firstChild.firstChild.setAttribute('checked',!userChrome_js.dirDisable[event.target.dirName] );
            if(!!userChrome_js.dirDisable[event.target.dirName])
              event.target.setAttribute('style', 'font-style:italic;');
            else
              event.target.removeAttribute('style');
          }
        },
    
        clickDirMenuitem: function(event,stop){
          if(event.button == 1 || event.button == 2){
            event.stopPropagation();
            event.preventDefault();
            userChromejs.chgDirStat(event.target.dirName);
            event.target.setAttribute('checked',!userChrome_js.dirDisable[event.target.dirName] );
            if(!stop && !!userChrome_js.dirDisable[event.target.dirName])
              event.target.parentNode.parentNode.setAttribute('style', 'font-style:italic;');
            else
              event.target.parentNode.parentNode.removeAttribute('style');
          }
        },
    
        clickScriptMenu: function(event){
          if(event.button==1){
            event.stopPropagation();
            event.preventDefault();
            userChromejs.chgScriptStat(event.target.script.filename);
            event.target.setAttribute('checked',!userChrome_js.scriptDisable[event.target.script.filename] );
          }else if(event.button==2){
            event.stopPropagation();
            event.preventDefault();
            this.launchEditor(event.target.script);
          }
        },
    
        launchEditor: function(aScript){
          var editor = this.editor;
          var path = Services.io.newURI(aScript.url)
                     .QueryInterface(Ci.nsIFileURL).file.path;
    
          var appfile = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsIFile);
          appfile.initWithPath(editor);
          var process = Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess);
          process.init(appfile);
          process.runw(false, [path], 1, {});
        },
    
        chgDirStat: function(adirName){
          var s = userChromejs.getPref("userChrome.disable.directory", "str", "");
          if(!userChrome_js.dirDisable[adirName]){
            s = (s+',').replace(adirName+',','') + adirName+',';
          }else{
            s = (s+',').replace(adirName+',','');
          }
          s = s.replace(/,,/g,',').replace(/^,/,'');
          userChromejs.setPref("userChrome.disable.directory", "str", s);
          userChrome_js.dirDisable = this.restoreState(s.split(','));
        },
    
        chgScriptStat: function(afilename){
          var s = userChromejs.getPref("userChrome.disable.script", "str", "");
          if(!userChrome_js.scriptDisable[afilename]){
            s = (s+',').replace(afilename+',','') + afilename+',';
          }else{
            s = (s+',').replace(afilename+',','');
          }
          s = s.replace(/,,/g,',').replace(/^,/,'');
          userChromejs.setPref("userChrome.disable.script", "str", s);
          userChrome_js.scriptDisable = this.restoreState(s.split(','));
        },
    
        restoreState: function (arr){
          var disable = [];
          for(var i = 0,len = arr.length; i < len; i++)
            disable[arr[i]] = true;
          return disable;
        },
    
    
        //prefを読み込み
        getPref: function(aPrefString, aPrefType, aDefault){
          var xpPref = Services.prefs;
          try {
            switch (aPrefType){
              case 'complex':
                return xpPref.getComplexValue(aPrefString, Components.interfaces.nsIFile); break;
              case 'str':
                return unescape(xpPref.getCharPref(aPrefString).toString()); break;
              case 'int':
                return xpPref.getIntPref(aPrefString); break;
              case 'bool':
              default:
                return xpPref.getBoolPref(aPrefString); break;
            }
            } catch(e) {}
          return aDefault;
        },
        //prefを書き込み
        setPref: function(aPrefString, aPrefType, aValue){
          var xpPref = Services.prefs;
          try {
            switch (aPrefType){
              case 'complex':
                return xpPref.setComplexValue(aPrefString, Components.interfaces.nsIFile, aValue); break;
              case 'str':
                return xpPref.setCharPref(aPrefString, escape(aValue)); break;
              case 'int':
                aValue = parseInt(aValue);
                return xpPref.setIntPref(aPrefString, aValue);  break;
              case 'bool':
              default:
                return xpPref.setBoolPref(aPrefString, aValue); break;
            }
            } catch(e) {}
          return null;
        },
        // 監視を開始する
        addPrefListener: function(aObserver) {
            try {
                var pbi = Services.prefs;
                pbi.addObserver(aObserver.domain, aObserver, false);
            } catch(e) {}
        },
    
        // 監視を終了する
        removePrefListener: function(aObserver) {
            try {
                var pbi =  Services.prefs;
                pbi.removeObserver(aObserver.domain, aObserver);
            } catch(e) {}
        },
    
        readLaterPrefListener:{
            domain  : 'userChrome.disable',
                //"userChrome.disable"という名前の設定が変更された場合全てで処理を行う
    
            observe : function(aSubject, aTopic, aPrefstring) {
                if (aTopic == 'nsPref:changed') {
                    // 設定が変更された時の処理
                    setTimeout(function(){
                      var s = userChromejs.getPref("userChrome.disable.directory", "str", "");
                      userChrome_js.dirDisable = userChromejs.restoreState(s.split(','));
                      s = userChromejs.getPref("userChrome.disable.script", "str", "");
                      userChrome_js.scriptDisable = userChromejs.restoreState(s.split(','));
                    }, 0);
                }
            }
        },
    
        restartApp: function() {
          if ("BrowserUtils" in window && typeof BrowserUtils.restartApplication == "function") {
            Components.classes["@mozilla.org/xre/app-info;1"]
                      .getService(Components.interfaces.nsIXULRuntime).invalidateCachesOnRestart();
            BrowserUtils.restartApplication();
            return;
          }
    
          const appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"]
                            .getService(Components.interfaces.nsIAppStartup);
    
          // Notify all windows that an application quit has been requested.
          var os = Components.classes["@mozilla.org/observer-service;1"]
                             .getService(Components.interfaces.nsIObserverService);
          var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"]
                                     .createInstance(Components.interfaces.nsISupportsPRBool);
          os.notifyObservers(cancelQuit, "quit-application-requested", null);
    
          // Something aborted the quit process.
          if (cancelQuit.data)
            return;
    
          // Notify all windows that an application quit has been granted.
          os.notifyObservers(null, "quit-application-granted", null);
    
          // Enumerate all windows and call shutdown handlers
          var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                             .getService(Components.interfaces.nsIWindowMediator);
          var windows = wm.getEnumerator(null);
          var win;
          while (windows.hasMoreElements()) {
            win = windows.getNext();
            if (("tryToClose" in win) && !win.tryToClose())
              return;
          }
          let XRE = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime);
          if (typeof XRE.invalidateCachesOnRestart == "function")
            XRE.invalidateCachesOnRestart();
          appStartup.quit(appStartup.eRestart | appStartup.eAttemptQuit);
        }
      }
      userChromejs.init();
    
      //メニューが長くなりすぎるので, あまり使わないメニューを"userChrome.jsの各スクリプトの設定"の下に移動させる
      var userChromejsScriptOptionsMenu = {
        //あまり使わないメニューのリスト
        menues: [
          "GrabScroll_optionsMenu",
          "Patch_XULrubySupportMenu",
          "menutabTooltip",
          "PipeliningToggle",
          "linkInNewTabForSpecifiedPageToolMenu",
          "ieviewModokiTool",
          "linkloadInBackgroundToolMenu",
          "SaveFolderToolsMenu",
          "ucjs_copysysinfo-menu"
        ],
    
        interval: 500, //0.5秒間隔
        maxcount: 50,   //最大50回までトライ
        count: 0,
        timer: null,
    
        run: function() {
          //DOMの構築が完了するのを待ってからメニューを移動させる(5秒間隔で最大50回までトライ)
          this.timer = setInterval(function(self){
            if (++self.count > self.maxcount || self.moveMenu())
              clearInterval(self.timer);
          }, this.interval, this);
        },
    
        moveMenu: function(){
          var menupopup = document.getElementById('userChromejs_script_options');
          if (!menupopup)
            return false;
          var i = 0;
          while (i < this.menues.length) {
            var menu = document.getElementById(this.menues[i])
            if (menu) {
              setTimeout(function(menupopup, menu){menupopup.appendChild(menu);}, 100, menupopup, menu);
              this.menues.splice(i, 1);
              continue;
            }
            i++;
          }
          return this.menues.length == 0 ? true : false;
        },
      }
      userChromejsScriptOptionsMenu.run();
    Alles anzeigen

    Das Script fügt zwei Einträge unter Extras in der Menüleiste ein.

    Mfg.
    Endor

  • JavaScriptLoader, läuft bei mir nicht!

    • Endor
    • 7. Januar 2026 um 21:26

    Gerne.
    Falls Du das rebuild_userChrome.uc.js Script von Alice nochmals testen willst
    das wäre die aktuellste Version und setzt aber eben die oben erwähnte Datei voraus:

    userChrome.js/135/rebuild_userChrome.uc.js at master · alice0775/userChrome.js
    Contribute to alice0775/userChrome.js development by creating an account on GitHub.
    github.com

    Mfg.
    Endor

  • JavaScriptLoader, läuft bei mir nicht!

    • Endor
    • 7. Januar 2026 um 20:30

    Hallo Mira_Belle .
    Du musst wahrscheinlich anstelle unserer userchrome.js Datei im Chromeordner,
    die von alice verwenden, unsere enthält ja nur den zweizeiler, die von alice
    hat da einiges mehr, Subscriptloader usw.

    userChrome.js/141/userChrome.js at master · alice0775/userChrome.js
    Contribute to alice0775/userChrome.js development by creating an account on GitHub.
    github.com

    Mfg.
    Endor

  • Was hört Ihr gerade?

    • Endor
    • 30. Dezember 2025 um 14:53

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

  • Sidebar für FF 146 - Erster Versuch

    • Endor
    • 30. Dezember 2025 um 12:46

    Horstmann

    Sidebar Script von Alice siehe hier:

    userChrome.js/142/SidebarModoki.uc.js at master · alice0775/userChrome.js
    Contribute to alice0775/userChrome.js development by creating an account on GitHub.
    github.com

    Das ist die neueste Version.

    Das Script aus #11
    funktioniert hier einwandfrei.
    juras
    Vielen Dank dafür.

    Mfg.
    Endor

  • TabKontextMenü im Nightly

    • Endor
    • 28. Dezember 2025 um 16:35

    Meine Version in #10 ist die originale und aktuelle vom Autor alice0775,
    nur auf Deutsch übersetzt.
    Quelle:

    userChrome.js/140/UndoListInTabmenuToo.uc.js at master · alice0775/userChrome.js
    Contribute to alice0775/userChrome.js development by creating an account on GitHub.
    github.com

    Mfg.
    Endor

  • Das Security-Märchen

    • Endor
    • 28. Dezember 2025 um 16:31

    Es gibt mittlerweile Version 8.9
    Download Notepad++ v8.9: security enhancements | Notepad++

    Mfg.
    Endor

  • TabKontextMenü im Nightly

    • Endor
    • 28. Dezember 2025 um 10:33

    Hallo 2002Andreas.
    Das Script tut noch mehr, dies ist nur eine Funktion davon.

    Im Tabkontextmenü werden die Untermenüs zum öffnen der zuletzt geschlossenen Tabs und Fenster eingefügt.
    Und eben auch der obige Eintrag.
    Einen schönen Sonntag und eine tolle Woche wünsche ich Dir.
    Mfg.
    Endor

  • TabKontextMenü im Nightly

    • Endor
    • 28. Dezember 2025 um 10:28

    Der Eintrag Alle Tabs auflisten kommt von diesem Script:

    JavaScript
    // ==UserScript==
    // @name           UndoListInTabmenuToo
    // @namespace      http://space.geocities.yahoo.co.jp/gl/alice0775
    // @description    UndoListInTabmenuToo.uc.js
    // @include        main
    // @compatibility  Firefox 140
    // @author         Alice0775
    // @version        2025/09/05 mark '*' for current index in the tooltip
    // @version        2025/08/06 fix tooltip bug due to the change of 25/01/05
    // @version        2025/07/26 add List All Tabs menu
    // @version        2025/01/05 remove redundant menuitems
    // @version        2025/01/05 fix bug
    // @version        2024/12/22 fix Bug 1936336 - Disallow inline event handlers
    // @version        2024/08/23 Bug 1690613 - Allow access to url/title/favIconUrl without "tabs" permission in session API
    // @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 : true , //Im Tabkontextmenü: anzeigen: true, nicht anzeigen: false
      CONTEXTMENU    : true,  //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(){
    
        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");
        }
        // get closed-tabs from nsSessionStore
        this._ss = SessionStore;
    
      },
    
      makePopup: function(popup, refItem, id){
        var menu;
        //label
        const locale = "de";
        
        // "Recently Closed Windows"
        menu = document.createXULElement("menu");
        menu.setAttribute("id", "historyUndoWindowMenu3");
        menu.setAttribute("label", "K\u00FCrzlich geschlossene Fenster");
        menu.setAttribute("accesskey", "F");
        menu.setAttribute("disabled", "false");
        popup.insertBefore(menu, refItem);
    
        menupopup = document.createXULElement("menupopup");
        menu.appendChild(menupopup);
        menupopup.setAttribute("id", "historyUndoWindowPopup3");
        //menu.setAttribute("onpopupshowing", "UndoListInTabmenu.populateUndoWindowSubmenu(this);");
        menupopup.addEventListener("popupshowing", (event) => UndoListInTabmenu.populateUndoWindowSubmenu(event.currentTarget));
    
        //Liste kürzlich geschossener Tabs
        const LABELTEXT = "K\u00FCrzlich geschlossene Tabs";    //create menu
        menu = document.createXULElement("menu");
        menu.setAttribute("label", LABELTEXT);
        menu.setAttribute("accesskey", "T");
        if (id)
          menu.setAttribute("id", id);
        //menu.setAttribute("disabled", true);
        var menupopup = document.createXULElement("menupopup");
        menupopup.addEventListener("popupshowing", () => UndoListInTabmenu.populateUndoSubmenu(menupopup));
        //menupopup.setAttribute("onpopupshowing", "UndoListInTabmenu.populateUndoSubmenu(this);");
        menu.appendChild(menupopup);
        popup.insertBefore(menu, refItem);
    
        //All tabs menu
        menu = document.createXULElement("menuitem");
        menu.setAttribute("label", "Alle Tabs auflisten");
        menu.setAttribute("accesskey", "A");
        popup.insertBefore(menu, refItem);
        menu.addEventListener("command", (event) => {document.getElementById("alltabs-button").click()})
    
    
        //add event listener
        popup.addEventListener('popupshowing',function(event) {
          UndoListInTabmenu.toggleRecentlyClosedWindows(document.getElementById("historyUndoWindowMenu3"));
          // no restorable tabs, so make sure menu is disabled, and return
          if (UndoListInTabmenu._ss.getClosedTabCount(window) == 0) {
            menu.setAttribute("disabled", true);
            //menu.setAttribute("hidden", true);
            return;
          }
          menu.removeAttribute("disabled");
          //menu.setAttribute("hidden", false);
        },false);
      },
    
      /**
       * Populate when the history menu is opened (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);
    
        // 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";
            if (undoItems[i].state.index - 1 !== j) {
              tooltiptext += parseInt(j + 1, 10) + ". " + entries[j].title;
            } else {
              tooltiptext += "*" + ". " + entries[j].title;
            }
          }
          undoPopup.childNodes[i].setAttribute("tooltiptext", tooltiptext);
        }
    
        // "Append Clear undo close tb list"
        undoPopup.appendChild(document.createXULElement("menuseparator"));
    
        let m = undoPopup.appendChild(document.createXULElement("menuitem"));
        m.setAttribute("label", "Liste der letzten Tabs l\u00F6schen");
        m.setAttribute("accesskey", "l");
        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(menu) {
        // enable/disable the Recently Closed Windows sub menu
        // no restorable windows, so disable menu
        if (this._ss.getClosedWindowCount() == 0)
          menu.setAttribute("disabled", true);
        else
          menu.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");
    
        // "Append Clear undo close window list"
        undoPopup.appendChild(document.createXULElement("menuseparator"));
    
        m = undoPopup.appendChild(document.createXULElement("menuitem"));
        m.setAttribute("label", "Liste der kürzlich geschlossenen Fenster l\u00F6schen");
        m.setAttribute("accesskey", "L");
        m.addEventListener("command", function() {
          for (let i = SessionStore.getClosedWindowCount() -1; i >= 0; i--)
            SessionStore.forgetClosedWindow(i);
        }, false);
      }
    };
    
    // We should only start the redirection if the browser window has finished
    // starting up. Otherwise, we should wait until the startup is done.
    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

    Dies nur als Info.
    Mfg.
    Endor

  • Neue Quicklink-Button

    • Endor
    • 15. Dezember 2025 um 15:00
    Zitat von Mira_Belle

    auf "https://u6.getuploader.com/script/" landet.

    Darauf wollte ich dich schon vor Tagen aufmerksam machen.
    Für mich der Beweis, der ausgezeichneten Qualität deiner Scripte. :thumbup::thumbup::thumbup:

    Vielen Dank für Deine tolle Arbeit.
    Mfg.
    Endor

  • LoadingBar.uc.js script geht nicht mehr

    • Endor
    • 13. Dezember 2025 um 13:40

    Hallo Mitleser .
    Vielen Dank.
    Funktioniert wieder einwandfrei.
    :thumbup::thumbup::thumbup:
    Vielen Dank!
    Mfg.
    Endor

  • LoadingBar.uc.js script geht nicht mehr

    • Endor
    • 13. Dezember 2025 um 12:05

    Hallo zusammen.
    Seit Firefox 145 funktioniert dieses Script:

    JavaScript
    /* LoadingBar.uc.js */
    // Location Bar Enhancer5.1; Loading Bar 0.3.0
    
    (function(){
        var cssStr = `
                #urlbar-background {
                    background-image: repeating-linear-gradient(-45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,1) 6px, rgba(255,255,255,1) 12px), linear-gradient(to right, rgba(255,255,255) 0%, rgba(17,238,238,.7) 100%);
                    background-size:0 0;
                    background-repeat:repeat-x, no-repeat;
                    transition: background-size 350ms ease 0s !important;
    				border-radius: 18px !important;
    				}
    			#urlbar {
    				border-radius: 18px !important;
    				border: solid 1px #3399ff;
                }
    			#searchbar {
                    border-color: #3399ff !important;
    				}
                #urlbar-background:not([style="background-size: 0% 100%;"]) {
                    animation: progress-bar-stripes 2s linear infinite;
                }
                @keyframes progress-bar-stripes {
                    from {
                        background-position: 0 0;
                    }
                    to {
                        background-position: 51px 0;
                    }
                }
        `.replace(/\s{2,}|\r|\n/,"");
        
        var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\"");
        var mainW = document.getElementById("main-window");
        document.insertBefore(style, mainW);
    
        function main(window) {
          var {document, gBrowser} = window;
          function $(id) { return document.getElementById(id) };
          var urlbar = $("urlbar-background");
          let pageProgress = 0;
          let async = makeWindowHelpers(window).async;
          var LoadingBar = {
            listener: {
              onChangeTab: function(e) {
                urlbar.style.backgroundSize = '0% 100%';
                pageProgress = 0;
              },
              onProgressChange: function(aBrowser,webProgress,request,curSelfProgress,maxSelfProgress,curTotalProgress,maxTotalProgress) {
                if (gBrowser.contentDocument === aBrowser.contentDocument) {
                    var val = (curTotalProgress-1)/(maxTotalProgress-1);
                    pageProgress = val;
                    urlbar.style.backgroundSize = (100*val) + '% 100%';
                    if (val > 0.9)
                      async(function() {
                        if (pageProgress > 0.95)
                            urlbar.style.backgroundSize = '100% 100%';
                    }, 1000);
                }
              },
              onStateChange: function() {
                if (pageProgress > 0.95){
                    async(function() {
                        urlbar.style.backgroundSize = '0% 100%';
                        pageProgress = 0;
                    }, 1000);
                }else{
                    urlbar.style.backgroundSize = '0% 100%';
                }
              }
            }
          };
    
          gBrowser.tabContainer.addEventListener('TabSelect',LoadingBar.listener.onChangeTab,false);
          gBrowser.addTabsProgressListener(LoadingBar.listener);
    
          unload(function() {
            gBrowser.tabContainer.removeEventListener('TabSelect',LoadingBar.listener.onChangeTab,false);
    
            gBrowser.removeTabsProgressListener(LoadingBar.listener);
          }, window);
        }
    
    
    
        watchWindows(main, "navigator:browser");
    
        function runOnLoad(window, callback, winType) {
          window.addEventListener("load", function() {
            window.removeEventListener("load", arguments.callee, false);
    
            if (window.document.documentElement.getAttribute("windowtype") == winType)
              callback(window);
          }, false);
        }
    
        function runOnWindows(callback, winType) {
          function watcher(window) {
            try {
              callback(window);
            }
            catch(ex) {}
          }
    
          let browserWindows = Services.wm.getEnumerator(winType);
          while (browserWindows.hasMoreElements()) {
            let browserWindow = browserWindows.getNext();
            if (browserWindow.document.readyState == "complete")
              watcher(browserWindow);
            else
              runOnLoad(browserWindow, watcher, winType);
          }
        }
    
        function watchWindows(callback, winType) {
          function watcher(window) {
            try {
              callback(window);
            }
            catch(ex) {}
          }
    
          runOnWindows(callback, winType);
    
          function windowWatcher(subject, topic) {
            if (topic == "domwindowopened")
              runOnLoad(subject, watcher, winType);
          }
          Services.ww.registerNotification(windowWatcher);
    
          unload(function() { Services.ww.unregisterNotification(windowWatcher) });
        }
    
        function unload(callback, container) {
          let unloaders = unload.unloaders;
          if (unloaders == null)
            unloaders = unload.unloaders = [];
    
          if (callback == null) {
            unloaders.slice().forEach(function(unloader) { unloader() });
            unloaders.length = 0;
            return null;
          }
    
          if (container != null) {
            container.addEventListener("unload", removeUnloader, false);
    
            let origCallback = callback;
            callback = function() {
              container.removeEventListener("unload", removeUnloader, false);
              origCallback();
            }
          }
    
          function unloader() {
            try {
              callback();
            }
            catch(ex) {}
          }
          unloaders.push(unloader);
    
    
        function removeUnloader() {
            let index = unloaders.indexOf(unloader);
            if (index != -1)
              unloaders.splice(index, 1);
          }
          return removeUnloader;
        }
        
        function makeWindowHelpers(window) {
          let {clearTimeout, setTimeout} = window;
    
          function async(callback, delay) {
            delay = delay || 0;
            let timer = setTimeout(function() {
              stopTimer();
              callback();
            }, delay);
    
            function stopTimer() {
              if (timer == null)
                return;
              clearTimeout(timer);
              timer = null;
            }
          }
    
          return {
            async: async,
          };
        }
    
    })();
    Alles anzeigen

    leider nicht mehr.
    Es fügt der Adressleiste eine Ladeanimation hinzu.
    Habt ihr eine Idee wie man das anpassen muss?

    Konsole sagt:

    Code
    Uncaught TypeError: can't access property "style", urlbar is null
        onChangeTab file:///C:/Users/xxxx/AppData/Roaming/Mozilla/Firefox/Profiles/u8c46bd1.Firefox 144/chrome/LoadingBar.uc.js:46
        updateCurrentBrowser chrome://browser/content/tabbrowser/tabbrowser.js:1550
        _setupEventListeners chrome://browser/content/tabbrowser/tabbrowser.js:7837
        set selectedIndex chrome://global/content/elements/tabbox.js:238
        set selectedPanel chrome://global/content/elements/tabbox.js:248
        set selectedIndex chrome://global/content/elements/tabbox.js:736
        set selectedItem chrome://global/content/elements/tabbox.js:760
        set selectedTab chrome://global/content/elements/tabbox.js:83
        set selectedTab chrome://browser/content/tabbrowser/tabbrowser.js:471
        LoadingBar.uc.js:46:13
    Alles anzeigen
    Code
    Uncaught TypeError: can't access property "style", urlbar is null
        onStateChange file:///C:/Users/xxxx/AppData/Roaming/Mozilla/Firefox/Profiles/u8c46bd1.Firefox 144/chrome/LoadingBar.uc.js:64
        timer file:///C:/Users/xxxx/AppData/Roaming/Mozilla/Firefox/Profiles/u8c46bd1.Firefox 144/chrome/LoadingBar.uc.js:179
    LoadingBar.uc.js:64:21


    Vielen Dank im Voraus für Eure Hilfe.
    Mfg.
    Endor

  • Der Glückwunsch-Thread

    • Endor
    • 12. Dezember 2025 um 22:42

    Hallo Mira_Belle .

    Auch von mir alles Gute zum Geburtstag!
    Viel Gesundheit, Glück und Wohlergehen wünsche ich dir
    von ganzem Herzen. Bleib gesund.
    Viele Grüße
    Endor

  • Was hört Ihr gerade?

    • Endor
    • 5. Dezember 2025 um 21:09

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

  • Mehrzeilige Tableiste für aktuelle Firefox-Versionen

    • Endor
    • 2. Dezember 2025 um 19:36
    Zitat von pirate man

    funktionierendes Script für die Buttons Minimieren, Maximieren und Schließen?

    Stell deines doch mal in einem neuen Thread rein, vielleicht kann man es ja reparieren.

  • Mehrzeilige Tableiste für aktuelle Firefox-Versionen

    • Endor
    • 15. November 2025 um 00:28

    Hallo zusammen. Ich habe oben den link zum Script wieder entfernt. Ich bin der selben Meinung wie BrokenHeart . Das Script würde ich schon aus Sicherheitsgründen nicht verwenden. Daher habe ich den Link entfernt.

    Mfg.

    Endor

  • Mehrzeilige Tableiste für aktuelle Firefox-Versionen

    • Endor
    • 14. November 2025 um 20:15

    Hallo zusammen.
    Der Autor hat bis jetzt keine neue Version angeboten.
    Leider.

    Habe diese Version der Mehrzeiligen Tableiste gefunden,
    sollte bis Firefox 146 kompatibel sein.
    Da nicht verwendet oder getestet kann ich auch nichts weiter dazu sagen.
    Da das Script zu groß ist hier die Quelle:

    Quelle habe ich wieder entfernt .

    Könnt ihr ja mal testen ob die überhaupt funktioniert und wenn ja ob das Problem
    damit behoben ist. Aber Vorsicht, das Script hat über 7000 Zeilen.
    Das wäre mir zu viel. Also Verwendung nur auf eigene Gefahr.
    Mfg.
    Endor

Unterstütze uns!

Jährlich (2026)

20 %

20% (130,00 von 650 EUR)

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