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
    • 8. Mai 2025 um 22:07
    Zitat von pro100user

    Bitte helfen Sie, das Problem mit dem Skript auf FF 138.0.1 zu lösen. Partition Übergang funktioniert nicht, nicht öffnen Explorer.

    Hier https://github.com/Endor8/userChr…35/saveto.uc.js findest du eine funktionierende Version.

  • Diskussion über neues Unterforum nur für Skripte

    • bege
    • 8. Mai 2025 um 21:57
    Zitat von Horstmann

    Und nur mal 2 Beispiele:

    Diese schon öfters erwähnte Thread ist gepackt voll mit super Infos zu der addEventListener Geschichte, aber immens aufgebläht durch die Einzelscript Diskussionen.

    Hier haben wir wichtige Infos zu eval etc., die in einem Script spezifischen Thread versteckt sind.

    Das sind für mich 2 typische Beispiele: Die Themen wurden erstellt, weil Skripte nach Firefox-Updates nicht mehr funktionierten. Das ist nach meiner Beobachtung die Regel. Im Verlauf der Diskussion wurden die nötigen Änderungen herausgefunden und in die Skripte integriert. Dass in dem Thema auch für die folgenden Firefox-Versionen grundsätzliche Informationen stehen, weiß man beim Erstellen des Themas noch nicht. Um solche Themen übersichtlich in einem Unterforum darzustellen, müsste also ein Moderator die Themen durchforsten und dann umbenennen und - oft nur zum Teil - verschieben. Und nach diversen Firefox-Updates ist manches schon wieder anders.

    Die weniger aufwändige Möglichkeit, mit der Tendenz des Lebens zum Chaos umzugehen, ist wie bisher mit vertretbarem Zeitaufwand die Forensuche zu nutzen.

  • Diskussion über neues Unterforum nur für Skripte

    • bege
    • 8. Mai 2025 um 19:27
    Zitat von 2002Andreas

    Inzwischen sind hier auch schon mehr als 10 Beiträge drin, die nichts mit dem Thema zu tun haben ;)

    Würdest du die einschließlich diesem hier bitte auch auslagern? Dann bleibt dieses Thema übersichtlich.
    Diese Diskussion hatten wir schon mal um das Skript-Diskussionen-Sammelthema und es gibt weiterhin beides: Einzelne und Sammelthemen. Und ich hoffe, dass das so bleibt. Es gab schon in der anderen Diskussion unterschiedliche Auffassungen dazu.

  • 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

Unterstütze uns!

Jährlich (2025)

101,9 %

101,9% (662,48 von 650 EUR)

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