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

Beiträge von ufo1024k

  • Firefox v137.0a1-_addmenu.js funktioniert nicht mehr

    • ufo1024k
    • 4. Februar 2025 um 22:08

    Firefox v137.0a1-_addmenu.js funktioniert nicht mehr

    JavaScript
    //添加标签右键菜单项
    new function () {
        var items = [
    {
    label : "关闭重复标签",
    id:"context_CloseSameTab",
        image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAkUlEQVQ4jc3SPQrDMAwF4G/Kks1rT5MDhRwgB+vaHsFTltwlHaqCMXFTSCkVCMzTz3uSxT9ahxEZW3gOrDsqvmDFFQP68CGwNXKazCvmNwQzllZwDBYhOxWxFBjcMe01yCG1LEjVW+Tsqtg8561ZazV9oea7DU6P8OkSbxpLPP2NnDykUskUTK8lLoEdnvLv7QFhATCavYcOYgAAAABJRU5ErkJggg==",
    oncommand : function () {
        var num = gBrowser.browsers.length;
        var msg = "";
        for (var i = 0; i < num; i++)
        {
            var a = gBrowser.getBrowserAtIndex(i);
            try
            {
                for (var j = 0; j < num; j++)
                {
                    if (j != i)
                    {
                        var b = gBrowser.getBrowserAtIndex(j);
                        if (a.currentURI.spec == b.currentURI.spec)
                        {
                            //gBrowser.alert(a.currentURI.spec);
                            if (msg != "")
                                msg += "\n";
                            msg += b.currentURI.spec;
                            gBrowser.removeTab(gBrowser.tabContainer.childNodes[j]);
                            num--;
                            j--;
                            //Not executing "i--" because there won't be tabs equal before the one on i
                        }
                    }
                }
            }
            catch(e)
            {
                Components.utils.reportError(e);
            }
        }
        if (msg != ""){
            //alert("\u5173\u95ED\u7684\u91CD\u590D\u6807\u7B7E\u9875:\n\n" + msg);
            }
        else
            alert("\u6CA1\u6709\u91CD\u590D\u6807\u7B7E\u9875");
    },
    },{
        command:"context_closeTabsToTheEnd",
        image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAOUlEQVQ4jWNgGGzgPxQPNwPyGBhyGRgY/kNp8lwAMySTgaGNGAPwYnwuoZoLsGqmKAyIBQNvwBAEAIkvKboNt20DAAAAAElFTkSuQmCC"
        },{
        command:"context_closeLeftTabs",
        image:"",
        },
        {
            label: "关闭左侧标签",
        id:"context_closeTabsToTheFirst",
            image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEUAAABuAABpAAAAAACOszMyAAAAA3RSTlMAbYYu/vchAAAAH0lEQVQI12NABswHkIkSIMF0AUiw//8PYkHF0NWhAgAbAQzws7ptnwAAAABJRU5ErkJggg==",
            oncommand: function closeTabsToTheFirst() { for (let i = TabContextMenu.contextTab._tPos - 1; i >= 0; i--) if (!gBrowser.tabs.pinned){ gBrowser.removeTab(gBrowser.tabs, {animate: true});}}
    },
    {
            command:"context_closeOtherTabs",
        image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAATElEQVQ4jdXSQQrAMAhE0edxs0iOkWvbVQsFs2m7aD64cWQcRH5NkEFuYjDoQQ76yqCaAY1ZCVWC06Qxb40ndS18leCTG6zY7A/25QBZhDm3YCnePQAAAABJRU5ErkJggg==",
        },
    {
            label: "关闭所有标签",
        id:"context_closeAllTabs",
            oncommand: "gBrowser.removeAllTabsBut(gBrowser.mCurrentTab); gBrowser.removeCurrentTab();",
        image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAP0lEQVQ4jWNgGHbgPwMDgz0eeXuoGoIKsBmCT46gQqI1Y9NAsmZ0Q8jSTLEBFHmBokCkOBqpkpAIAbJihHYAAKNEHEuIZ/qnAAAAAElFTkSuQmCC",
        },
      
        ];
        var menu = TabMenu({id:"context_CloseTab", onpopupshowing: syncHidden});
        menu(items);
    };
      
      
    new function () {
        var items = [
        {label:"复制当前标签【标题】",
        oncommand: function() {addMenu.copy(addMenu.convertText("%TITLE%"));},
        image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAXElEQVQ4jWNgGCzgPxZMSA2GJKkWEmXAfwYGBg9yDfBgYGCYCcXEWogCjjIwMChDaZIBssY8KCYJ5DGghjhJrlBmwPTjTKg4ToCsAVvAeaCJ0S8dkGQARUl54AAAWsMsNkwmkt8AAAAASUVORK5CYII="},
        {label:"复制当前标签【地址】",oncommand: function() {addMenu.copy(addMenu.convertText("%URL%"));},image:""},
        {label:"复制当前标签标题和地址",
        oncommand: function() {addMenu.copy(addMenu.convertText("%TITLE%\n%URL%"));},image:""},
        {label:"复制当前标签源代码",oncommand: function() {addMenu.copy(addMenu.convertText( '<a href="%URL%" target="_blank">%TITLES%</a>'));},image:""},
    {},
    {label:"复制所有标签标题",oncommand: function() {(function(){
                            var gClipboardHelper = Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper);
                var titles = "";
                gBrowser.tabs.forEach(function(tab) {
                    titles += tab.label + "\n";
                });
                gClipboardHelper.copyString(titles);  
        })();},image:""},
            {label:"复制所有标签地址",oncommand: function() {(function(){
                var gClipboardHelper = Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper);
                var URLs = "";
                gBrowser.tabs.forEach(function(tab) {
                    var url = gBrowser.getBrowserForTab(tab).currentURI.spec;
                    URLs += url + "\n";
                });
                gClipboardHelper.copyString(URLs);    
        })();},image:""},
            {label:"复制所有标签标题和地址",oncommand: function() {(function() {
                var gClipboardHelper = Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper);
                                                    var txt = "";
                gBrowser.tabs.forEach(function(tab) {
                     var url = gBrowser.getBrowserForTab(tab).currentURI.spec;
                    txt += tab.label + "\n" + url + "\n";
                });
                gClipboardHelper.copyString(txt);
            })();},image:""},
            {label:"复制所有标签HTML链接",oncommand: function() {(function() {
                var gClipboardHelper = Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper);
                var txt = "";
                gBrowser.tabs.forEach(function(tab) {
                     var url = gBrowser.getBrowserForTab(tab).currentURI.spec;
                    txt += "<a href=" + "\""+ url +"\" "+  "target=\"_blank\">" +  tab.label + "</a>"+ ""+ "\r";
                });
                gClipboardHelper.copyString(txt);
            })();},image:""},
      
        {},
        {
            label:"复制 Favicon 的 URL",
            text:"%FAVICON%",
            image:" "
        }, {
            label:"复制 Favicon 的 Base64",
            text:"%FAVICON_BASE64%",
            image:" "
        }
        ];
        var menu = TabMenu({id:"context_TabInfoCopy",onpopupshowing: syncHidden});
        menu(items);
    };
      
      
      
      
      
      
    //复制链接文本地址
    new function () {
        var items = [
        {
            label:"复制链接地址(A)",
            command:"context-copylink",
            image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABFklEQVQ4T6XTvSuGURzG8c+zGxnIoCgbCyUGiUnJSylSDFIGmZWUEjbFaFCUmESUxcugsBhkpSz4FwwGnTp33Y/u57nVfbbz8vv+znWd65QUHKWC9f4DaMc2OvCGTRwnjfMAwzjEMg7Qi10sYS9AqgFGY9EIrlNSJ7GK1jxAExpwj3p8RUhbXKupBOjGJ95jwRzW0IifKGcIXVmAfpxiBicIxTvowyMSTwbivMyDQLxB0HiGBWxhEFcYw36c32W9wgPOsYG6KGEq3iicb0Ft0jkL8I1OvMTNxLgefKQ8Kcte+hlfsYKj1IngSZAzgYus1KYBszFl87jFNNYxjstKkf8bpGBgSFkznrCI52r/JS/KuX+tMOAX/9gzEZGy3OQAAAAASUVORK5CYII="
        },
        {
            label:"复制链接文本",
            text:"%LINK_TEXT%",
            image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA/0lEQVQ4T6XTsStFYRjH8c/9SzDJYJDFIAausitGBgOLwT/AYuCKQSmjhUERmxR/giiMymIUmQz06L11ei+9p+5bZzrP++37/H7nNHR5GpX7OxiqwfvAHD5jtgp4xi5uC5Br9CHmOwDzuCkAvkuAcaz9AblCE0VA1wY9WEgGF9jObIoGEU5vuvSKpwwQhtFCvKsV4gQ2U3BnaOGhDc1rzFsYxSmWECFOYj+F+Vt3CXCOExwistnAJabTGkXAPRaxh/cEiN2PMFjH4BiPaecRrGIZY/8ZvCGeOF9YwR0OkvoUZjCMl9xgFgOVyqLv9aQa30V/qnSrXWEOqPEjdo78AAIxShEhs/7CAAAAAElFTkSuQmCC"
        },
        {
            label:"复制链接文本+地址",
            text:"%LINK_TEXT%\n%l",
            image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAPklEQVQ4jWNgoCL4TyQWwGcAIQtgNFZDiDUAp1piDEDGBA3A6VdCBhAKRIIGEAOGqAuINoBiFwysAaRg6gAAE7tI6EZZDKkAAAAASUVORK5CYII="
        },
        {
        label: "复制链接源代码",
        tooltiptext: "左键:HTML代码\n中键:UBB代码\n右键:MD代码",
        onclick: function(event) {
            var formats = [
               '<a href="%l" target="_blank">%LINK_TEXT%</a>',
                "%RLT_OR_UT%",
                "[%RLT_OR_UT%](%RLINK_OR_URL%)",
            ];
            var str = addMenu.convertText(formats[event.button]);
            addMenu.copy(str);
            if (event.button === 1) { // 中键点击后自动关闭菜单
                document.getElementById("contentAreaContextMenu").hidePopup();
            }
        },
        image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAAAAAABmZmbc3Ny3t7eRkZE6OjpRDxSxAAAAAXRSTlMAQObYZgAAADJJREFUCNdjwASCECDAIADhY2UwMQoKsgqAGUyMJiAGoyATYzJMhEEYxhDAoh1hBQYAAPxVA4qkxzcpAAAAAElFTkSuQmCC"
    },
          
              
              
              
    ];
        var menu = PageMenu({ condition:'link', insertBefore:'context-openlink',icon:'image',   image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABdklEQVQ4T43TPUiXURTH8Y9pJSpFIEKamxAYhEO1ikOQFAlODTkIgr1gRQSlEA2CvUCUREWBEjQ4FYHoII7i4mpLU0VDRNbQC9WgceI88OchX+723Ht/33t+v3OeKltbO9CGarzB70JWtQX9cTzHnrz7Ew9wI0CbAU6neBUv8AsnEnYTI5sBDqAD77CQFezGMprRtB4g9g+hDq/xuWT1Ic7hWBkQ30O4gtYURfkvcQYruTeFU2VAiCfQjz94gm3owy7cwVV0YT470VJUUCmOFp3EXL4WlYzhPA5jBjtxGfcKwFk8wg90YwmjKfyaoEg/rGzHJAawFoB6fEQtOrGI+7iYoFk0YhA1eJwB/uMG4GiW+yz9x35TZhBWIodYa7iN4cqOBKAHr3A3068834v9GVj0/lt5cgOwD2/xHgfxPS8dQUva+LDeyBchjuMCvmAaDehNi9ey9P8yCkC05RYuVdz6hOt4utEPV57EeLk9RzdsxRRuuP4CTWBJwwkoqucAAAAASUVORK5CYII=",onpopupshowing: syncHidden });
        menu(items);
        items.forEach(function(it){
            if (it.command)
                css('#contentAreaContextMenu[addMenu~="link"] #' + it.command + '{ display: none !important; }')
        });
    };
      
      
    //图片
    new function () {
        var items = [
        {command: 'context-saveimage',
         image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAnElEQVQ4jWNgGCzgAwMDw38S8XtkA/6TYel/bJwEqMn7GRgYBAgYsAGbAR8YGBgMoJIFBAxAkYcZcIGBgWE91BUOeDQvYMDhBQGoyQ5Ql2AzpABqEVYDYCCBAeKdD1A2DARAxQTwGQDTbADFFxgYGOZD2Q+gNIalyLGArAjmrQNQNQlY9GAYgCv6DND4eMOAGICih5yk/IEMS2kAABDmRWASmruSAAAAAElFTkSuQmCC"
        },
        {command: 'context-reloadimage'},
        {command: 'context-copyimage'},
          
        {command: 'context-copyimage-contents'},
        {command: 'context-viewimageinfo'},
      
          
              
    ];
          
        var menu = PageMenu({ condition:'image', id:'context-copyimage_new',insertAfter:'context-viewimage', icon:'image',  image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAQCAYAAAAbBi9cAAABqUlEQVQ4T7WTO0gDQRCG/9lNULAQUQRBNF6SixYicuYKsRYrbWwELaKWqWxsLLQQH51Ya5HGUgVBBAtRRDT4KDUPLAw2FmKKJODdjlyCcD5OouBWy87MN49/luBx9JCZIHCb22xDDGcy5/nvQsgTFOyLg0ST214oyZVc7qzovGma0eYTctK528wbpIfMeS/Yt5lttQWBJhBNgShW9mFsUiRs8m9AYDUCiC4Qlt1x/wKavUtfrFZbna4ZAyTlSdlfqQF3RbNQ6hREi47NYkxks8mHTs3oVkLGCBxkxrEiK5HJXD9pmlEvBPVWEsurjyBL7bIUY45JFLH+Wms1SPLdArgH+ADAMIieX/Kl/ro6f+MH1VzD/tKaHoouEGH6Lp1sdbQJBAK1Nf7mJ4Dn2FaXnq19nlEkaK6w4N5UOjn4Pjs9bN6AsQNlH/4CFB1ioj1AxSB4n1mOCvAav6oeZ5eqBgEgPRidIYElgPxgLjDTeCp7sf2jal7yt7cbLT6f6CgW1c3j42XBadMTxOBDMJ1Wu0flD/3+RT7tUbWMr35lUCh69HdCJdJijr8BP9bKXB0KZjgAAAAASUVORK5CYII=",onpopupshowing: syncHidden});
        menu(items);
        items.forEach(function(it){
            if (it.command)
                css('#contentAreaContextMenu[addMenu~="image"] #' + it.command + '{ display: none !important; }')
        });
    };
      
    //快捷回复
    new function(){
        var items = [
            {
            label: "当前日期 & 时间",
            condition: "input",
            position: 2,
            oncommand: function() {
                var localnow = new Date();
                var yy = localnow.getFullYear();
                var mm = localnow.getMonth()+1;
                if(mm < 10) mm = '0' + mm;
                var dd = localnow.getDate();
                if(dd < 10) dd = '0' + dd;
                var hh = localnow.getHours();
                if(hh < 10) hh = '0' + hh;
                var mi = localnow.getMinutes();
                if(mi < 10) mi = '0' + mi;
                var localnowstr = '【' + yy + '.' + mm + '.' + dd + ' & ' + hh + ':' + mi + '】';
                addMenu.copy(localnowstr);
                goDoCommand("cmd_paste");},
            image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADASURBVDhPtZPNCYQwEIVTi/V4yE0I5ObVElKBhdhAzmIDKcACUsfbvGEM7G4WNqz7YJifzPuMguYWWWv3EuiMXe0CgHMO2hrWrdBjOadH25sA8zx3xRtAy6/1H0DOGSEEjOOIdV3rAmvOYox11gSklMSoiziOA9u2YRgGyZyd5ym7TcAlgkoC88ttBMriI0AXqqkLoNerS9SyLPDeg9+ntHIrzpsAfVINgq7XYRBWsqgJ6NGTZ5qm7p+JHrX/ImMenDoO+LcxQdwAAAAASUVORK5CYII="
            },
            {label:"Outlook~~~",input_text: "xxxxxx@outlook.com",accesskey: "1",image:" "},
            {label:"Gmail~~~",input_text: "xxxxxx@gmail.com",accesskey: "2",image:" "},
            {label:"xxxxxx",input_text: "xxxxxx@outlook.com",accesskey: "3",image:" "},
            {},
            {label:"数字补丁.exe", input_text: "数字补丁.exe",accesskey: "H",image:" "},
            {label:"谢谢你的解答~~~", input_text: "非常感谢您的解答!!!",accesskey: "T",image:" "},
            {label:"亲,要的就是~~~", input_text: "亲,要的就是这个,非常感谢!!!",accesskey: "D",image:" "},
            {label:"不用客气~~~", input_text: "不用客气,大家互相帮助……\n\u256E\uFF08\u256F\u25C7\u2570\uFF09\u256D",accesskey: "Y",image:" "},
            {label:"看起来很不错~~~", input_text: "看起来很不错哦,收藏备用~~~\n谢谢LZ啦!!!",accesskey: "G",image:" "},
            {label:"谢谢楼主分享~~~", input_text: "谢谢楼主的分享!这个绝对要顶!!!",accesskey: "F",image:" "},
            {label:"楼上正解~~~", input_text: "楼上正解……\u0285\uFF08\u00B4\u25D4\u0C6A\u25D4\uFF09\u0283",accesskey: "R",image:" "},
            {label:"坐等楼下解答~~~", input_text: "坐等楼下高手解答~~~⊙_⊙",accesskey: "V",image:" "},
            {},
            {label:"这个要支持~~~", input_text: "很好、很强大,这个一定得支持!!!",accesskey: "A",image:" "},
            {label:"不明真相的~~~", input_text: "不明真相的围观群众~~~\u0285\uFF08\u00B4\u25D4\u0C6A\u25D4\uFF09\u0283",accesskey: "S",image:" "},
            {label:"没图没真相~~~", input_text: "没图没真相,纯支持下了~~~",accesskey: "C",image:" "},
            {label:"不明觉厉~~~", input_text: "虽然不知道LZ在说什么但是感觉很厉害的样子\n\u2606\u002E\u3002\u002E\u003A\u002A\u0028\u563F\u00B4\u0414\uFF40\u563F\u0029\u002E\u3002\u002E\u003A\u002A\u2606",accesskey: "B",image:" "},
            {label:"嘿嘿~~~", input_text: "\u2606\u002E\u3002\u002E\u003A\u002A\u0028\u563F\u00B4\u0414\uFF40\u563F\u0029\u002E\u3002\u002E\u003A\u002A\u2606",accesskey: "X",image:" "}
        ];
        var menu = PageMenu({
            label:"快速回复...",
            condition:"input",
            accesskey: "W",
            position: 1,
            image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA7UlEQVQ4jbWS0Y2EMAxEUwIl8GlpXiSXQAlbwpVAB5RACZRACZRACSmBEvZ+nBPLaoGPPUuRosQez4yd0n+FmbU55wfQmVl7q8jdG2AAtjhLnA14AsNpR2AFFkl+/JfkkiZgfWMUnZec83jFEhgklSN6D8zu3tyRCswvcoA55/y4U5xSSmHuvGdQzKwNKWtFj05r5Pzpj7xtz2AFuvh4Sprqu6Ti7k0AbGbWSvIKXCmNnwzc+1LvwPCSHyPcgO5Kf4yzvI0a6CrFM/MklY+GB3If2zhI+pHU55zHsyU7ApQdwFRnXk2+1Hd3mb4WvyyoZJEMizeNAAAAAElFTkSuQmCC",
            oncommand: function(event){
                var input_text = event.target.getAttribute('input_text');
                if(input_text) {
                    addMenu.copy(input_text);
                    goDoCommand("cmd_paste");
                }
            }
        });
        menu(items);
    };
      
      
      
    //隐藏相同项。必须,不能删除
    function syncHidden(event) {
        Array.from(event.target.children).forEach(function(elem){
            var command = elem.getAttribute('command');
            if (!command) return;
            var original = document.getElementById(command);
            if (!original) {
                    elem.hidden = true;
                    return;
            };
            elem.hidden = original.hidden;
            elem.collapsed = original.collapsed;
            elem.disabled = original.disabled;
        });
    }; 
    Alles anzeigen
  • Firefox v136.0a1-OpenWith.uc.js funktioniert nicht mehr

    • ufo1024k
    • 4. Februar 2025 um 14:14
    Zitat von milupo
    Zitat von Sören Hentzschel

    Die zweite Zeile in Beitrag #3 sollte vermutlich eher so aussehen:

    OK, danke, funktioniert. Hatte nicht getestet, weil ich davon ausging, dass alle Pfade bei ihm anders sind. Aber der Edge-Pfad ist bei mir gleich.


    Zitat von ufo1024k

    Funktioniert immer noch nicht

    Ersetze mal die jetzige Zeile 122 durch folgende Zeile wie oben in Beitrag #5 durch Sören Hentzschel angegeben:

    JavaScript
    OpenWithManager.openWithOtherBrowser(this, id, type);

    Vielen Dank, es funktioniert prima

  • Firefox v136.0a1-OpenWith.uc.js funktioniert nicht mehr

    • ufo1024k
    • 4. Februar 2025 um 13:14
    Zitat von milupo

    Ersetze Zeile 121 durch folgende Zeilen:

    JavaScript
      menuitem.addEventListener("command", function() {
    			  OpenWithManager.openWithOtherBrowser(this,'" + id + "','" + type + "');
    		  });

    Funktioniert immer noch nicht

  • Firefox v136.0a1-OpenWith.uc.js funktioniert nicht mehr

    • ufo1024k
    • 3. Februar 2025 um 23:37

    Dieses Skript funktioniert nicht mehr in v136.0a1 Nightly

    JavaScript
    // ==UserScript==
    // @name           OpenWith.uc.js
    // @description    用其他浏览器打开页面、链接、书签及标签
    // @author         ding
    // @include        main
    // @version        2018.2.3.1
    // @homepageURL    https://bbs.kafan.cn/thread-2114879-1-1.html
    // @startup        window.OpenWithManager.init();
    // @shutdown       window.OpenWithManager.destroy();
    // @note           适配Firefox57+
    // ==/UserScript==
    location.href.startsWith('chrome://browser/content/browser.x') && (function () {
    
        const MENU_NAME = "用其它浏览器打开";
    
        //是否使用二级菜单
        const USE_MENU_AREA = true; //页面
        const USE_MENU_TAB = false; //标签
        const USE_MENU_PLACE = false; //书签
    
        function getFirefoxPath(){//firefox.exe所在路径
            return OS.Constants.Path.libDir;
        }
        function getRootPath() {//firefox所在盘路径
            var path = getFirefoxPath();
            var index = path.indexOf(":");
            return path.substring(0,index+1);
        }
        //修改内容后请将脚本改名来保证加载的是最新,或使用无缓存的userChrome.js
        var browsers = {
           
    		Edge: {
                enable: true,
                name: "Edge",
                path: "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe",
                image: "data:image/png;base64,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"
            },
    		Chrome: {
                enable: true,
                name: "Chrome",
                path: "D:\\GoogleChromePortable64\\GoogleChromePortable.exe",
                image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAJyUlEQVRo3u2aWZAV1RnHf9/p7nsHMsAMTMEwQxEZEJRlEAUEIVFiwMhiuVMgUGhSVkzyYDTGJC95SpUVTKxUYlVMBZUSEyWJCKjsiApijMQ4goEKICjDJs4gyyz3dp8vD3fr23eZkWB48XT13Nvn9vIt//P/lh74clzcIRfiJqoqR+fdPDXhMMda22BUajHUojJABRW1JwSOBqrH1HLATfprBr+wdruI6EVV4OD82TNVzZ0YudF2dPTH2rBWqT11gGpIVjE48fhxq3at8ZPPD1m5ed3/VYEjd8yZmoiZJUEiMSkrdJ7AISWyn5rxVuZral4EJx5/0ySCH3919cbtX6gCH8+ffWngxh6z7R2zUBsSqITweXMRLyh5HkIMpiK+2k0mHhj84pb9F1yBgwtumoWa5bazs6pAoOhnV0poxENkjAAmFm8VsfO7CyvTLeEX3fKQWlblhI8IKULR+fyJnMKZ08PXiYCATXZWW9++9OFtM354QTywb8HNT5hk8t4c1rN/ykOoKxgpBb8R9g5g4j0eb1i5/gfn7YE9d3zroaC9/V4Ns0s+fZbjViKAL2O6QuFRJehs+/6Ht37z/vPywM451832vNiLnqrjGgenACb6OT1QgoXCCoSdmz4WxwlE7MyGNa9v6LYHnlp83SUJ4y73E51OYH2sWqxqSN0UFLSU4CVotbjwlKRfRbGB7yDOc4dmTW3otgLrG4c8/VlnR5+kQqAQWIvVII/PRaRr+GTPKaKkSA5aeYs5d52kLRYkEtXWq/hVtyA0fMX3ptpk8MYt248w62ALlTjEXQfXGDzj5AteKnCRUtpXzQCnAN9hK2eHjXpF81jOw/vaiHVbt4Uf6UYVcNQs8UmybXRfxh5oZYixOGoQaxEEz5hC2kwLkzSC2zie2BVXUTlsBPH+/X1xRfyzJ5yOE3voOPwmicPbccTHiGCMYkQQIzhOSlDjKKLgOiBGMY7Bc1IUa1zza9YxsaQHhi6/70YV/5XM8bXvt3DzzmMMiBl6SsoLrhgcx0SwCjr2KqrmLiRWN6gsLSfPNHNu1x/RT97EcVK2MCYlhnHBM4LrgecKxkgqPAioKIJg4rGZ7tQta4t6wHPM3ITNIeHtEVVcsfdTvDYf17EYARVBVbNQsiLEbplL1U23A9B8Sti6B94/LJw8K6hCTS9lTL0y7TKor66navLPad//PMGBZRgH4jEh7gmuZ3Dd8Foo3I2R24C1BR5QVbn0z989Glg7IKxU48HTLNp6iD6uQz/HEDMOnuPgSMoL3q3z6HPTbQQKz75l2LRb8qCchXz6YdNHKQsmW1wDeviv9Dq1HCRNCpI+K3tMai4DWVUw7jHGra/LpOJZFhq24r5rfBsMUHIbQNMlvfnX4N50+AGf+ZZALYFVLIqMm5AV/pdrDRt3C1om4CiwfpfwyCsG34IMup3OXpMQzwXPQTwXiTmI54Ar4BgIrzkRUL+WpulXF9CoBszOcnuO7QF4bewA2q0lYQNO+xYbBPgIve9cCMCzOwy7m6V0UhoiUhHY3Sw8syP16MSAhVhxESORFVmMprO51KwCBaz6Q8IBJ7NbtRzqG2Pz2Fo6FBI24GwQ4I2bgDewjuZTwqYPpHv5XGhu4y7hcKsgFfUkelxVQujCegIAn4YCBUSpK8ceOy7vxycxIamQUIt35QQAtu5J0Xc0sEYzg4LgC2z5d5qZeo4vHfCKWUFysoY8oAPD2I8kwrT2EDZMqCdpfayFnkOHAym2KRZkS4SKPAWbMtf2HE5hvqiRiJ33U6ECCLVCatPIlpl/u6E3HwyoJGEDvL41AHxyRgoEteldSwTrjIInM9d6fbG2WGqdcaVE4GXrikFIy3lAUQIDG8fV0mFt0cwgWq8UK9REQueXS5Lz8qjIGggxjcmtC3ssvHiL7QB7a3vw6ogakq0ngVSQokjmHy3UiilTU5k+SLZgTOQO5WoNkaOFHiA3WWpYVawqrzXW0PKfvQCMqddiNipq+aiSjYPSJ7TtCykghRdErlSrR4osYntUIw6L7hkkHq90eaUlRSHTLitCfiVSfRuCjQDXj0wvgfZ3C62vtohJJHPWkSL1gBwo03lL7aFb/t7uo7310476amX6KC3ZGgpjPjxmjFYGVSs20XIm1vZ2SWGLgBPcnKw55AkvlcN+NMCdNZaf7ltdAbBgsmVknZYsyqLwGlWnLLomxZsnP35OHJMo3RwropAR83KBAs0LntyhynGlcCs11je/y1P7t+Aa+MlMy4zRWrbNIcANo5WfzU4lc1v3rmWYef0rpbBebM5ajtG48e8F6bSIaN2yxS8D9xSj0XCcDIeWJe+vBoS7h07j7imW6SOFLR9AU7NkY0RNpdI4SLl+JAyqTl259L11LIw9DzYpZRmHaBtH1oSbwnn1gB8EK1zH3NMdNGYXJpZHml7gvU8P8sCoOQyurmHRlBJpAXDo1HEe/edKJrr/oKb+XOSu5Z6Ugbr5S9mUr/7pRdusyJRwvMgUL6X6QBkPxY3HjLqxfGPgGEZXDaamoncK5x2naTp5kFc/amLdRzvpYQN2XXOOOG1dCJwfnYOAN9yJW79etiZW5GG1ug0pDHxdKdJpk6w5/A6rD7+DINmiJ1ALZ5PpAKcsuzxJXNpT9isJn2g/CdR1Hu6yrXJk8bLtRnVV8UBmsWqLLvNoMFOUpPVTyV8QYNNzoyss0/p1FGl6lWefwLLSu3Lzjm71hXxjHkRp7S4bFWs3ajSCmZS8T1yexGhnF4Lnm8S32upWuD/qdmPrxOJl+63qPNCg9G3DeU9hvAgngWIVVbijxjKs57lQgVKm6kr/Zq0E4M6Vxk1FA61TypLnVjXtr5w99owabujK2tEFLRHBNJFKDVY1dtBDOsvApbCJnPB5IH71q386r+708e8885gJeDxX2UWidARame+ZpE8V1FfUKL+4JKDKtHUBmVzerwqdvvltxaStv/mf39DULL3rfhEeRcQJC5qxtM2yVH4arZpafX0Cy56JbXh6rkueT9Nl4Fse7Er4z/WKqe/Su2Y4Ks+po9Xlermp3CckWCLgb8OTXNfnVJdUCeD72opx53oTNm+8YK+YAFq+/eyGhLHjnYBVml6U0YotV5GlS1NVrohZrq1q7zLXsRYSPi+6Pbzx3RX+vF+z9l06b7KLLAmQKQgFFJvNnXzLztGdNMRPF42spJVM+Gx3Ys5DxXj+C33R3fcP829wkDuRYGZgTG3mbpp+AXJXH+V3Q1sV60teiFOhM2mPgbwsYlZUTNqy4aK8qQ/3Vfs9OX+SILNVtcFR6mzSDnx3TFuv/u6ZSuAookcVOYLIAdczL7njNr11If7V4Mtxscd/ASmZ5euobJOdAAAAAElFTkSuQmCC"
            },
            
            Slimjet: {
                enable: true,
                name: "Slimjet",
                path: "D:\\Slimjet\\slimjet.exe",
                image: "data:image/png;base64,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"
            },
            FireFox: {
                enable: true,
                name: "Firefox Nightly",
                path: "D:\\FirefoxNightly\\FirefoxPortable.exe",
                image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAE5ElEQVRIx8WVW4hd5RXHf+vb93Oby5nO5FJlopKQ4qVSpQk+zB4otZVWBUHwTQRHEAVBCvWlM2OhUOhLoX2RFiuBgnlKKfUChTkVSm2tU1p0hIxOLibGZDKZOefsfc6+fd/Xh2OGBFuVltIFH+y1H9Zv/9f69n/BfxFPbP4s5n8Z7Y1nrZz8/mdC5IsUum/h+NIrb22CXx8dN2LPc725iwdW40A89roH5k/NLnQ+F3Dih0l87oyNn/pFcwkgOviDJe0GiwUehE3wGxA0IRpDPX8BO74GgCsh1dsPd77T2rv82/ua14Gca5O79z394o6XPfrlO47IpezwSpKXcTg5zYFvzOFMj5FeSsCLwA/hXo0VDTbCWAMz67Mfps3Z6tgLL/1bBc99833rReMM2y3SGThjr6BunuJ87xyrv34dwvFRi6ImzvMNdLQKVIC7W+P24q7lf9x559LVXF19+PPP83hfuY9a1MYJXUzg0JqZQQcOG385CaYCXYA1YAxyuYaUN4BtgA3BNMA0WHNPLz6zcTb+FGDjhLPoeBFGgfnkg7QDRkFwx1GmHvk2k/ffBjqHKsf8/jJ+MYtrG2BdsC5iQ7QOODG8sHgd4PXHirjqqxjACqAs1hn1zwiI69C8+UbGboygzKAYYN7uYlYHBMmteGYMMXVE1xA8zpbmegW9dXZfiB1VFT3K3QrGVcLmseOc+vErUA6gSKFIKY+to9/s0+reTrP6EqgmYiaQssb03z5Y2gU09tk5AEcsyoCqQGkwSYoZZBTv/Z3k3XXQ5ScKEij6UA3JX36L9GKdsL+fMN2DlC3EROy/YOa4On6bEysskgvKgKOFjdNrdMOStReOUwU+VNVIktGjQZcZKBerS6qts/QHB2nfNKDv9EkpuNy18S7Ac8yoHVpwCyiHORJETLRmGJ/ay/bFj/AVVGWOqYrRbRIHlANG4+oulR9gtyva/hjF2A7SHP1iLsDwvFp2sYu6snj5CDIdTaH9kCMPLrD+zgrbvSv4X5mlaIZcevOvpCfPQ6lRtiJqNrETMEhrtMmYSEL2RnD2KiCYMJTbispaggwmagGFdsgKRR4Kh77+LQZNGNagGxaE4zVOvfsrjAhSd5g8eJhhagGIcqFdKFJXlncVtI+WneJVtVhZIciFYAiTgUviWrYG2+TnN9F1h+2dM1z40xvkSUZDORhdMfnw/TQyD7VjQStqmeAoj3umTeeda63itbnBSpp78QCHPID+uJC0IGlZVtd+w+mTf0RZhwILIpjIZ+Kh79I6cheVGIrS4hQw0xcilXZeXhib51oT8Rvlsi6cuLKCFIIdgBXBivC1ww9wy23zXNp6n0QPoT1G7dAhTM3HbkMpCmMhGli8riY7N/zDvzS7lQd7K/2PgzjFpRQhb0CvIQzrMKxDFlqKuqUIRnaS+QqrQItFtCUcCnma8dVb9Pz3Hh/Z9qcWzqv39FYyHcYZDqUIRc2S1BR5bTTkIoAyMhSuYF2LVmCt4GiIlMGImf/Jj/zOZ2603917ZaXsNuIcRYGi9KCKIKkJZQCFD8aByht5lzGaoJ51Fn/amP/CK/PE0X7sNNXKoBdgEEoRSg9MYMlcReVDX4ZsD7YYv6HbWfzlrfP/0U5+bWFzSffqc1lCnO/46EpBZAj3aC5v+st2/1bnyZemOvy/4p94BjsVGJyURAAAAABJRU5ErkJggg=="
            },
    
            others: {
                enable: false,
                name: "",
                path: "",
                image: ""
            },
    
            all: {
                enable: true,
                name: "所有浏览器",
                image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACjElEQVQ4T21TXUgUURT+zswuZZruTBRRFJHOvgRR0EMRCQkVQWUEai9WD+LWjtpDQfVQLRQYPUSFd0xSCMJ+pCIMC1+rh+itzMC964MIRRYzu2WitjsnZqZ1t637cOGce8937ved7xJKli5SawA0MfE+AJvAnAXoPYhfECsPbLNmsriEFgIxVaFR5i6AegIK+eBCo7cx4yII0uGqZpgrpr1ccPGmXKSF+C2BNpa+iMGvnCmjDgnKgpkiluxQiJrtLLajw5jzATQr2UOg1tJivyvQ7cSNePFZRCSPEWGbE4/GqFKkalTwGBGUUgAX6IWrXlZCuXL7uPGx+FyzkvdzrJwnTchOIpz9X/d8LsdoyJjGo3wcsVLtBD4NoJ90IYeZ2CZWvoD45D8aMEYc0yho0/NpiZadHgawFYRR0kXyiW1GDy3tGo+GFXfsj9qjv3LYqYa5VnHJdEyjLg+sCfmQyJ/KjD8FTcinjmkcRICcIaJQsXCRrmRtui36cgHAkhMErPVjxnefgm0ae7w4YqWOKuyeADANoueuqz5Ot62fKKali5Rnsn4CVAa/I3+ECt3Iq1zZO6mH5mY7mHABjHmALjlfqzuRIDcPpIvUdRDvYuAZRbrlZmJqdeI1XudgXZss0xfP+hyDl/IQcuo5p716pAAi+7KqciUwkkjeYsa9v7gKOUiE/fkCF6hPx41BL64ScrcKNNqm0RJYuYfDek7ehkJXFwwzwKr2LeVxbWLm144Z3RHoJA8Q8yknVLEXsVUzhU+T4JC2fPwMK+6PdHllH46s/KlbsgHAAAgJAG/gogUKPtjL5jvRuGHeH2Opccq6x1aXuephJncLQE1gZDzDABiaU8N3ZmLrPhfX/AYp2hIKQjp+9wAAAABJRU5ErkJggg=="
            }
        };
    
        if (window.OpenWithManager) {
            window.OpenWithManager.destroy();
            delete window.OpenWithManager;
        }
    
        function $(id) {
            return document.getElementById(id);
        }
    
        window.OpenWithManager = {
            useMenu: false,
            getTypeDesc: function (type) {
                switch (type) {
                    case "page":
                        return "本页";
                    case "link":
                        return "链接";
                    //case "tab": return "标签";
                    //case "bm": return "书签";
                }
                return "";
            },
            buildMenuName: function (label, type) {
                return "用 " + label + " 打开" + this.getTypeDesc(type);
            },
            attachNode: function (anchorNode, node) {
                if (this.useMenu) {
                    anchorNode.appendChild(node);
                } else {
                    anchorNode.parentNode.insertBefore(node, anchorNode);
                }
            },
            createMenuPopup: function (anchorNode, type) {
                let menu = document.createXULElement("menu");
                menu.setAttribute("label", MENU_NAME);
                menu.setAttribute("id", "openwith-menu-" + type);
                menu.setAttribute("class", "menu-iconic openwith-menu open-" + type);
                menu.setAttribute("image", browsers.all.image);
                anchorNode.parentNode.insertBefore(menu, anchorNode);
    
                let popup = document.createXULElement("menupopup");
                popup.id = "openwith-popup-" + type;
                menu.appendChild(popup);
                return popup;
            },
            createMenuItem: function (anchorNode, id, browser, type) {
                let menuitem = document.createXULElement("menuitem");
                menuitem.id = "openwith-m-" + type + "-" + id;
                menuitem.setAttribute("label", this.buildMenuName(browser.name, type));
                menuitem.setAttribute("oncommand", "OpenWithManager.openWithOtherBrowser(this,'" + id + "','" + type + "')");
                menuitem.setAttribute("class", "menuitem-iconic openwith-menuitem open-" + type);
                if (browser.image) {
                    menuitem.setAttribute("image", browser.image);
                }
                this.attachNode(anchorNode, menuitem);
            },
            createBrowserMenu: function (anchorNode, type) {
                for (let key in browsers) {
                    try {
                        if (browsers[key].enable) {
                            this.createMenuItem(anchorNode, key, browsers[key], type);
                        }
                    } catch (e) {
                        alert(e.message);
                    }
                }
            },
            //contentAreaContextMenu
            initContentAreaMenu: function () {
                var inspos = $("inspect-separator");
                let sep = document.createXULElement("menuseparator");
                sep.setAttribute("class", "openwith-menuitem");
                inspos.parentNode.insertBefore(sep, inspos);
                this.useMenu = USE_MENU_AREA;
    
                var anchorNode;
                if (this.useMenu) {
                    anchorNode = this.createMenuPopup(inspos, "area");
                } else {
                    anchorNode = inspos;
                }
                //链接部分
                this.createBrowserMenu(anchorNode, "link");
    
                let sepLink = document.createXULElement("menuseparator");
                sepLink.setAttribute("class", "open-link openwith-menuitem");
                this.attachNode(anchorNode, sepLink);
    
                //控制链接菜单的显示
                inspos.parentNode.addEventListener("popupshowing", this, false);
    
                //页面部分
                this.createBrowserMenu(anchorNode, "page");
            },
            //tabContextMenu
            initTabContextMenu: function () {
    
                var inspos = $("context_closeTabOptions") || $("context_closeTabOptions") 
                let sep = document.createXULElement("menuseparator");
                sep.setAttribute("class", "openwith-menuitem");
                inspos.parentNode.insertBefore(sep, inspos.nextSibling);
    
                this.useMenu = USE_MENU_TAB;
    
                var anchorNode;
                if (this.useMenu) {
                    anchorNode = this.createMenuPopup(sep.nextSibling, "tab");
                } else {
                    anchorNode = sep.nextSibling;
                }
                this.createBrowserMenu(anchorNode, "tab");
    
            },
            //placesContext
            initPlacesContextMenu: function () {
    
                var inspos = $("placesContext_openSeparator");
                //let sep = document.createXULElement("menuseparator");
                //inspos.parentNode.insertBefore(sep, inspos);
    
                this.useMenu = USE_MENU_PLACE;
                var anchorNode;
                if (this.useMenu) {
                    anchorNode = this.createMenuPopup(inspos, "place");
                } else {
                    anchorNode = inspos;
                }
                this.createBrowserMenu(anchorNode, "place");
    
                //文件夹显示
                inspos.parentNode.addEventListener("popupshowing",this, false);
            },
            handleEvent: function (event) {
                if(event.target.id=="placesContext"){
                    var isFloder = false;
                    try {
                        let selectedNode = PlacesUIUtils.getViewForNode(event.target.ownerDocument.popupNode).selectedNode;
                        isFloder = !selectedNode || selectedNode.hasChildren;
                    } catch (e) {
                    }
                    let menus = $("placesContext").querySelectorAll(".open-place");
                    for (let menu of menus) {
                        if (isFloder) {
                            menu.hidden = true;
                        } else {
                            menu.hidden = false;
                            menu.disabled = false;
                        }
                    }
                }
                if(event.target.id=="contentAreaContextMenu"){
                    let menus = $("contentAreaContextMenu").querySelectorAll(".open-link");
                    for (let menu of menus) {
                        if (gContextMenu.onLink) {
                            menu.hidden = false;
                        } else {
                            menu.hidden = true;
                        }
                    }
                }
    
            },
            init: function () {
    
                //contentAreaContextMenu
                this.initContentAreaMenu();
    
                //tabContextMenu
                this.initTabContextMenu();
    
                //placesContext
                this.initPlacesContextMenu();
    
            },
            destroy:function () {
                $("contentAreaContextMenu").removeEventListener("popupshowing", this, false);
                $("placesContext_openSeparator").removeEventListener("popupshowing", this, false);
    
                let menus = document.querySelectorAll(".openwith-menu"),
                    menuitems = document.querySelectorAll(".openwith-menuitem");
                for(let menuitem of menuitems){
                    menuitem.parentNode.removeChild(menuitem);
                }
                for(let menu of menus){
                    menu.parentNode.removeChild(menu);
                }
            },
            openWithBrowser: function (url, path) {
                if (!path) {
                    alert("浏览器路径未设置 ");
                    return;
                }
                if (path == "microsoft-edge") {
                    //edge用url打开
                    var cmdUrl = path + ":" + url;
                    let win = window.openDialog(cmdUrl, "", "chrome");
                    win.close();
                    return;
                }
    
                let clientApp = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
                clientApp.initWithPath(path);
                if (!clientApp.exists()) {
                    alert("浏览器路径错误: " + path);
                    return;
                }
                try {
                    let ss = Cc["@mozilla.org/browser/shell-service;1"]
                        .getService(Ci.nsIShellService);
                    ss.openApplicationWithURI(clientApp, url);
                } catch (e) {
                    let p = Cc["@mozilla.org/process/util;1"]
                        .createInstance(Ci.nsIProcess);
                    p.init(clientApp);
                    p.run(false, [url], 1);
                }
            },
            openWithOtherBrowser : function (obj, id, type) {
                var url;
                switch (type) {
                    case "page":
                        url = gBrowser.currentURI.spec;
                        break;
                    case "link":
                        url = gContextMenu.linkURL;
                        break;
                    case "tab": {
                        let tab = TabContextMenu.contextTab;
                        let bw = tab && tab.linkedBrowser;
                        url = bw && bw.currentURI.spec;
                    }
                        break;
                    case "place":
                        url = PlacesUIUtils.getViewForNode(PlacesUIUtils.lastContextMenuTriggerNode).selectedNode.uri;
                        break;
                }
                if (url) {
                    if (id == "all") {
                        for (let key in browsers) {
                            let browser = browsers[key];
                            if (browser.enable && key != "all" && browser.path) {
                                this.openWithBrowser(url, browser.path);
                            }
                        }
                    } else {
                        let browser = browsers[id];
                        this.openWithBrowser(url, browser.path);
                    }
                }
            }
    
        };
        OpenWithManager.init();
    })();
    Alles anzeigen
  • Der folgende Code kann nicht unter Firefox67 ausgeführt werden, bitte helfen Sie mit fix

    • ufo1024k
    • 21. März 2019 um 23:36
    CSS
    new function () {
    	var items = [
        {label:"复制当前标签【标题】",
    	oncommand: function() {addMenu.copy(addMenu.convertText("%TITLE%"));},
    	image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAXElEQVQ4jWNgGCzgPxZMSA2GJKkWEmXAfwYGBg9yDfBgYGCYCcXEWogCjjIwMChDaZIBssY8KCYJ5DGghjhJrlBmwPTjTKg4ToCsAVvAeaCJ0S8dkGQARUl54AAAWsMsNkwmkt8AAAAASUVORK5CYII="},
    	{label:"复制当前标签【地址】",oncommand: function() {addMenu.copy(addMenu.convertText("%URL%"));},image:""},
    	{label:"复制当前标签标题和地址",
    	oncommand: function() {addMenu.copy(addMenu.convertText("%TITLE%\n%URL%"));},image:""},
    	{label:"复制当前标签源代码",oncommand: function() {addMenu.copy(addMenu.convertText( '<a href="%URL%" target="_blank">%TITLES%</a>'));},image:""},
    {},
    {label:"复制所有标签标题",oncommand: function() {(function(){
                            var gClipboardHelper = Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper);
                var titles = "";
                Array.slice(gBrowser.tabContainer.childNodes).forEach(function(tab) {
                    titles += tab.label + "\n";
                });
                gClipboardHelper.copyString(titles);   
        })();},image:""},
            {label:"复制所有标签地址",oncommand: function() {(function(){
                var gClipboardHelper = Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper);
                var URLs = "";
                Array.slice(gBrowser.tabContainer.childNodes).forEach(function(tab) {
                    var url = gBrowser.getBrowserForTab(tab).currentURI.spec;
                    URLs += url + "\n";
                });
                gClipboardHelper.copyString(URLs);      
        })();},image:""},
            {label:"复制所有标签标题和地址",oncommand: function() {(function() {
                var gClipboardHelper = Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper);
                                                    var txt = "";
                Array.slice(gBrowser.tabContainer.childNodes).forEach(function(tab) {
                     var url = gBrowser.getBrowserForTab(tab).currentURI.spec;
                    txt += tab.label + "\n" + url + "\n";
                });
                gClipboardHelper.copyString(txt); 
            })();},image:""},
            {label:"复制所有标签HTML链接",oncommand: function() {(function() {
                var gClipboardHelper = Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper);
                var txt = "";
                Array.slice(gBrowser.tabContainer.childNodes).forEach(function(tab) {
                     var url = gBrowser.getBrowserForTab(tab).currentURI.spec;
                    txt += "<a href=" + "\""+ url +"\" "+  "target=\"_blank\">" +  tab.label + "</a>"+ "<br>"+ "\r";
                });
                gClipboardHelper.copyString(txt);  
            })();},image:""},
    
    
    	{},
    	{
    		label:"复制 Favicon 的 URL",
    		text:"%FAVICON%",
    		image:" "
    	}, {
    		label:"复制 Favicon 的 Base64",
    		text:"%FAVICON_BASE64%",
    		image:" "
    	}
    	];
    	var menu = TabMenu({id:"context_TabInfoCopy",onpopupshowing: syncHidden});
    	menu(items);
    };
    
    
    
    
    
    
    
    
    
    
    
    
    //复制链接文本地址
    new function () {
    	var items = [
    	{
    		label:"复制链接地址(A)",
    		command:"context-copylink",
    		image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABFklEQVQ4T6XTvSuGURzG8c+zGxnIoCgbCyUGiUnJSylSDFIGmZWUEjbFaFCUmESUxcugsBhkpSz4FwwGnTp33Y/u57nVfbbz8vv+znWd65QUHKWC9f4DaMc2OvCGTRwnjfMAwzjEMg7Qi10sYS9AqgFGY9EIrlNSJ7GK1jxAExpwj3p8RUhbXKupBOjGJ95jwRzW0IifKGcIXVmAfpxiBicIxTvowyMSTwbivMyDQLxB0HiGBWxhEFcYw36c32W9wgPOsYG6KGEq3iicb0Ft0jkL8I1OvMTNxLgefKQ8Kcte+hlfsYKj1IngSZAzgYus1KYBszFl87jFNNYxjstKkf8bpGBgSFkznrCI52r/JS/KuX+tMOAX/9gzEZGy3OQAAAAASUVORK5CYII="
        },
    	{
    		label:"复制链接文本",
    		text:"%LINK_TEXT%",
    		image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA/0lEQVQ4T6XTsStFYRjH8c/9SzDJYJDFIAausitGBgOLwT/AYuCKQSmjhUERmxR/giiMymIUmQz06L11ei+9p+5bZzrP++37/H7nNHR5GpX7OxiqwfvAHD5jtgp4xi5uC5Br9CHmOwDzuCkAvkuAcaz9AblCE0VA1wY9WEgGF9jObIoGEU5vuvSKpwwQhtFCvKsV4gQ2U3BnaOGhDc1rzFsYxSmWECFOYj+F+Vt3CXCOExwistnAJabTGkXAPRaxh/cEiN2PMFjH4BiPaecRrGIZY/8ZvCGeOF9YwR0OkvoUZjCMl9xgFgOVyqLv9aQa30V/qnSrXWEOqPEjdo78AAIxShEhs/7CAAAAAElFTkSuQmCC"
    	},
    	{
    		label:"复制链接文本+地址",
    		text:"%LINK_TEXT%\n%l",
    		image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAPklEQVQ4jWNgoCL4TyQWwGcAIQtgNFZDiDUAp1piDEDGBA3A6VdCBhAKRIIGEAOGqAuINoBiFwysAaRg6gAAE7tI6EZZDKkAAAAASUVORK5CYII="
    	},
    	{
        label: "复制链接源代码",
        tooltiptext: "左键:HTML代码\n中键:UBB代码\n右键:MD代码",
        onclick: function(event) {
            var formats = [
               '<a href="%l" target="_blank">%LINK_TEXT%</a>',
                "[url=%RLINK_OR_URL%]%RLT_OR_UT%[/url]",
                "[%RLT_OR_UT%](%RLINK_OR_URL%)",
            ];
            var str = addMenu.convertText(formats[event.button]);
            addMenu.copy(str);
            if (event.button === 1) { // 中键点击后自动关闭菜单
                document.getElementById("contentAreaContextMenu").hidePopup();
            }
        },
        image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAAAAAABmZmbc3Ny3t7eRkZE6OjpRDxSxAAAAAXRSTlMAQObYZgAAADJJREFUCNdjwASCECDAIADhY2UwMQoKsgqAGUyMJiAGoyATYzJMhEEYxhDAoh1hBQYAAPxVA4qkxzcpAAAAAElFTkSuQmCC"
    },
    
    
    
    
    ];
    	var menu = PageMenu({ condition:'link', insertBefore:'context-openlink',icon:'image', 	image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABdklEQVQ4T43TPUiXURTH8Y9pJSpFIEKamxAYhEO1ikOQFAlODTkIgr1gRQSlEA2CvUCUREWBEjQ4FYHoII7i4mpLU0VDRNbQC9WgceI88OchX+723Ht/33t+v3OeKltbO9CGarzB70JWtQX9cTzHnrz7Ew9wI0CbAU6neBUv8AsnEnYTI5sBDqAD77CQFezGMprRtB4g9g+hDq/xuWT1Ic7hWBkQ30O4gtYURfkvcQYruTeFU2VAiCfQjz94gm3owy7cwVV0YT470VJUUCmOFp3EXL4WlYzhPA5jBjtxGfcKwFk8wg90YwmjKfyaoEg/rGzHJAawFoB6fEQtOrGI+7iYoFk0YhA1eJwB/uMG4GiW+yz9x35TZhBWIodYa7iN4cqOBKAHr3A3068834v9GVj0/lt5cgOwD2/xHgfxPS8dQUva+LDeyBchjuMCvmAaDehNi9ey9P8yCkC05RYuVdz6hOt4utEPV57EeLk9RzdsxRRuuP4CTWBJwwkoqucAAAAASUVORK5CYII=",onpopupshowing: syncHidden });
    	menu(items);
    	items.forEach(function(it){
    		if (it.command)
    			css('#contentAreaContextMenu[addMenu~="link"] #' + it.command + '{ display: none !important; }')
    	});
    };
    
    
    
    
    //图片
    new function () {
    	var items = [
    	{command: 'context-copyimage-contents',
    	 image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAnElEQVQ4jWNgGCzgAwMDw38S8XtkA/6TYel/bJwEqMn7GRgYBAgYsAGbAR8YGBgMoJIFBAxAkYcZcIGBgWE91BUOeDQvYMDhBQGoyQ5Ql2AzpABqEVYDYCCBAeKdD1A2DARAxQTwGQDTbADFFxgYGOZD2Q+gNIalyLGArAjmrQNQNQlY9GAYgCv6DND4eMOAGICih5yk/IEMS2kAABDmRWASmruSAAAAAElFTkSuQmCC"
    	},
        {command: 'context-reloadimage'},
        {command: 'context-copyimage'},
        {
            label:"复制图片 Base64",
            text:"%IMAGE_BASE64%",
            image:" "
        },
        {command: 'context-saveimage'},
        {command: 'context-viewimageinfo'},
    
    
        {},
            {
        label: "以图识图",
        tooltiptext: "谷歌/百度/搜狗/tineye",
        condition: "image",
        image: " ",
        oncommand: function() {
            var url = encodeURIComponent(gContextMenu.mediaURL || gContextMenu.imageURL || gContextMenu.bgImageURL);
            gBrowser.addTrustedTab('http://www.google.com/searchbyimage?image_url=' + url);
            gBrowser.addTrustedTab('http://image.baidu.com/pcdutu?queryImageUrl=' + url);
            gBrowser.addTrustedTab('http://pic.sogou.com/ris?query=' + url);
            gBrowser.addTrustedTab('http://www.tineye.com/search/?pluginver=firefox-1.0&sort=size&order=desc&url=' + url);
        }
    },];
    
    	var menu = PageMenu({ condition:'image', id:'context-copyimage_new',insertAfter:'context-viewimage', icon:'image', 	image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAQCAYAAAAbBi9cAAABqUlEQVQ4T7WTO0gDQRCG/9lNULAQUQRBNF6SixYicuYKsRYrbWwELaKWqWxsLLQQH51Ya5HGUgVBBAtRRDT4KDUPLAw2FmKKJODdjlyCcD5OouBWy87MN49/luBx9JCZIHCb22xDDGcy5/nvQsgTFOyLg0ST214oyZVc7qzovGma0eYTctK528wbpIfMeS/Yt5lttQWBJhBNgShW9mFsUiRs8m9AYDUCiC4Qlt1x/wKavUtfrFZbna4ZAyTlSdlfqQF3RbNQ6hREi47NYkxks8mHTs3oVkLGCBxkxrEiK5HJXD9pmlEvBPVWEsurjyBL7bIUY45JFLH+Wms1SPLdArgH+ADAMIieX/Kl/ro6f+MH1VzD/tKaHoouEGH6Lp1sdbQJBAK1Nf7mJ4Dn2FaXnq19nlEkaK6w4N5UOjn4Pjs9bN6AsQNlH/4CFB1ioj1AxSB4n1mOCvAav6oeZ5eqBgEgPRidIYElgPxgLjDTeCp7sf2jal7yt7cbLT6f6CgW1c3j42XBadMTxOBDMJ1Wu0flD/3+RT7tUbWMr35lUCh69HdCJdJijr8BP9bKXB0KZjgAAAAASUVORK5CYII=",onpopupshowing: syncHidden});
    	menu(items);
    	items.forEach(function(it){
    		if (it.command)
    			css('#contentAreaContextMenu[addMenu~="image"] #' + it.command + '{ display: none !important; }')
    	});
    };
    Alles anzeigen
  • Bitte reparieren Sie den nächsten UndoCloseTabButton2.uc.js

    • ufo1024k
    • 10. Dezember 2018 um 01:39
    Zitat von Endor


    So bitte wieder testen:

    Code
    // ==UserScript==
    // [url=home.php?mod=space&uid=467097]@Name[/url]                 UndoCloseTabBtn.uc.js
    // [url=home.php?mod=space&uid=1079000]@namespace[/url]           UndoCloseTab@gmail.com
    // @description         Geschlossene Tabs wieder herstellen, Schaltfläche mit Popupmenü
    // [url=home.php?mod=space&uid=321866]@author[/url]               defpt
    // @charset              UTF-8
    // @Compatibility        FF57+
    // [url=home.php?mod=space&uid=570682]@version[/url]              v2018.04.04 Kompatibilität mit Firefox 57+ von runningcheese
    // @version              v2014.09.15
    // ==/UserScript==
    (function() {
    	if(document.getElementById('undoclosetab-button')) return;
    
    
    	CustomizableUI.createWidget({
    		id: 'undoclosetab-button',
    		label: 'Tabs wiederherstellen',
    		tooltiptext: 'Kürzlich geschlossene Tabs wiederherstellen',
    		defaultArea : CustomizableUI.AREA_NAVBAR,
    		onCreated: (uCTBtn) => {
    			uCTBtn.setAttribute('context', '_child'); //点击按钮恢复最后一次关闭的标签
    							   //如果想左键恢复最后一次关闭的标签,右键打开已关闭标签列表,那么改为(context: "_child",)
    							   //如果想改成菜单形式的,那么改为(type: "menu-button",)
    			uCTBtn.setAttribute('command', 'History:UndoCloseTab');
    
    
    			uCTBtn.appendChild($C('menupopup', {
    				oncommand: 'event.stopPropagation();',
    				onpopupshowing: 'this.parentNode.populateUndoSubmenu();',
    				context: '',
    				tooltip: 'bhTooltip',
    				popupsinherittooltip: 'true'
    			}));
    			uCTBtn._getClosedTabCount = HistoryMenu.prototype._getClosedTabCount;
    			uCTBtn.populateUndoSubmenu = eval('(' + HistoryMenu.prototype.populateUndoSubmenu.toString().replace(/\.undoTabMenu/g, '') + ')');
    		}
    	});
    
    
    
    
    	document.insertBefore(document.createProcessingInstruction(
    		'xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent('\
    			#undoclosetab-button menuitem {max-width: 240px;}\
    			#undoclosetab-button .toolbarbutton-icon {list-style-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAADgUlEQVR42mL8//8/AyUAIIBYYIzVq1dLC4mIrvr08ZPV379/vjEzMwOZnycmxMV04DMAIIAYQC4A4dXr1oU+fvLk/5/fv/9//fzl/9ev3/6vWLnqK0weFwYIIBZ0A79//crw5+9fhh+//jBYWlhz1dc3fgIqZeDh4WHk4uaqysnKmoysHiCAwAbceHRD6uLdQ0kGunoMv9hYGX79/sPw7cdvhn///jNYWJjzgtRw8/AwvHz5smzutlbN4yeP/k8Pqeo11bW5BxBAjCBnFPbHd7EIMJRoiZgx8nBwMvz+85fhJ9CQf3//Mzx9+pQBFM483FwMQG8xMDL/ZXj46cZ/9v/sk6ZWriwACCCwC25eviprEKbGeOP/AYavb34wsHCwMPz9AzTg9z+GP7x/Gf7++ws07B/Djz+/GZiYGBhYBdgYrx68JwXUyggQQGADePgFfjD+ZGHgF+Bl+P7yHZDPycDGws2gKW7GIMAhwnDs4XaGJ1/uMPz+8Z2BnYOZ4fOnzwwsrMxfgVr/AwQQ2ABpGYkv/GLcDELSfEDn/2HgFeZh8JdLYfjw6SODvqw5g4KiPMOsMw0MDEDbOYWABrz5zsAtI/wJpBcggJhABD+P8MefX38x/AU6k+EvIwPHHx4GNgYuhuuPLzCcuL2f4QswZozEHBjYGDmAdjIw/Pn+l0FCVOoNSC9AAIENEBEQe/Pjy0+GP8CA42LgZ/BXTWb48OUdw6m7+xmm7W5hePTqLoOLaigD+28+hnfv3jN8ePMJaIDMc5BegAACGyApLPX82+fvDB/ev2f4/eU/Ax+bEMOLd08ZpITkGbTl9IHp4jfDsev7GL59/8Lw+9dvhp/ffjPISio+BekFCCCwAQpiyrdfPn3F8OrVa4bHr+8zXHxwioGbjY+hwq+PwVkzmCHYMpFBS84A6Pp/DP/+/2P4+/Mvg5Ks+gOQXoAAggSimNqTb59+/v7x7SfL289vGRccmMDAxyrEsO3sKmCC+sKw9+xmhicf7gLxfQZ2QSaG/38YfkvyyoPCgBEggMAGfPnyhV2eV6vzxs7LWr9//Gf+yPKS6f/fl8zAhMgISkX//11h+M/I+A/ohL/f2P7/1VA2uvb161cOkAMAAogRmp1Znz17xsrCwsL07ds3lu/fvzOD2D9+/GCCpXk2Nra/XFxc/4Bif7i5uf9ISUn9Bgr/BggwAMhljD12v/akAAAAAElFTkSuQmCC")}\
    	') + '"'), document.documentElement);
    
    	function $C(name, attr) {
    		var el = document.createElement(name);
    		if (attr) Object.keys(attr).forEach(function(n) { return el.setAttribute(n, attr[n]);});
    		return el;
    	}
    })();
    Alles anzeigen

    Diese Version funktioniert hier auch im Nightly.
    Habe ich eben in den asiatischen Tiefen gefunden.
    Mfg.
    Endor

    Danke, das Problem gelöst wurde.

  • Bitte reparieren Sie den nächsten UndoCloseTabButton2.uc.js

    • ufo1024k
    • 5. Dezember 2018 um 00:29
    Zitat von Endor


    Teste mal diese Version.

    Code
    // ==UserScript==
    // @Name                 UndoCloseTabBtn.uc.js
    // @namespace            UndoCloseTab@gmail.com
    // @description          Geschlossene Tabs wieder herstellen, Schaltfläche mit Popupmenü
    // @author               defpt
    // @charset              UTF-8
    // @Compatibility        FF57+
    // @version              v2018.04.04 Kompatibilität mit Firefox 57 und neuer von runningcheese
    // @version              v2014.09.15
    // ==/UserScript==
    (function() {
            var buttonAttrs = {
                    id: "undoclosetab-button",
                    label: "Tabs wiederherstellen",
                    tooltiptext: "Kürzlich geschlossene Tabs wiederherstellen",
                    class: "toolbarbutton-1 chromeclass-toolbar-additional",
                    removable: "true",
                    context: "_child", //Linksklick auf die Schaltfläche, um den zuletzt geschlossenen Tab wiederherzustellen
                                       //Mit rechtsklick, Liste, der zuletzt geschlossenen Tabs, anzeigen, dann 
                                       //zum Wiederherstellen eines Tabs, linksklick auf entsprechenden Kontextmenü Eintrag.
                                       //如果想改成菜单形式的,那么改为(type: "menu-button",)
                    image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAADgUlEQVR42mL8//8/AyUAIIBYYIzVq1dLC4mIrvr08ZPV379/vjEzMwOZnycmxMV04DMAIIAYQC4A4dXr1oU+fvLk/5/fv/9//fzl/9ev3/6vWLnqK0weFwYIIBZ0A79//crw5+9fhh+//jBYWlhz1dc3fgIqZeDh4WHk4uaqysnKmoysHiCAwAbceHRD6uLdQ0kGunoMv9hYGX79/sPw7cdvhn///jNYWJjzgtRw8/AwvHz5smzutlbN4yeP/k8Pqeo11bW5BxBAjCBnFPbHd7EIMJRoiZgx8nBwMvz+85fhJ9CQf3//Mzx9+pQBFM483FwMQG8xMDL/ZXj46cZ/9v/sk6ZWriwACCCwC25eviprEKbGeOP/AYavb34wsHCwMPz9AzTg9z+GP7x/Gf7++ws07B/Djz+/GZiYGBhYBdgYrx68JwXUyggQQGADePgFfjD+ZGHgF+Bl+P7yHZDPycDGws2gKW7GIMAhwnDs4XaGJ1/uMPz+8Z2BnYOZ4fOnzwwsrMxfgVr/AwQQ2ABpGYkv/GLcDELSfEDn/2HgFeZh8JdLYfjw6SODvqw5g4KiPMOsMw0MDEDbOYWABrz5zsAtI/wJpBcggJhABD+P8MefX38x/AU6k+EvIwPHHx4GNgYuhuuPLzCcuL2f4QswZozEHBjYGDmAdjIw/Pn+l0FCVOoNSC9AAIENEBEQe/Pjy0+GP8CA42LgZ/BXTWb48OUdw6m7+xmm7W5hePTqLoOLaigD+28+hnfv3jN8ePMJaIDMc5BegAACGyApLPX82+fvDB/ev2f4/eU/Ax+bEMOLd08ZpITkGbTl9IHp4jfDsev7GL59/8Lw+9dvhp/ffjPISio+BekFCCCwAQpiyrdfPn3F8OrVa4bHr+8zXHxwioGbjY+hwq+PwVkzmCHYMpFBS84A6Pp/DP/+/2P4+/Mvg5Ks+gOQXoAAggSimNqTb59+/v7x7SfL289vGRccmMDAxyrEsO3sKmCC+sKw9+xmhicf7gLxfQZ2QSaG/38YfkvyyoPCgBEggMAGfPnyhV2eV6vzxs7LWr9//Gf+yPKS6f/fl8zAhMgISkX//11h+M/I+A/ohL/f2P7/1VA2uvb161cOkAMAAogRmp1Znz17xsrCwsL07ds3lu/fvzOD2D9+/GCCpXk2Nra/XFxc/4Bif7i5uf9ISUn9Bgr/BggwAMhljD12v/akAAAAAElFTkSuQmCC",
                    command: "History:UndoCloseTab"
            };
    
            var uCTBtn = $C('toolbarbutton', buttonAttrs);
    
            var popup = uCTBtn.appendChild($C("menupopup", {
                    oncommand: "event.stopPropagation();",
                    onpopupshowing: "this.parentNode.populateUndoSubmenu();",
                    context: "",
                    tooltip: "bhTooltip",
                    popupsinherittooltip: "true"
            }));
            uCTBtn._getClosedTabCount = HistoryMenu.prototype._getClosedTabCount;
            uCTBtn.populateUndoSubmenu = eval("(" + HistoryMenu.prototype.populateUndoSubmenu.toString().replace(/\.undoTabMenu/g, "") + ")");
    
            // Aus User Agent Overrider Erweiterung
        const log = function() { dump(Array.slice(arguments).join(' ') + '\n'); };
        const trace = function(error) { log(error); log(error.stack); };
        const ToolbarManager = (function() {
    
            /**
             * Remember the button position.
             * This function Modity from addon-sdk file lib/sdk/widget.js, and
             * function BrowserWindow.prototype._insertNodeInToolbar
             */
            let layoutWidget = function(document, button, isFirstRun) {
    
                // Add to the customization palette
                let toolbox = document.getElementById('navigator-toolbox');
                toolbox.palette.appendChild(button);
    
                // Search for widget toolbar by reading toolbar's currentset attribute
                let container = null;
                let toolbars = document.getElementsByTagName('toolbar');
                let id = button.getAttribute('id');
                for (let i = 0; i < toolbars.length; i += 1) {
                    let toolbar = toolbars[i];
                    if (toolbar.getAttribute('currentset').indexOf(id) !== -1) {
                        container = toolbar;
                    }
                }
    
                // if widget isn't in any toolbar, default add it next to searchbar
                if (!container) {
                    if (isFirstRun) {
                        container = document.getElementById('nav-bar');
                    } else {
                        return;
                    }
                }
    
                // Now retrieve a reference to the next toolbar item
                // by reading currentset attribute on the toolbar
                let nextNode = null;
                let currentSet = container.getAttribute('currentset');
                let ids = (currentSet === '__empty') ? [] : currentSet.split(',');
                let idx = ids.indexOf(id);
                if (idx !== -1) {
                    for (let i = idx; i < ids.length; i += 1) {
                        nextNode = document.getElementById(ids[i]);
                        if (nextNode) {
                            break;
                        }
                    }
                }
    
                // Finally insert our widget in the right toolbar and in the right position
                container.insertItem(id, nextNode, null, false);
    
                // Update DOM in order to save position
                // in this toolbar. But only do this the first time we add it to the toolbar
                if (ids.indexOf(id) === -1) {
                    container.setAttribute('currentset', container.currentSet);
                    document.persist(container.id, 'currentset');
                }
            };
    
            let addWidget = function(window, widget, isFirstRun) {
                try {
                    layoutWidget(window.document, widget, isFirstRun);
                } catch(error) {
                    trace(error);
                }
            };
    
            let removeWidget = function(window, widgetId) {
                try {
                    let widget = window.document.getElementById(widgetId);
                    widget.parentNode.removeChild(widget);
                } catch (error) {
                    trace(error);
                }
            };
    
            let exports = {
                addWidget: addWidget,
                removeWidget: removeWidget,
            };
            return exports;
        })();
    
        ToolbarManager.addWidget(window, uCTBtn, false);
            document.insertBefore(document.createProcessingInstruction('xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent('\
                    #undoclosetab-button menuitem {max-width: 240px;}\
                    ') + '"'), document.documentElement);
    
            function $C(name, attr) {
                    var el = document.createElement(name);
                    if (attr) Object.keys(attr).forEach(function(n) { return el.setAttribute(n, attr[n]);});
                    return el;
            }
    })();
    Alles anzeigen

    Mfg.
    Endor

    Im Nightly65 klappt es immer noch nicht.

  • Bitte reparieren Sie den nächsten UndoCloseTabButton2.uc.js

    • ufo1024k
    • 4. Dezember 2018 um 15:29

    Unter Firefox Nightly65 ist dieses Skript ungültig und kann helfen, es zu beheben? Danke
    https://github.com/Endor8/userChr…abButton2.uc.js

Unterstütze uns!

Jährlich (2025)

60,4 %

60,4% (392,55 von 650 EUR)

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