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

  • BackupProfile.uc.js - div. Fragen dazu

    • Mira_Belle
    • 14. Januar 2026 um 17:47
    Zitat von 2002Andreas

    Ich habe das hier mal getestet.

    Es wird kein Button angezeigt, auch kein Platzhalter. Ich habe ein eigenes Icon eingetragen, und auch den Pfad zum Sicherungsordner angepasst:/

    PS:

    Allerdings nutze ich so ein Skript auch nicht.

    :/ Merkwürdig.
    Button ist bei mir vorhanden, Sicherung funktioniert auch.
    Aber diese Statusmeldung, die erscheint bei mir nicht!

    Denke, werde mal jene Version ausprobieren, die auch lenny nutzt!

  • BackupProfile.uc.js - div. Fragen dazu

    • Mira_Belle
    • 14. Januar 2026 um 17:41
    Zitat von FuchsFan

    uchst du nun ganz was spezielles, oder ist bei dir überhaupt keine Benachrichtigung zu sehen?

    Diese Meldung erscheint bei mir überhaupt nicht!
    Weswegen ich mir mit dem Promt beholfen habe.

    Boersenfeger Ich verstehe Deinen Kommentar nicht!
    Ich habe in Zeile 26 doch den "Pfad" festgetackert! => var path = "E:\\Firefox-Sicherung\\";
    Und in Zeile 88 steht auch alert('Die aktuelle Konfiguration wurde als:\n'+ archiveName +'\ngesichert in:\n' + path); !

  • Animation auf deepl.com deaktivieren

    • Mira_Belle
    • 14. Januar 2026 um 16:14

    Und auch hier hilft Dir uBlock weiter.
    Ich habe da solche Animationen nicht!

  • BackupProfile.uc.js - div. Fragen dazu

    • Mira_Belle
    • 14. Januar 2026 um 16:11

    Oh ha:!:
    Da hat mich lenny aber an was erinnert.

    Ich nutze ebenfalls das Script, aber habe die Version von BrokenHeart etwas abgeändert!
    Der Sicherungspfad ist fest vorgegeben und ich habe folgende Korrektur vor genommen.
    Gelöscht => ChromeUtils.importESModule("moz-src:///browser/components/customizableui/CustomizableUI.sys.mjs");

    • #333


    JavaScript
    // ==UserScript==
    // @name           BackupProfile.uc.js
    // @namespace      BackupProfile.github.com
    // @description    Schaltfläche zum Sichern des Firefoxprofils
    // @charset        UTF-8
    // @author         ywzhaiqi、defpt
    // @version        v2018.01.10
    // @note           Vorlage Script von ywzhaiqi (+ Mischung aus diversen Varianten aus dem Fuchsforum 1.11.21)
    // @note           Sicherungsdatei enthaelt auch Profilname
    // @reviewURL      http://bbs.kafan.cn/thread-1758785-1-1.html
    // Source          https://www.camp-firefox.de/forum/thema/133557/?postID=1232903#post1232903
    
    /* ----------------------------------------------------------------------------------- */
    /*     Zu beachten ist, dass die Grafiken sich im richtigen Ordner befinden müssen     */
    /*            %appdata%\Mozilla\Firefox\Profiles\"Profilname"\chrome\icons             */
    /* ----------------------------------------------------------------------------------- */
    
    (function () {
        CustomizableUI.createWidget({
            id : "backupProfile-button",
            defaultArea : CustomizableUI.AREA_NAVBAR,
            label : "Profilsicherung",
            tooltiptext : "Sichern der aktuellen Konfiguration",
            onClick: function(){
                // Speicherort - Ordner festlegen - Sichern funktioniert nur wenn Speicherort- bzw. Ordner vorhanden ist!!
                var path = "E:\\Firefox-Sicherung\\";
                // var path = "";
                // Ausschlussliste
                var excludes = 'bookmarkbackups *cache* crashes fftmp *healthreport* minidumps safebrowsing *webapps* saved-telemetry-pings *thumbnails* *session* *Telemetry* *hotfix* *.sqlite-shm *.sqlite-wal *.bak parent.lock blocklist.xml content-prefs.sqlite directoryLinks.json mimeTypes.rdf compatibility.ini parent.lock formhistory.sqlite';
    
    
                if (!path) {
                    var nsIFilePicker = Ci.nsIFilePicker;
                    var FP = Cc['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
                    FP.init(window, 'Sicherungspfad wählen', nsIFilePicker.modeGetFolder);
    
                    if (FP.show() == nsIFilePicker.returnOK) {
                        path = FP.file.path;
                    } else {
                        return false;
                    }
                }
    
                excludes = excludes.replace(/\./g, '\\.').replace(/\*/g, '.*').replace(/\s+/g, '|');
                excludes = new RegExp(excludes, 'i');
    
                var zw = Cc['@mozilla.org/zipwriter;1'].createInstance(Ci.nsIZipWriter);
                var pr = {PR_RDONLY: 0x01, PR_WRONLY: 0x02, PR_RDWR: 0x04, PR_CREATE_FILE: 0x08, PR_APPEND: 0x10, PR_TRUNCATE: 0x20, PR_SYNC: 0x40, PR_EXCL: 0x80};
                var fu = ChromeUtils.importESModule('resource://gre/modules/FileUtils.sys.mjs').FileUtils;
                var dir = new FileUtils.File(PathUtils.join(PathUtils.profileDir,[]));
                
                let d = new Date();
                d = d.getDate().toString().padStart(2, '0') + '.' + (d.getMonth() + 1).toString().padStart(2, '0') + '.' + d.getFullYear() + ' - ' +  d.getHours().toString().padStart(2, '0') + '\u2236' + d.getMinutes().toString().padStart(2, '0');
    
                // Die folgende Zeile formt den Archivnamen
                var archiveName = 'Profil Andreas ' + AppConstants.MOZ_APP_VERSION_DISPLAY + ' - ' + d + '.zip';  /* 'd' ersetzt 'localnow' */ 
            
                var xpi = fu.File(path + '\\' + archiveName);
    
                zw.open(xpi, pr.PR_RDWR | pr.PR_CREATE_FILE | pr.PR_TRUNCATE);
                var dirArr = [dir];
                for (var i=0; i<dirArr.length; i++) {
                    var dirEntries = dirArr[i].directoryEntries;
                    while (dirEntries.hasMoreElements()) {
                        var entry = dirEntries.getNext().QueryInterface(Ci.nsIFile);
                        if (entry.path == xpi.path) {
                            continue;
                        }
    
                        if (entry.isDirectory()) {
                           dirArr.push(entry);
                        }
    
                        var relPath = entry.path.replace(dirArr[0].path, '');
                        if (relPath.match(excludes)) {
                            continue;
                        }
    
                        var saveInZipAs = relPath.substr(1);
                        saveInZipAs = saveInZipAs.replace(/\\/g,'/');
                        // Konfigurationsdateien können gesperrt werden
                        try {
                            zw.addEntryFile(saveInZipAs, Ci.nsIZipWriter.COMPRESSION_FASTEST, entry, false);
                        } catch (e) {}
                    }
                }
                zw.close();
                alert('Die aktuelle Konfiguration wurde als:\n'+ archiveName +'\ngesichert in:\n' + path);
                
                function alert(aString, aTitle) {
                //    Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService).showAlertNotification("", aTitle, aString, false, "", null);
                // ^ Ersetzt duch :
                    const AlertNotification = Components.Constructor(
                        '@mozilla.org/alert-notification;1',
                        'nsIAlertNotification',
                        'initWithObject'
                    );
    
                    Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService).showAlert(
                        new AlertNotification({ title: aTitle, text: aString })
                    );
                // ^     
                }
    
        let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); // Pfad zum Profilordner und gleich in den entsprechenden Unterordner
        let ButtonIcon = "backup.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(`
     
            #backupProfile-button { list-style-image: url("${ProfilePath}/${ButtonIcon}") }
            #backupProfile-button.toolbarbutton-1.chromeclass-toolbar-additional image.toolbarbutton-icon {
              width: 32px !important;
              height: 32px !important;
              fill: #faea00 !important;
              fill-opacity: 1 !important;
              }
     
           `), null, null);
     
        sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
    
    //  #ffe10f     //  #fdeb4c
    
    })();
    Alles anzeigen


    Auch mir fehlt irgendwie eine Meldung, dass die Sicherung erfolgreich beendet ist.

    Ich habe mir notdürftig ein Promt gebastelt! Gefällt mir aber nicht wirklich:!:


    JavaScript
    function alert(aString, aTitle) {
      let prompts = Services.prompt;
      prompts.alert(
        window,
        aTitle || "BackUp des Profils abgeschlossen",
        aString
      );
    }


    Mir würde ein Popup oder ähnliches besser gefallen und wenn ich das aussehen dann auch noch per CSS beeinflussen könnte,
    das wäre Mega!

    Kann mir da jemand helfen?

  • JavaScriptLoader, läuft bei mir nicht!

    • Mira_Belle
    • 13. Januar 2026 um 21:06
    Zitat von Endor
    Zitat von Mira_Belle

    wenn es doof läuft, ist so ein Button einfach weg und die Fehlersuche geht los.

    Ja genau das selbe dachte ich mir auch eben.
    Mfg.
    Endor

    Und wirklich viel Code ist es auch nicht wirklich, der da gelöscht werden würde.
    Zum Testen habe ich jene Passagen mal auskommentiert.
    Werde das mal beobachten, wenn alles stabil läuft und nichts Komisches passiert,
    wirds zum WE eine kleine Anleitung und die nötigen Dateien geben.

  • JavaScriptLoader, läuft bei mir nicht!

    • Mira_Belle
    • 13. Januar 2026 um 20:36

    Danke für's testen.
    Ich denke, ich lasse für's erste die Finger vom Code und blende nur den Menüeintrag per CSS aus.
    Skripte, bzw. deren Funktionen werden ja auch nur dann dorthin verschoben, wenn die mehrere Bedingungen erfüllen,
    wenn es doof läuft, ist so ein Button einfach weg und die Fehlersuche geht los.

  • JavaScriptLoader, läuft bei mir nicht!

    • Mira_Belle
    • 13. Januar 2026 um 20:22

    Danke Endor .

    Jetzt verstehe ich:!:
    Also, wenn man da z.b. die ID eines Ausführbaren Scripts einträgt, z.B. eines "Buttons" oder eines zusätzlichen "Menüs",
    dann wird es dorthin verschoben, also von z.B. der Adressleiste oder der Symbolleiste, da hin!

    Jetzt bin ich ernsthaft am überlegen, ob ich diese Funktion komplett aus dem Script werfen soll,
    denn ich habe für selten genutzte "Buttons" zum einen, danke Horstmann eine eigene kleine Sidebar und weitere Funktionen
    verbergen sich in "meinem" Appmenü.

    Oder soll ich den Code unberührt lassen und nur den Menüeintrag per CSS ausblenden?
    :/ Mh.


    JavaScript
      var userChromejsScriptOptionsMenu = {
        //あまり使わないメニューのリスト
        menues: [
          "GrabScroll_optionsMenu",
          "Patch_XULrubySupportMenu",
          "menutabTooltip",
          "PipeliningToggle",
          "linkInNewTabForSpecifiedPageToolMenu",
          "ieviewModokiTool",
          "linkloadInBackgroundToolMenu",
          "SaveFolderToolsMenu",
          "ucjs_copysysinfo-menu",
          "AppMenuButton",
        ],
    Alles anzeigen

    Wieder gelöscht und er ist an seinem normalen Platz:!:

  • JavaScriptLoader, läuft bei mir nicht!

    • Mira_Belle
    • 12. Januar 2026 um 22:26

    Himmel, Herr Gott, hatte noch einen Bug entdeckt, bis ich diesen Fehler beseitigen konnte,
    da ist ja Kinder kriegen einfacher!

    Eine Frage hätte ich noch an meine Spezies! Endor  Horstmann  FuchsFan  milupo & 2002Andreas

    Wozu ist das Menü "userChrome.js Scripte" mit der id="userChromejs_script_options_Menu" da?
    Bei mir ist es leer, es wird absolut nichts angezeigt!

    Ich steige da im Code einfach nicht durch.
    Deshalb habe ich es bei mir einfach per CSS ausgeblendet, den Code wollte ich dann doch nicht entfernen.

  • JavaScriptLoader, läuft bei mir nicht!

    • Mira_Belle
    • 12. Januar 2026 um 00:20

    Was für'ne Geburt!

    Erst ein mal ein ganz <3liches DANKE an Endor, Horstmann, FuchsFan, milupo & 2002Andreas.

    Ihr habt mir sehr weitergeholfen und ich habe mal wieder mit den Browserwerkzeugen hantieren dürfen.
    Eure Kommentare, Hinweise und Codebeispiele haben mich inspiriert und irgendwann hatte ich dann
    auch mal eine Lösung.

    Hier nun das passende CSS zu meiner Version der "rebuild_userChrome.uc.js".
    Das CSS habe ich ganz bewusst in das JavaScript integriert.

    CSS
        /* Symbol vor dem JavaScript-Loader-Menü */
        #userChrome_js_menu {
          background-image: url("${ProfileDirectory}/js.svg") !important;
          padding-left: 36px;
        }
    
        /* Menüpopup "Alle UserScripte aktivieren/deaktivieren */
        #userChromejs_options {
          margin-left: 5px !important;
        }
    
            /* Menüpopup "Alle UserScripte aktivieren/deaktivieren */
        #userChromejs_options {
          margin-left: 5px !important;
        }
    
        /* Menüpopup "Alle UserScripte in "scripts" aktivieren/deaktivieren */
        #userChromejs_options > menu:nth-child(6) > menupopup:nth-child(4) {
          margin-left: 5px !important;
        }
    
        /* Alle UserScripte aktivieren/deaktivieren */
        #userChromejs_options > menuitem:not([checked="true"]) {
            background-image: url("${ProfileDirectory}/${ButtonIcon}") !important;
            background-repeat: no-repeat !important;   
            background-position: 11px 5px !important;
            background-size: 16px 16px !important;
        }
        #userChromejs_options > menuitem[checked="false"] {
            padding-left: 12px !important;
        }
    
        /* Alle UserScripte in "scripts" */
        #userChromejs_options > menu[label='Alle UserScripte in "scripts"'] {
            padding-left: 12px !important;
            background-image: url("chrome://global/skin/icons/menu-check.svg") !important;
            background-repeat: no-repeat !important;   
            background-position: 12px 5px !important;
            background-size: 16px 16px !important;
        }
        #userChromejs_options > menu[style="font-style:italic;"] {
            background-image: url("${ProfileDirectory}/${ButtonIcon}") !important;
            background-repeat: no-repeat !important;   
            background-position: 11px 5px !important;
            background-size: 16px 16px !important;
        }
    
        /* Alle UerScripte in "scripts" aktivieren/deaktivieren */
        #userChromejs_options > menu[label='Alle UserScripte in "scripts"'] > menupopup[hasbeenopened="true"] > menuitem:not([checked="true"]){
            background-image: url("${ProfileDirectory}/${ButtonIcon}") !important;
            background-repeat: no-repeat !important;   
            background-position: 12px 5px !important;
            background-size: 16px 16px !important;
        }
        #userChromejs_options > menu[label='Alle UserScripte in "scripts"'] > menupopup[hasbeenopened="true"] > menuitem[checked="false"]{
            padding-left: 12px !important;
        }
    Alles anzeigen

    Nun funktioniert wirklich alles, so wie ich mir das vorgestellt habe.
    Werde mich im Laufe der Woche drann machen und die Dateien von Coderesten zu befreien
    und den einen oder anderen Kommentar noch hinzufügen.
    Denke, werde bis spätestens nächstes Wochenende dann alles hier veröffentlichen können
    und auch noch einmal eine kleine Erklärung dazu abgeben zu können.

  • JavaScriptLoader, läuft bei mir nicht!

    • Mira_Belle
    • 11. Januar 2026 um 20:21

    Horstmann Sorry, hatte nur kurz reingeschaut
    und Deinen Kommentar nicht als Frage nach dem Code aufgefasst!

    Hier mal der vorläufige Code für die "rebuild_userChrome.uc.js".

    CSS
      var userChromejs = {
    // --- config ---
        editor: (AppConstants.platform == "win") 
            //     ? "C:\\Program Files\\Notepad++\\notepad++.exe"
                 ? "C:\\Program Files\\Microsoft VS Code\\Code.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:"JavaScript-Loader-Menü"},
               /*{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('label','Alle UserScripte 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.setAttribute('label','Alle UserScripte in ' +'"'+ (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('label','Alle UserScripte in ' +'"'+ (dirName=="root"?"":dirName) +'"' + ' aktivieren/deaktivieren');
            //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();
    
    (function () {
      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(`
    
        #userChrome_setting,
        #userChrome_rebuild,
        #userChrome_restartApp,
        #userChrome_openChrome,
        #userChromejs_script_options_Menu {
          display: none  !important;
        }
    
      `), null, null);
      sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    })();
    Alles anzeigen
  • JavaScriptLoader, läuft bei mir nicht!

    • Mira_Belle
    • 11. Januar 2026 um 17:30

    Horstmann

    Hat sich mit dem Code von 2002Andreas aus #36 erledigt,
    wenn er auf das Loadermenü eingegrenzt werden könnte.

  • JavaScriptLoader, läuft bei mir nicht!

    • Mira_Belle
    • 11. Januar 2026 um 13:58

    Danke 2002Andreas

    CSS
      menuitem[checked="false"]  {
       background: url("file:///C:/Users/weiss/IconsFirefox/2.jpg") no-repeat !important;
       height: 25px !important;
       padding-top: 5px !important;
       padding-left: 15px !important;
       background-position: 7px 3px !important;
    }

    Das reicht schon fast!
    Der Selektor müsste nur etwas "genauer" sein.
    Es würde möglicherweise schon reichen, wenn das CSS nur auf das Skript. bzw, das Loadermenü eingeschränkt wäre.

  • JavaScriptLoader, läuft bei mir nicht!

    • Mira_Belle
    • 11. Januar 2026 um 12:45

    Hallo 2002Andreas ,
    ich bin fast so weit mit dem JavaScript-Loader fertig!
    Ich bräuchte aber mal Deine Hilfe, CSS, wieder so 'ne widerspenstige Sache!

    Man kann in dem Menü Scripte aktivieren bzw. deaktivieren, so weit, so gut.
    Nun mein Problem, wenn ein Skript aktiviert ist, ist ein Häkchen davor,
    ist es deaktiviert, nicht, aber der Eintrag springt dann ein Stück nach rechts!
    Blöd, sieht einfach nicht gut aus.
    Schöner wäre es, wenn anstatt des Häkchens einfach ein anderes Symbol angezeigt werden würde.
    Nur ich bekomme das einfach nicht gebacken.

    Dieses Verhalten ist auch bei anderen Menüeinträgen, wo aktiviert/deaktiviert werden kann, zu beobachten.

  • JavaScriptLoader, läuft bei mir nicht!

    • Mira_Belle
    • 10. Januar 2026 um 02:12

    Fertig, Finito, Finish, Listo, 完成.

    Nachtrag!

    Eine Hürde muss ich noch nehmen, das Aktivieren der einzelnen Skripten funktioniert nur per Mittelklick.
    Ich würde das aber lieben mit Linksklick machen wollen.

    Danach gehts ans Aufräumen und Putzen,
    und wenn ich dann richtig fertig bin,
    gibt es eine kleine Anleitung nebst Dateien.

  • Hinweise auf DeepL dauerhaft deaktivieren

    • Mira_Belle
    • 10. Januar 2026 um 00:39

    uBlock Origin ist Dein Freund.

  • JavaScriptLoader, läuft bei mir nicht!

    • Mira_Belle
    • 10. Januar 2026 um 00:26

    Habe soeben entdeckt, dass mit Mittelklick die Häkchen in der "Liste" der UserScripte ein bzw. aus geblendet werden.
    Muss mal die originalen Dateien zurückspielen und ausprobieren, ob ich nicht zu viel Code entsorgt habe.

  • JavaScriptLoader, läuft bei mir nicht!

    • Mira_Belle
    • 9. Januar 2026 um 23:45

    Hi Merci chao, vielen Dank für Dein Hilfeangebot, aber ich bin total verwirrt von den ganzen Dateien von verschieden Leuten, dass ich mich mithilfe von verschiedenen KIs selber dran gemacht habe eine Lösung zu finden!

    Stand der Dinge ist jetzt, ich kann ALLE meine UserScripte mit dem ganzen Wust von Dateien,
    laden und sie werden auch ausgeführt!

    Was bis jetzt nicht funktioniert, dass ich einzelne Skripte beenden kann, bzw. laden kann.
    Und der Firefox muss auch immer neu gestartet werden.

    Mal schauen, ob ich das noch irgendwie hinbekomme!
    Nur mal zum Überblick!
    In der "userChrome.js" steht:

    Code
    userChrome.ignoreCache = true;
    userChrome.import("*", "UChrm");
    userChrome.import("userChrome", "UChrm");

    Damit wird der Ordner "userChrome" eingebunden.
    Das ist wichtig, weil sich dort zum einen die "rebuild_userChrome.uc.js" befindet,
    aber eben auch die "userChrome.js" von Alice, die nachgeladen wird!
    Es gibt natürlich auch noch den Order "utils" mit den Dateien
    "chrome.manifest", "userChrome.js" und "xPref.sys.mjs".

    Im Augenblick kann ich nicht so genau sagen, an welche Datei ich nicht Hand angelegt habe,
    das muss ich dann per WinMerge herausfinden und dann werde ich diese Dateien,
    bzw. dem Code dann auch hier einstellen.

    Ich fürchte aber, das wird noch etwas dauern, es sei denn jemand will die Dateien schon mal zur Prüfung haben.
    Ich würde mich wirklich freuen, wenn mir bei dem Unterfangen jemand helfen würde.

  • JavaScriptLoader, läuft bei mir nicht!

    • Mira_Belle
    • 8. Januar 2026 um 19:36

    So, ich habe mal etwas getrixt!
    Ich habe die "kleine" userChrome.js umgeschrieben!

    JavaScript
    userChrome.ignoreCache = true;
    userChrome.import("*", "UChrm");
    userChrome.import("scripts", "UChrm");
    userChrome.import("userChrome", "UChrm");

    Alle UserSkripts, welche über die "große" userChrome.js von Alice geladen und ausgeführt werden
    in den neuen Ordner "scripts_test" geschoben.
    Im Ordner "userChome" liegen nun die Dateien "rebuild_userChrome.uc.js" und "userChromeJS.js".
    Nicht wundern, ich habe die "userChrome.js"von Alice so umbenannt:!:

    Das Resultat, alle Skripte werden geladen.
    Jene im Ordner "script" durch die "kleine" userChrome.js
    und jene im Ordner "scripts_test" über die umbenannte "userChrome.js"von Alice.

    Zwei Dinge sind mir noch unklar.
    1. Warum werden manche UserSkripte geladen und ausgeführt und andere eben nicht,
    und
    2. Was ist mit dem Menü "userChrome,js Scripte"? Warum wird da nichts angezeigt?

  • JavaScriptLoader, läuft bei mir nicht!

    • Mira_Belle
    • 8. Januar 2026 um 18:26
    Zitat von milupo

    Sind denn die Einstellungen der Zeilen 25 und 26 auch so in about:config gesetzt?

    Ja.

    Interresant ist ja, dass alle Skripte geladen und ausgeführt werden,
    wenn ich die "kleine" userChrome.js nutze.
    Gut, das rebuild_userChrome.uc.js funktioniert dann nicht mehr richtig, ist ja klar.

    JavaScript
    userChrome.ignoreCache = true;
    userChrome.import("*", "UChrm");
    userChrome.import("scripts", "UChrm");

    Dass eben nicht alle Skripte geladen und ausgeführt werden,
    geschieht nur bei Nutzung der "großen" userChrome.js von Alice.

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

    Dafür funktioniert dann aber die rebuild_userChrome.uc.js
    mit der Einschränkung, dass das Menü "userChrome Skripte" nichts anzeigt!

  • JavaScriptLoader, läuft bei mir nicht!

    • Mira_Belle
    • 8. Januar 2026 um 18:04
    Zitat von FuchsFan

    Eventuell würde das ja funktionieren.

    Nein, das ist es nicht. Schade, aber Danke.

Unterstütze uns!

Jährlich (2026)

29 %

29% (188,31 von 650 EUR)

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