1. Nachrichten
  2. Forum
    1. Unerledigte Themen
    2. Forenregeln
  3. Spenden
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. camp-firefox.de
  2. bege

Beiträge von bege

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

    • bege
    • 4. Mai 2025 um 18:07
    Zitat von Speravir
    Zitat von bege

    Diese Skripte gehen jetzt auch wieder.
    JavaScript: AnimationToggleButton.uc.js

    Hmm?! Von welcher Version bist Du ausgegangen? (Edit: Ach, steht ja direkt im Kommentar.) Denn die bei Endor vor 4 Monaten hochgeladene Version funktioniert prima in Fx138.

    Nicht missverstehen: Es ist gut, dass du Du selbst eine Lösung gefunden hast.

    Danke für den Link, hatte ich übersehen.


    Zitat von BrokenHeart
    Zitat von bege

    Diese Skripte gehen jetzt auch wieder

    Ja, aber im Skript AnimationToggleButton.uc.js ist sehr viel toter bzw. überflüssiger Code. Die Schleife, um die Attribute zum 'button' hinzuzufügen, wurde um Abfragen ergänzt, die niemals true werden. Es gibt im aktuellen Skript die Objektvariablen für die inlineEvents überhaupt nicht mehr, also ist es sinnlos das abzufragen und dafür einen Eventlistener hinzuzufügen.

    Einen Eventlister für oncontextmenu  hinzuzufügen ist nicht notwendig, da in onClick() das Kontextmenü bereits durch die Befehle event.preventDefault() und event.stopPropagation() außer Kraft gesetzt wird.

    Bei onclick ist es sowieso unsinnig, da der Eventlistener ja weiter unten im Code nochmal hinzugefügt wird.

    Danke für die Korrekturen. Da ich nur Hobbybaster bin, habe ich versucht, es mit Kopien aus anderen Skripten wieder zum Laufen zu bringen. Die von dir angemerkten Punkte gehen über meine Kenntnisse. Natürlich hätte ich den Code daraufhin untersuchen können, welche Eventlistener tatsächlich gebraucht werden.

    Ich habe mich jetzt für das Skript in Endors Sammlung entschieden, dann bin ich auf dem gleichen Stand wie das Forum hier.

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

    • bege
    • 3. Mai 2025 um 08:29

    Diese Skripte gehen jetzt auch wieder.

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

    force-contextmenu.uc.js (Kontextmenü durch Seite ändern lassen oder nicht)

    JavaScript: force-contextmenu.uc.js
    (function() {
    
       if (location != 'chrome://browser/content/browser.xhtml')
          return;
    
       try {
          CustomizableUI.createWidget({
             id: 'contextmenu-button',
             type: 'custom',
             defaultArea: CustomizableUI.AREA_NAVBAR,
             onBuild: function(aDocument) {
                var button = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                var attributes = {
                   id: 'contextmenu-button',
                   class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                   removable: 'true',
                   label: 'Rechtsklick Kontextmenu',             
                   tooltiptext: Services.prefs.getBoolPref('dom.event.contextmenu.enabled') ?
                      'Kontextmenu kann manipuliert werden' : 'Kontextmenu kann nicht manipuliert werden',
                   oncommand: '(' + onCommand.toString() + ')()'
                };
                for (var a in attributes) {
                   //button.setAttribute(a, attributes[a]);
                   if(a === "oncommand") {
                         button.addEventListener('command', function(event) { Function(attributes[a])(); });
                   } else if(a === "onclick") {
                         button.addEventListener('click', function(event) { Function(attributes[a])(); });
                   } else if(a === "onmouseup") {
                         button.addEventListener('mouseup', function(event) { Function(attributes[a])(); });
                   } else if(a === "oncontextmenu") {
                         button.addEventListener('contextmenu', function(event) { Function(attributes[a])(); });
                   } else {
                         button.setAttribute(a, attributes[a]); 
                   }
                };
                function onCommand() {
                   var isEnabled = !Services.prefs.getBoolPref('dom.event.contextmenu.enabled');
                   Services.prefs.setBoolPref('dom.event.contextmenu.enabled', isEnabled);
                   var windows = Services.wm.getEnumerator('navigator:browser');
                   while (windows.hasMoreElements()) {
                      let button = windows.getNext().document.getElementById('contextmenu-button');
                      if (isEnabled)
                         button.setAttribute('tooltiptext', 'Kontextmenu kann manipuliert werden')
                      else
                         button.setAttribute('tooltiptext', 'Kontextmenu kann nicht manipuliert werden');
                   };
                };
                return button;
             }
          });
       } catch(e) { };
    
       var css =
          '#contextmenu-button[tooltiptext="Kontextmenu kann manipuliert werden"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkhJREFUeNqUU0toU0EUPfN5n0RTI1ip6EoJpQtRBCu4qVQouFIJoVap4EKtuOsiuCriRgSxG63iRqRqBY1UXYggiliU6q4rP7hooBJJE4nUxr68N+Od13ylFbxw38zcmXvuuZ/Htl98/qPsBfGK0tBao1kYAwR9LMHzjuQbJeehrVmkcf4ycgD/kqmv8+2D4+/vxVx51PoLRJrIRp58yoFVoxoiivYHOzvgDmfw+0oSt47tHjhx9wNrc+WAFBw1DF6j7UqBqEUqZbhGJA/tJoVyoLAv0Y7xwe4jS7562JyqrG1ccuD02CCba1VldmrvVmxIT8Kn89JoEl6gkhFyU4y3AjiGVhXAiOIa2VIZo8mdodYkINwKt6BsBwETDQBbiDD/GoCJX1j0ME8aWulyV0cMFWHjlxvDxFgPPOm0psBW7AFZqS6MIhpZXLOenHvx043DFxZ4IwVGLFi41pVAXddCpM1B7lIaDzZbuH29FyUR0WWIsYDqUGcQdeRyG5uDc6qJa+Pz+XOwXk0idfY0UXWpEArTb96dyc19Z3WAt7NF87510rgA1q6Dd/MyUsdTQKkAXfTBKKU9OzrxaHZuSLJGsLDnrQB0MJNHiv2HgL7+BsOXGejHLyBZ1SPsPX2ZbkIw46gVOWmo+9egJq7SfCgiJsAtG4xWKfmyw+GuTav+C9n0CKbv3EB31xZYNLG+9jH1MY+iQkZalYXXiQvPesykaegVW+hH+9Cf+IbCzFN43A5TK1aCzMmZ7LAJv400jv+XvCH3R4ABADkKvfJiBGzqAAAAAElFTkSuQmCC)} ' +
          '#contextmenu-button[tooltiptext="Kontextmenu kann nicht manipuliert werden"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYlJREFUeNpi/P//P4Nex67333/9Ffj97z8DiI8MGBkZGJiBBCsz0+ubtZ5iMHG4OhBDpXHbf0Lg8J3X/xXqty5DNgCEWUAckM0gsOnmCwZGqK0gC/4B2f7qEgwcRWsZfvQFM8yPNo1MZNjK+KDROxJmEAuyczhYmIHOBRoAhEDzGf5CxUFe+P73H4ODqijD4liziBSW7axA4RC4ATDAwcLEwMTICHYFSOs/qMvSrJQYRMo2MPwB8n/2BzP8/vsvGMUFMMDOzAR0PsQAEPjH9J/h0cfvDP3BBmAMA3+QAhrFADZmZrD/YQaAlL399ovhzddfcDVGUvwQCWwGgLzAyIAJ/jNAAhUbQPMCRDsuQwgawMXOAolGXK4gZMCxh++AsQBJBxgGgNIFEAdpSWIaAFPPBE22WA1AIhkxDIDqAMc9kGT8z4jFgP9wLzAi2QA2gIUJIhCoKclADICphxvA+vvLQdWm7faglPYfZ3hDkjhIM0g9XAyUD4BOUgayBRiIBx+A+u6CGAABBgBmFq9IdRyTmAAAAABJRU5ErkJggg==)} ';
       var stylesheet = document.createProcessingInstruction('xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"');
       document.insertBefore(stylesheet, document.documentElement);
    
    })();
    Alles anzeigen

    media.mediasource.uc.js

    JavaScript: media.mediasource.uc.js
    (function() {
    
      var browser_chrome = 'chrome://browser/content/browser.xhtml';
    
       if (location != browser_chrome)
          return;
    
       try {
          CustomizableUI.createWidget({
             id: 'mediasource-enabled-button',
             type: 'custom',
             defaultArea: CustomizableUI.AREA_NAVBAR,
             onBuild: function(aDocument) {
                var button = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                var attributes = {
                   id: 'mediasource-enabled-button',
                   class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                   removable: 'true',
                   label: 'media.mediasource',               
                   tooltiptext: Services.prefs.getBoolPref('media.mediasource.enabled') ?
                      'media.mediasource ist aktiviert' : 'media.mediasource ist deaktiviert',
                   oncommand: '(' + onCommand.toString() + ')()'
                };
                for (var a in attributes) {
                   //button.setAttribute(a, attributes[a]);
                   if(a === "oncommand") {
                         button.addEventListener('command', function(event) { Function(attributes[a])(); });
                   } else if(a === "onclick") {
                         button.addEventListener('click', function(event) { Function(attributes[a])(); });
                   } else if(a === "onmouseup") {
                         button.addEventListener('mouseup', function(event) { Function(attributes[a])(); });
                   } else if(a === "oncontextmenu") {
                         button.addEventListener('contextmenu', function(event) { Function(attributes[a])(); });
                   } else {
                         button.setAttribute(a, attributes[a]); 
                   }
                };
                function onCommand() {
                   var isEnabled = !Services.prefs.getBoolPref('media.mediasource.enabled');
                   Services.prefs.setBoolPref('media.mediasource.enabled', isEnabled);
                   event.target.ownerGlobal.BrowserCommands.reload();
                   var windows = Services.wm.getEnumerator('navigator:browser');
                   while (windows.hasMoreElements()) {
                      let button = windows.getNext().document.getElementById('mediasource-enabled-button');
                      if (isEnabled)
                         button.setAttribute('tooltiptext', 'media.mediasource ist aktiviert')
                      else
                         button.setAttribute('tooltiptext', 'media.mediasource ist deaktiviert');
                   };
                };
                return button;
             }
          });
       } catch(e) { };
    
       var css =
          '#mediasource-enabled-button[tooltiptext="media.mediasource ist aktiviert"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIGSURBVDhPY2RAA4KCgkp2dnbl8vLydgICAkogsQ8fPtx7+PDhISDofP/+/T2wQihAMcDX13eunq5u0ssfvxm2x3RDRSHAc0kpgzgHK8Oly5fnbd68ORkqjDAgKSnpAisPr/6WhIlQEezAZ0E+w+8vny/OmzfPAMRnBhEeHh5z+UTEPLclTwZx8YJbBicZVC5aSYiLCMvduXNnExMfH5+SqopK0o7UqVAlhMFOoFqQHpBeJiMjo/Ln335CpRAgZns7Q/iSIigPE4D0gPQyiYmJ2R3PmQ0VRoAP7z8wvHjxgsGwJRgqggpAekB6mTg5OcFRhQ6A0cXw7t07hq/v3zHoV3syOPTHQWUQAKSX6e/fv1AuKjh48CADMN4ZLl26BHbJj58/oDIIANLL9OnTJ5SEAQPARMQgLS3NwCcqxvBy7nmGExWroDIIANLLBDT9kHZbOFQIAcTERBlk5OUZfi27DhVBBSA9IL1M165d6xRg/AcVRoB7LVsYbnXtgfIwAUgPSC/Tly9f7j14+HCeToM/VIowAKkF6QHphSdlNze3CwzsHPpXGzdBRbAD7Xo/BoafPy7u2rULnJRRMpOJiclceTm5pHfAiLlVvw4qCgFqjUEMQsCE//DRo3lnzpzBzEwwwM3NraShoVEuLCxsB2KDxL5+/Xrv7du3h27cuNEJYoMVggEDAwAplchp9LL2uwAAAABJRU5ErkJggg==)} ' +
          '#mediasource-enabled-button[tooltiptext="media.mediasource ist deaktiviert"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QgVChcoe9onUQAAAvBJREFUOMttk09M22UYxz+/931b+kcg1FEoZAmWbGOSuCVOjR6IXnfzQGnCDeLBG4lpCJBAIAEye+CqB6qXJrTcPGjMolnINCbOxDl1soQyFKms0lrH1tHf731fD7SdLj7Jk/fwPt+83+/nzePQqIWFBRYXF1leXo5ba6ettSPW2jiA4zgFx3G2HMe5Njc3V2jOAjgAs7OzrKysMD8/v649b+LwxGPocIeB0n0A7ncP8EvPINE2hVIqs7S0NNnUOKlUinQ6zczMzPflR7VLLxfvMrH9JdJzMUICIIzGSB8fXXiTb/uGiYSDt1dXVy+nUqlTB6lUav3o0eOJyR8+5Y3ybkv4bAmj+TryAusvXeX5cCiTTqcnnampqbj2vJ2Lv9/l3e0vMEIh6l4jHE9PC9onkUbz4bm3+OnsMFKpQeV53nTx8QlrhZsYIRF1j/TUBxxVKvxVqVCr1bDWctIWIvfZ+xgleWf3JmNnztEbZFq5rjsyXN5Duict609qNZ48+IOHpRLHx8dYa3EDYRCNKJ7Li0d7HPYMjCjXdePxo32MaN7C/sEB9WqVSqVCtVpFSokO6RYLIySDf/7KfqQ/rrTW2P+Qgjt3fqS8V6BYLGKtJRaL8VzM95QHYLForVHGmMK99p4hcfTzaQQL7e3t2K4uhBBYa+no6KAtHIbSKVRhNNudfRhjCsoYs/VdKDqk/QEczwUL/jNRAvU6JtwBQDAYREW6YbfxuvJxK9RN1JgtZ3x8PO7W6zuvPjzgvd++QjsS6ekWsH95RkuJtIa1/tf4pvMsPr9/UGSz2YKQMnPd382NcD/SGoySGPFMN8Q3wn18HuhFSJnJZrMFmUwm2djY+OTK5UtvX2+L9j4IR3i9dojQLtZxAAdhNUgfa32v8HHnebpCgdu5XO5qMpk85To2NkYulyORSKxrz5soa7hSK3H+7yJYuNcZ41YoSkRYpFKZfD4/2dS0PiaRSJDP5xkdHY0D/7vOwLXNzc1CcxbgH/lpXYTK63B1AAAAAElFTkSuQmCC)} ';
       var stylesheet = document.createProcessingInstruction('xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"');
       document.insertBefore(stylesheet, document.documentElement);
    
    })();
    Alles anzeigen
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • bege
    • 3. Mai 2025 um 01:54

    In der letzten Version des Skripts "ExtensionOptionsMenu.uc.js" bei Endor funktionieren im Fx 138 die oberen drei Buttons nicht mehr. Die Hauptfunktionen für die Add-ons funktionieren.

    Im Skript gibt noch "on..."-Attribute von Elementen. Die Fehlerkonsole wirft für die Zeilen 132 und 202 entsprechende Fehler aus, wo diese Attribute verarbeitet werden.

    Außerdem in Zeile 144 ein "onclick"-Attribut.

    Obwohl es mir in einigen anderen Skripten mit den Hinweisen hier im Forum gelungen ist, passende Eventhandler hinzuzufügen, gelingt mir das bei diesem Skript an keiner Stelle.

    Wer kann helfen?

    Edit:

    Alte Zeile 132 ersetzen durch

    JavaScript
    if(a === "oncontextmenu") {
       toolbaritem.addEventListener('contextmenu', function(event) {  	Function(attributes[a])(); });
    } else {
       toolbaritem.setAttribute(a, attributes[a]); 
    }

    alte Zeile 203 ersetzen durch

    JavaScript
            if(n === "oncommand") {
                el.addEventListener('command', function(event) { Function(attr[n])(); });
            }
            else if(n === "onclick") {
                el.addEventListener('click', function(event) { Function(attr[n])(); });
            }
            else if(n === "onmouseup") {
                el.addEventListener('mouseup', function(event) { Function(attr[n])(); });
            }
            else {
                el.setAttribute(n, attr[n]); 
            }
    Alles anzeigen

    alte Zeile 144 ersetzen durch

    JavaScript
    		mp.addEventListener('click', (event) => {
    			event.preventDefault(); event.stopPropagation();
    		});
  • Entwicklung Firefox

    • bege
    • 10. April 2025 um 12:04
    Zitat von Sören Hentzschel

    Das Thema CSP und das Anpassen von Inline-Event-Handlers war in den letzten Wochen und Monaten in Zusammenhang mit den Scripts ja relativ präsent in diesem Forum. Wer sich etwas für die Hintergründe interessiert, wieso Mozilla das gemacht hat (Mozilla selbst musste über 600 Inline-Event-Handler umstellen!), bekommt in Mozillas Sicherheits-Blog etwas Lesematerial:

    https://attackanddefense.dev/2025/04/09/har…y-policies.html

    Danke, Sören!

    Ich habe in dem Text nicht verstanden, warum die Inline Eventhandler entfernt wurden. Dort steht doch, dass sie mit einer CSP gegen Missbrauch abgesichert werden können. Ich habe da noch eine Verständnislücke.

  • addons_very_day_updatecheck.uc.js tut nicht mehr

    • bege
    • 29. März 2025 um 22:07
    Zitat von milupo

    Kommt darauf an. Was steht denn bei dir in Zeile 10? Es gibt ja immer mal wieder Skriptversionen mit unterschiedlicher Zeilennummerierung. Steht da vielleicht:

    JavaScript
    this.EXPORTED_SYMBOLS = ["AboutAddonsVerboseChild"];

    Entschuldigung, deine Antwort ist bei mir untergegangen. Ja, das ist die Zeile.

  • addons_very_day_updatecheck.uc.js tut nicht mehr

    • bege
    • 18. März 2025 um 22:30

    Ich sehe in der Konsole diese Fehlermeldung:

    undefined has no properties addons_ver_day_updatecheck.uc.js:10:5

    Kann damit jemand was anfangen?

  • Fx 136: Skript SaveTo.uc.js Popup-Menü kann nicht mehr gescrollt werden.

    • bege
    • 10. März 2025 um 17:29
    Zitat von 2002Andreas
    Zitat von bege

    kann ich das Popup-Menü nicht mehr scrollen.

    Teste bitte mal dieses angepasste Skript: ...

    Solltest du in der userChrome.css einen Code für die Scrollleiste haben, den dann bitte mal entfernen.

    Die ist jetzt im Skript enthalten, Zeile 54 - 60. Dort kannst du dir die Höhe vom Popup noch anpassen.

    Funktioniert! Dankeschön! Edit: auch ohne Zeile 8. HelperAppDlg wird nirgendwo verwendet.

    Edit:

    Es hat bis vor einiger Zeit noch funktioniert. Wenn ich das mit dem von lenny2 zitierten Thema vergleiche, sieht es so aus, als hätte ich mir die bereits geänderte Version irgendwie zerschossen. Dann lag es wohl nicht am Fx-Update.

  • Fx 136: Skript SaveTo.uc.js Popup-Menü kann nicht mehr gescrollt werden.

    • bege
    • 9. März 2025 um 21:05

    Im Skript SaveTo.uc.js kann ich das Popup-Menü nicht mehr scrollen. Dadurch komme ich in einem Menü mit vielen Einträgen nicht mehr an die unteren Einträge heran. Das könnte auch schon im Fx135 so gewesen sein.

    In der Version im Github von Endor ist das auch so.

    Hier meine Version

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

    • bege
    • 7. März 2025 um 16:57

    Dieses Skript spielt keinen Ton mehr ab, wenn ein Download fertig ist, seit dem Update auf Fx 136.

    JavaScript: downloadSoundPlay.uc.js
    // ==UserScript==
    // @name           downloadSoundPlay_Fx26.uc.js
    // @namespace      http://space.geocities.yahoo.co.jp/gl/alice0775
    // @description    Downloads überwachen und Ton Dateien für Download-Manager abspielen
    // @include        main
    // @compatibility  Firefox 115
    // @author         Alice0775
    // @version        2023/10/13 use ChromeUtils.import instead of XPCOMUtils.defineLazyModuleGetter
    // @version        2016/03/15 hack of selection chanhe
    // @version        2015/01/15 1:00 Fixed strictmode
    // @version        2013/12/18 11:00 defineLazyModuleGetter for Firefox26
    // @version        2013/12/18 Firefox26
    // @version        2009/11/28
    // ==/UserScript==
    
    var downloadPlaySound = {
      // -- config --
      DL_START : null,
      DL_DONE  : "file:///C:/WINDOWS/Media/tada.wav",
      DL_CANCEL: null,
      DL_FAILED: "file:///C:/Windows/Media/XP/Windows Error.wav",
      // -- config --
    
      _list: null,
      init: function sampleDownload_init() {
        const { Downloads } = ChromeUtils.import(
        "resource://gre/modules/Downloads.jsm");
    
        //window.removeEventListener("load", this, false);
        window.addEventListener("unload", this, false);
    
        //**** Download-Überwachung hinzufügen
        if (!this._list) {
          Downloads.getList(Downloads.ALL).then(list => {
            this._list = list;
            return this._list.addView(this);
          }).then(null, Cu.reportError);
        }
      },
    
      uninit: function() {
        window.removeEventListener("unload", this, false);
        if (this._list) {
          this._list.removeView(this);
        }
      },
    
      onDownloadAdded: function (aDownload) {
        //**** Startereignis herunterladen
        if (this.DL_START)
          this.playSoundFile(this.DL_START);
      },
    
      onDownloadChanged: function (aDownload) {
        //**** Download abbrechen
        if (aDownload.canceled && this.DL_CANCEL)
          this.playSoundFile(this.DL_CANCEL)
        //**** Herunterladen fehlgeschlagen
        if (aDownload.error && this.DL_FAILED)
          this.playSoundFile(this.DL_FAILED)
        //**** Download abgeschlossen
        if (typeof aDownload.downloadPlaySound == "undefined" &&
            aDownload.succeeded && aDownload.stopped && this.DL_DONE) {
          aDownload.downloadPlaySound = true;
          this.playSoundFile(this.DL_DONE);
        }
      },
    
      playSoundFile: function(aFilePath) {
        if (!aFilePath)
          return;
        var ios = Components.classes["@mozilla.org/network/io-service;1"]
                  .createInstance(Components.interfaces["nsIIOService"]);
        try {
          var uri = ios.newURI(aFilePath, "UTF-8", null);
        } catch(e) {
          return;
        }
        var file = uri.QueryInterface(Components.interfaces.nsIFileURL).file;
        if (!file.exists())
          return;
    
        this.play(uri);
       },
    
      play: function(aUri) {
        var sound = Components.classes["@mozilla.org/sound;1"]
                  .createInstance(Components.interfaces["nsISound"]);
        sound.play(aUri);
      },
    
      handleEvent: function(event) {
        switch (event.type) {
          case "unload":
            this.uninit();
            break;
        }
      }
    }
    downloadPlaySound.init();
    Alles anzeigen

    Die Fehlerkonsole wirft den Fehler aus, dass in Zeile 26 ChromeUtils.import keine Funktion ist.

    Nach der Änderung in ChromeUtils.importESModule kommt die Fehlermeldung

    "Failed to load resource://gre/modules/Downloads.jsm"

    Edit: Doch noch selbst herausgefunden. Das hier funktioniert.

    JavaScript: downloadSoundPlay.uc.js
    // ==UserScript==
    // @name           downloadSoundPlay_Fx26.uc.js
    // @namespace      http://space.geocities.yahoo.co.jp/gl/alice0775
    // @description    Downloads überwachen und Ton Dateien für Download-Manager abspielen
    // @include        main
    // @compatibility  Firefox 115
    // @author         Alice0775
    // @version        2023/10/13 use ChromeUtils.import instead of XPCOMUtils.defineLazyModuleGetter
    // @version        2016/03/15 hack of selection chanhe
    // @version        2015/01/15 1:00 Fixed strictmode
    // @version        2013/12/18 11:00 defineLazyModuleGetter for Firefox26
    // @version        2013/12/18 Firefox26
    // @version        2009/11/28
    // ==/UserScript==
    
    var downloadPlaySound = {
      // -- config --
      DL_START : null,
      DL_DONE  : "file:///C:/WINDOWS/Media/tada.wav",
      DL_CANCEL: null,
      DL_FAILED: "file:///C:/Windows/Media/XP/Windows Error.wav",
      // -- config --
    
      _list: null,
      init: function sampleDownload_init() {
        const { Downloads } = ChromeUtils.importESModule(
        "resource://gre/modules/Downloads.sys.mjs");
    
        //window.removeEventListener("load", this, false);
        window.addEventListener("unload", this, false);
    
        //**** Download-Überwachung hinzufügen
        if (!this._list) {
          Downloads.getList(Downloads.ALL).then(list => {
            this._list = list;
            return this._list.addView(this);
          }).then(null, Cu.reportError);
        }
      },
    
      uninit: function() {
        window.removeEventListener("unload", this, false);
        if (this._list) {
          this._list.removeView(this);
        }
      },
    
      onDownloadAdded: function (aDownload) {
        //**** Startereignis herunterladen
        if (this.DL_START)
          this.playSoundFile(this.DL_START);
      },
    
      onDownloadChanged: function (aDownload) {
        //**** Download abbrechen
        if (aDownload.canceled && this.DL_CANCEL)
          this.playSoundFile(this.DL_CANCEL)
        //**** Herunterladen fehlgeschlagen
        if (aDownload.error && this.DL_FAILED)
          this.playSoundFile(this.DL_FAILED)
        //**** Download abgeschlossen
        if (typeof aDownload.downloadPlaySound == "undefined" &&
            aDownload.succeeded && aDownload.stopped && this.DL_DONE) {
          aDownload.downloadPlaySound = true;
          this.playSoundFile(this.DL_DONE);
        }
      },
    
      playSoundFile: function(aFilePath) {
        if (!aFilePath)
          return;
        var ios = Components.classes["@mozilla.org/network/io-service;1"]
                  .createInstance(Components.interfaces["nsIIOService"]);
        try {
          var uri = ios.newURI(aFilePath, "UTF-8", null);
        } catch(e) {
          return;
        }
        var file = uri.QueryInterface(Components.interfaces.nsIFileURL).file;
        if (!file.exists())
          return;
    
        this.play(uri);
       },
    
      play: function(aUri) {
        var sound = Components.classes["@mozilla.org/sound;1"]
                  .createInstance(Components.interfaces["nsISound"]);
        sound.play(aUri);
      },
    
      handleEvent: function(event) {
        switch (event.type) {
          case "unload":
            this.uninit();
            break;
        }
      }
    }
    downloadPlaySound.init();
    Alles anzeigen
  • Wie kann man Buttons in der Firefox-eigenen Sidebar verstecken?

    • bege
    • 10. Februar 2025 um 14:24
    Zitat von 2002Andreas

    Hier wird beschrieben, was du dazu brauchst:

    Manchmal frage ich mich, warum Leute Artikel nicht bis zum Ende lesen. Heute frage ich mich das über mich selbst. Da steht es am Ende. 🙄

    So, Button weg, User zufrieden! Dankeschön euch!

  • Wie kann man Buttons in der Firefox-eigenen Sidebar verstecken?

    • bege
    • 10. Februar 2025 um 14:11
    Zitat von milupo

    Es sieht so aus, als ob die Elemente unter #shadow-root liegen, sprich, CSS-Anweisungen müssen in die userChromeShadow.css und nicht in die userChrome.css.

    Wenn ich das Skript zum Laden der userChromeShadow.css doch mal brauche, wie muss dieses Skript aussehen? Der verlinkte Code von aborix ist nur ein Schnipsel.

  • Wie kann man Buttons in der Firefox-eigenen Sidebar verstecken?

    • bege
    • 10. Februar 2025 um 14:08
    Zitat von 2002Andreas

    So wäre der Eintrag für eine Erweiterung:

    CSS
    .tools-and-extensions > moz-button[view="_143f479b-4cb2-4d8c-8c31-ae8653bc6054_-sidebar-action"] {
      display: none !important;
    }

    Ich lade die CSS-Dateien mit dem userCSSLoader. Mit der Datei, in die ich den Code eingefügt hatte, funktioniert etwas nicht. In einer neuen Datei klappt's. Vielen Dank!

  • Wie kann man Buttons in der Firefox-eigenen Sidebar verstecken?

    • bege
    • 10. Februar 2025 um 13:38
    Zitat von milupo

    Es sieht so aus, als ob die Elemente unter #shadow-root liegen, sprich, CSS-Anweisungen müssen in die userChromeShadow.css und nicht in die userChrome.css.

    Weil im angepinnten Beitrag von BrokenHeart steht:

    Zitat von BrokenHeart

    Die neue Methode um 'css'-Regeln anzuwenden, wird nur für Regeln benötigt, die einen ::part() Selektor beinhalten.

    dachte ich, das gilt hier nicht. Ist diese Einschränkung überholt?

    Zitat von grisu2099

    Klappe mal bitte den genauen Bereich im Inspektor weiter auf - also unter moz-button... Vielleicht sehe ich dann eine Möglichkeit..

    Es geht um den hier:

  • Wie kann man Buttons in der Firefox-eigenen Sidebar verstecken?

    • bege
    • 10. Februar 2025 um 13:20

    Ich möchte gern einen Button in der Sidebar, den eine Erweiterung einfügt, verstecken. Die normale Methode mit CSS und display: none !important; funktioniert nicht. Weiß jemand Rat?

    Hier der Bereich im Inspektor

    Es betrifft die moz-button.

  • Entwicklung Firefox

    • bege
    • 6. Februar 2025 um 21:05
    Zitat von Sören Hentzschel

    Ich mag das neue Firefox-Logo. :)

    Ich finde es sieht so aus, als ob er gleich runterfällt, der Arme. 😢

  • Clickbares Panel verschiebbar machen?

    • bege
    • 6. Februar 2025 um 20:54
    Zitat von .DeJaVu

    Aktuell ist Firefox 135. Wenn du jetzt für v134 anpackst, kannst du für v135 wieder alles neu denken.

    Ich habe mich vertippt, ich habe Fx 135 und deswegen alle Skripte aktualisiert.

    Verschiebbar konnte ich es mit einigen Versuchen machen, aber der Text wurde dann nicht mehr angezeigt

  • Clickbares Panel verschiebbar machen?

    • bege
    • 5. Februar 2025 um 21:56

    Hallo,

    kann mir jemand dabei helfen, dieses clickbare Panel verschiebbar zu machen? Bisher wird es über die ID eines benachbarten Elements positioniert. Ich würde es gern wie einen Button verschiebbar machen. Geht das?

    JavaScript
    // ==UserScript==
    // @name           VersionInAddonBar.uc.js
    // @description    Versionsnummer in der Addon-Bar anzeigen
    // @include        main
    // @charset        UTF-8
    // @note           Basiert auf dem Script MemoryMonitorMod.uc.js und der Erweiterung "Version in Statusbar"
    // @note           Bit-Version aus https://www.camp-firefox.de/forum/thema/135247-anwendungsname-und-version-in-der-men%C3%BCleiste/
    // @note           In Zeilen 17 u. 18 die Toolbar und die Position (hinter welchem Element) auf der Toolbar anpassen.
    // @note           Ein Klick auf den Button öffnet das Fenster "Über Firefox".
    // ==/UserScript==
    
            setTimeout(function() {
    
    var ucjsVN = {
    
        init : function () {
           let profile = Cc["@mozilla.org/toolkit/profile-service;1"].getService(Ci.nsIToolkitProfileService).currentProfile.name;
            var Toolbar = 'addonbar';
    		  var Position = 'customizableui-special-separator177';
            // var Position = 'formhistory_yahoo_com-browser-action';
            // var Position = 'textarea-cache-lite_wildsky_cc-browser-action';
            var info = Components.classes['@mozilla.org/xre/app-info;1'].getService(Components.interfaces.nsIXULAppInfo);
            var bit = (Services.appinfo.is64Bit ? 64 : 32);
            var versionPanel = document.createXULElement('toolbaritem');
            versionPanel.id = 'VersionDisplay';
            versionPanel.setAttribute('tooltiptext', 'Versions-Nummer. Klick öffnet "Über ' + info.vendor + ' ' + info.name + '"');
            versionPanel.addEventListener('click', function () {
              openAboutDialog();
            });
            versionPanel.style.paddingTop = '4px';
            var label = document.createXULElement('label');
            label.setAttribute('value', "v" + info.version + " (" + bit + "bit)" + " [" + profile + "]");
            versionPanel.appendChild(label);
            document.getElementById(Toolbar).insertBefore(versionPanel, document.getElementById(Position).nextSibling);
        },
    }
    ucjsVN.init();
    }, 3000);
    Alles anzeigen
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • bege
    • 2. Februar 2025 um 12:37

    Ich kann die verschiedenen Bedürfnisse verstehen. Wenn es in dem von 2002Andreasgenannten Thema Beschwerden gab und in diesem hier nicht, wäre ich dankbar, die beiden Themen entsprechend unterschiedlich zu behandeln. Da wir auf das Github von Endor angewiesen sind, bitte ich, auch seine Meinung zu berücksichtigen.

    Danke euch beiden für die hilfreiche Arbeit. 💛

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

    • bege
    • 1. Februar 2025 um 22:57
    Zitat von 2002Andreas

    Nur mal so als Hinweis.

    Bitte für Fragen bei Problemen mit Skripten etc., einen eigenen neuen Thread erstellen, und nicht alles in diesem Sammelthread posten, danke.

    Es wurden seit Jahren in diesem Thema Skript-Probleme vor allem mit den Skripten ursprünglich aus Ardimans, jetzt aus Endors Github diskutiert. Ich gebe zu, dass mein letzter Beitrag hier zu einem Skript von Aris war, aber das Problem betraf alle Skripte für zusätzliche Addon-Leisten. Es stimmt, man kann das in einzelnen Themen behandeln. Da ich nicht laufend hier im Forum unterwegs bin, war es für mich hilfreich, dass ich immer wusste, wo ich nach Lösungen für nicht mehr funktionierende Skripte suchen konnte. Und vor allem, ich hatte dieses Thema abonniert, so konnte ich die Benachrichtigungsmails überfliegen und sehen, ob ein Update zu neuen Problemen geführt hat. Wenn das jeweils in neuen Themen behandelt wird, bekomme ich diese E-Mails nicht mehr. Ich fände das schade und für mich deutlich aufwändiger. Ich hoffe, dafür gibt es noch einen einfachen Weg.

    Wofür ist dann in Zukunft dieses Thema gedacht?

  • "Neues", altes Appmenu. Update, und bräuchte Hilfe!

    • bege
    • 1. Februar 2025 um 22:42

    Mira_Belle

    Das ist ja genial, dass du die chrome://browser/content/browser-menubar.js direkt einliest. Ich hatte sie bisher in ein Skript kopiert und hätte das bei Änderungen im Zusammenhang mit Updates immer händisch ändern müssen. Dankeschön!

    Mit dieser abgespeckten Version kann ich das Skript für das ursprüngliche App-Menu-Skript verwenden, das ich ja auch mit einem weiteren Skript u.a. um die Menüeinträge erweitert habe.

    Ich verstehe zwar nur den oberen Teil, aber es funktioniert! 👍

    JavaScript
    (function () {
        setTimeout(async function () {
            
            // bind event
            let source = await readSource('chrome://browser/content/browser-menubar.js');
            source = source.replace("main-menubar", "AMpopup").replace({ once: true }, '')
            eval(source);
            async function readSource (url) {
                return new Promise(resolve => {
                    let xhr = new XMLHttpRequest();
                    xhr.open('GET', url);
                    xhr.onload = function () {
                        resolve(xhr.responseText);
                    };
                    xhr.send();
                });
            }
        }, 300);
    })();
    Alles anzeigen

Unterstütze uns!

Jährlich (2025)

82,4 %

82,4% (535,86 von 650 EUR)

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