Отсутствует
Убрал @-moz-document
Так вид кнопок ломает:
с включенным layout.css.moz-document.content.enabled. А отключить нельзя - заблокировано. Посмотрел на версиях с 78 по текущую, везде эта настройка залочена в about:config.
Это только у меня так, или надо куда-нибудь лезть типа omni.ja, чтобы включить и проверить..?
Отсутствует
Так вид кнопок ломает
с включенным layout.css.moz-document.content.enabled.
Да, вроде, не должно ломать, никаким образом.
А отключить нельзя - заблокировано.
В любом случае — «работало? не трогай!».
Отсутствует
Подскажите пожалуйста, по какой причине могла отвалиться кнопка сохранения изображений по двойному ПКМ, после перехода на Windows 10 с 8.1? Профиль тот же, и версия браузера.
addEventListener("contextmenu", { handleEvent(e) { if (e.detail != 2 || !gContextMenu?.onImage) return; var pl = "browser.download.folderList"; var pu = "browser.download.useDownloadDir"; var cl = Services.prefs.getIntPref(pl), sl = cl == 2; var cu = Services.prefs.getBoolPref(pu); sl || Services.prefs.setIntPref(pl, 2); cu || Services.prefs.setBoolPref(pu, true); try { this.save(); e.preventDefault(); this.hide(); } finally { sl || Services.prefs.setIntPref(pl, cl); cu || Services.prefs.setBoolPref(pu, cu); } }, get hide() { delete this.hide; var popup = document.getElementById("contentAreaContextMenu"); return this.hide = popup.hidePopup.bind(popup); }, get save() { var func = eval(`(function ${gContextMenu.saveMedia})`.replace( /^( )(?:false, \/\/ don't)( skip prompt for where to save)/m, "$1true, //$2" )); delete this.save; return this.save = () => func.call(gContextMenu); } }, false, gBrowser.tabpanels || 1);
Отсутствует
Dumby нашел старый код со времен гороха, подскажи пожалуйста чем заменить в этом коде var btn = document.popupNode;
/////////////////////////////// Сохранить кнопку в HTML файл /////////////////////////////// this.saveToHTMLCode = function saveToHTMLCode() { var btn = document.popupNode; var xml = '<html xmlns="' + xhtmlns + '">\n'; xml += '<head>\n'; xml += '<meta http-equiv = "Content-Type" content = "text/html; charset=utf-8"/>\n'; xml += '<title> ' + btn.name + ' для Custom Buttons </title>\n'; xml += '<link rel="icon" type="image/vnd.microsoft.icon" href = "'+ btn.image +'" />\n'; xml += '<style type="text/css">\n'; xml += '.button a{ \n'; xml += 'background-color: rgb(85, 168, 2); \n'; xml += 'background-image: linear-gradient(to bottom, rgb(147, 200, 94), rgb(85, 168, 2)); \n'; xml += 'background-image: -moz-linear-gradient(top, rgb(147, 200, 94), rgb(85, 168, 2)); \n'; xml += 'border: 1px solid rgb(58, 116, 4); \n'; xml += 'border-radius: .5em; \n'; xml += ' -webkit-border-radius: .5em; \n'; xml += 'padding: 0; \n'; xml += 'margin-bottom: 1em; \n'; xml += 'box-shadow: 1px 2px 3px rgba(0, 0, 0, .25); \n'; xml += ' -o-box-shadow: 1px 2px 3px rgba(0, 0, 0, .25); \n'; xml += ' -webkit-box-shadow: 1px 2px 3px rgba(0, 0, 0, .25); \n'; xml += ' color: #000; \n'; xml += ' text-shadow: -1pt -1px 0pt rgba(255, 255, 255, .5); \n'; xml += ' padding: 0.5em; \n'; xml += ' text-decoration: none; \n'; xml += '} '; xml += 'pre { border: 1px inset rgb(170, 170, 170); \n'; xml += 'background-color: rgb(255, 255, 255);} \n'; xml += 'body { background-color: rgb(245, 245, 220);} \n'; xml += '</style> \n'; xml += '</head>\n'; xml += '<body>\n'; xml += '<section id="install"><h1> ' + btn.name + ' </h1> \n'; xml += '</section>\n'; xml += '<div class="button"><a href = "' + btn.URI + '">Установить кнопку</a></div> \n'; xml += '<section id="init"><h2>Инициализация</h2><pre>' + e4xConv_encodeHTML(btn.cbInitCode) + '</pre></section>\n'; xml += '<section id="code"><h2>Код</h2><pre>' + e4xConv_encodeHTML(btn.cbCommand) + '</pre></section> \n'; xml += '<section id="help"><h2>Справка</h2><pre>' + e4xConv_encodeHTML(btn.Help) + '</pre></section> \n'; xml += '</body> \n'; xml += '</html> '; var html = '<!DOCTYPE html>\n' + xml; var name = btn.name + ".HTML"; saveToFile(html, name); var as = Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService); as.showAlertNotification(btn.image, "Кнопка: " + btn.name, "сохранена в HTML файл", false, "", null); } function e4xConv_encodeHTML(s, isAttr) { s = String(s) .replace(/&/g, "&") .replace(/</g, "<") .replace(/>/g, ">") .replace(/"/g, """); if(isAttr) { s = s .replace(/\t/g, "	") .replace(/\n/g, "
") .replace(/\r/g, "
"); } return s; };
Отсутствует
подскажи пожалуйста чем заменить в этом коде var btn = document.popupNode;
Откуда же мне знать как «этот код» используется?
Наверно XULPopupElement.triggerNode подойдёт.
Отсутствует
Dumby Вот полностью код
/*Initialization Code*/ ///////////////////////////////////////////////////////////////////////////// /////////////////////////////// Создание меню /////////////////////////////// ///////////////////////////////////////////////////////////////////////////// function $(aId) { return document.getElementById(aId); }; function addMenuItem(aNewIDs, aNodeIDs, aLabel, aIcon, aCommand) { for (var i = 0; i < aNewIDs.length; i++) { if ($(aNewIDs[i])) $(aNewIDs[i]).parentNode.removeChild($(aNewIDs[i])); var mi = document.createXULElement("menuitem"); mi.setAttribute("id", aNewIDs[i]); mi.setAttribute("class", "menuitem-iconic"); mi.setAttribute("image", aIcon); mi.setAttribute("label", aLabel); mi.setAttribute("oncommand", aCommand); if (i == 0) mi.setAttribute("observes", "custombuttons-contextbroadcaster-primary"); if ($(aNodeIDs[i])) { if ($(aNodeIDs[i]).nextSibling) { $(aNodeIDs[i]).parentNode.insertBefore(mi, $(aNodeIDs[i]).nextSibling); } else { $(aNodeIDs[i]).parentNode.appendChild(mi); } } } }; var saveImg1 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAnUlEQVQ4jc3RPQ4BURTF8Z+PgrAPtUJnIxZgBZagkolVqDWWIliARCFR6GSq0Twyw2SemcpJTnPzzv/edy//ohOymj7mARl6NRoOQ6YAiGmNFAm6TQBpePdAJwYYYIF+rpaE8CoGaGEbarsw7qfaVYCl4rY3mOOGaQwwU326O8Zhyi/AJPwxdv8rRmWAyw/hl89lgCZ+69AgvPcXegKfOWlGgoA/rgAAAABJRU5ErkJggg=="; var saveImg2 = "data:application/file;base64,AAABAAEAEBACAAEAAQCwAAAAFgAAACgAAAAQAAAAIAAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAADbAAADpcAAA//AAANVwAAD/8AAAKsAAAD/AAAP//AAAP8AAAD/AAAD/8AAAwDAAAP/wAAA/wAAAP8AAA"; var saveImg3 = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAAAAAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAAAAAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQf//rEH4j6xB8IesQeHDrEHD4axBh/CsQYf4rEGH8KxBw+GsQeHDrEHwh6xB+I+sQf//rEH//6xB//+sQQ=="; var saveImg4 = "data:application/file;base64,AAABAAEAEBACAAEAAQCwAAAAFgAAACgAAAAQAAAAIAAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAA/wAAAP8AAA"; var saveImg5 = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU1FQr1FRT7BRUU+wUVFPsFFRT7BRUU+wUVFPsFFRT7BRUU+wUVFPsFFRT7BRUU+wU1FQrwAAAAAAAAAAAAAAAHd0cpz//////////////////////////////////////////////////////////3d0cpwAAAAAAAAAAAAAAAB4d3Sc/////+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg//////94d3ScAAAAAAAAAAAAAAAAenh3nP/////i4uL/4uLi/5yiz/9HYcT/PWrR/1qQ3P+nuNr/4uLi/+Li4v//////enh3nAAAAAAAAAAAAAAAAH18eJz/////5OTk/2FluP8IJ6r/D1TU/wli4v8FZeb/D3He/4y+5f/k5OT/+/v7/318eJwAAAAAAAAAAAAAAACBfXyc/////5Wc0v8JKq//E2Pd/yFTrv9EKTn/LjVZ/xaF2/8OdNP/zNnm//z8/P+BfXycAAAAAAAAAAAAAAAAhIGBnP////89Xc7/Dk7N/wpQ0/8zVp//TGCK/4U2Cf9DW2b/Eqj7/5C+5//8/Pz/hIGBnAAAAAAAAAAAAAAAAIaEgZz/////Kmnf/wlFzf8gPZ7/uXcl/8OAK/+UTBL/b1Az/zfG9f9srdX/+fn5/4aEgZwAAAAAAAAAAAAAAACJhoac/////0iN6P8HQtH/EVzd/2mCqf/dqkz/0pY6/6FnKv9Nvt7/kMfs//X19f+JhoacAAAAAAAAAAAAAAAAiomJnP////+Mr+r/FFnU/xVRyv+LorL/8Oqh//nXbP+5omH/Urvf/8bj7v/s7Oz/iomJnAAAAAAAAAAAAAAAAI6Kipz/////2+n3/5aSm/+hcEn/4uXC////2P/25KD/rqSD/7HR5//o6Oj/4eHh/46KipwAAAAAAAAAAAAAAACPjo6c//////j4+P/4+Pj/3s/F/9i/n//p27n/5NG0/+7r6f/r6+v/3t7e/9LS0v+Pjo6cAAAAAAAAAAAAAAAAk4+PnP/////6+vr/+vr6//r6+v/6+vr/+vr6//j4+P/19fX/r66t/62sq/ObmprrkI2NpgAAAAAAAAAAAAAAAJOTk5z//////Pz8//z8/P/8/Pz/+/v7//r6+v/4+Pj/9fX1/66trfHs7Ozrp6emp4aGhhMAAAAAAAAAAAAAAACWlpOc/////////////////v7+//39/f/6+vr/9/f3//Pz8/+bmprrp6enp3NzcxYAAAAAAAAAAAAAAAAAAAAAmJiWnJiYlpyYmJacmJiWnJeTk52SkZGemJiWnJeTk52SkZGej4+LpIaGhhMAAAAAAAAAAAAAAAAAAAAAgAMAAIADAACAAwAAgAMAAIADAACAAwAAgAMAAIADAACAAwAAgAMAAIADAACAAwAAgAMAAIADAACABwAAgA8AAA=="; var saveImg6 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABKklEQVR42mNkQAMNDAxCQMoTiB2BWAEq/ACI9wPxdqD8O2T1jGiao4HUEgb8IAaobimGAUDBGiDVzEAcqAWqb4EbQKTNWF3CCPXzW5ho/f//YDqHkZFhCpQNA7lAMV4gzY4QEmZEtx1mgCtQ8W4o2xLIPg5lJwDZUghDYkAGzAEyktENMAQqPA9l6wDZEkB6D6Yhc0EG7AGynfEZYAxkawHpxVC+A5CvC6RFGBj2Em2AIZCeg8Q3BtLSUAMIegGkwQBIz8U0YC7OQEQ2wAjIPoekGRQTUC/E4IxGkMKzaNEI8jso4chDbGdgA0UjekJ6A8S3gRikFWQyKOF/higGR50UFLPBEhLM9AZoUv4F1cAA1QTi/2SAJFkQnxdCoyZlJEPIz0xIhpCUnQFx83abgfUZOQAAAABJRU5ErkJggg=="; var saveImg7 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAASUlEQVR42mNkoBAw0s6ABob/aHxGkg1I8zEGM2dtOTskDED3MxCgGIBpASOGATANhACyi6hrAGVeoDgQB6UB2PxMvAFEAooNAAC7izYR2pQ0nAAAAABJRU5ErkJggg=="; var saveImg8 = "data:application/file;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAD///8A////AESqAABHpgAASKAAAEukAQxMpQMYR6MAAEepAQ9MpgOLRKgACUenAABHpgAARKoAAP///wD///8A////AP///wBEqgAARaIAAFS2FVBj0jS3Y9AzyVG0EUROrwt8TKcDs0ikAANInwAAR6YAAESqAAD///8A////AP///wD///8ARKQAAVvJKJtj0jX/SaAJ/0abCv9UtSH/U7QX8lW5IMddwyfQW8Iii0mqBQ1DqQAA////AP///wD///8A////AEWlAAFYwB6YXsYc5F7GFt9bwA+vVbgWvU6rAKBRrgf0RZgA/02oDP9ezCzJR6UBA////wD///8A////AP///wBFrAAASKIAADiGNQAeYIIpF1iJHVa4GKEve0tFLHl1Pla7J51exRnUWL8VjEetAAP///8A////AP///wD///8AC0WuAAk/tAAANdpIAFD6/wA+7f8gd6jqBlPX+QBE9PIGS8uDLnZLADqNJwAzjDMA////AP///wD///8A////AAAw0QAALc0AAEPdegBI4f8AK8P/ADHX/wAwzf8AL8b/AEno/gAz2zYALtEQAC3VAP///wD///8A////AP///wAAMssAADjSMwBA2pIATen/ADG9/wBe1v8ATcz/ADHK/wBN5/4ASeH/AEvl6wA10DP///8A////AP///wD///8AADnTSQBO5/8ANc7/ADnR/xC+9/8C0f//AMj//wCP8P8ALcX/ACrC/wBE3f8ASeOf////AP///wD///8A////AABI4Z4ARN3/ACvG/wJAxP8Z5v//AMT//wDE//8Axv7/AETM/wA51P8AUervADjSPP///wD///8A////AP///wAAOdRiAFry+QBS6/QATOP/H+P8/xDe//8J1///E9H4/wFE2f8AReC6ADTOEwAyywD///8A////AP///wD///8AADDNAAAyzCcARN7WACvG/wVfzf8d0vf/HM30/whf0/8AI7n/ADzV+AA40kUAMswA////AP///wD///8A////AAAwywAAPNdTAEfg/wAsw/8AOdb/ADLP/wAswv8AReP/AC7H/wA40f8AR+GfADDKAP///wD///8A////AP///wAAMswAADfRQgBY8f8AT+j/AE7o7AA+1/8AK8T/AE7o/wBN5f8AVe7/AD/ZbAAwywD///8A////AP///wD///8AADPMAAAyywAANM4vADjSUQA0zikAU+z3AEff/wBJ4sMAN9EtADjROQAyywAAM8wA////AP///wD///8A////AAAzzAAAM8wAADHLAAAwywAAMcsAAD/YXQBK4pYAN9AxAC/KAAAwygAAM8wAADPMAP///wD///8A+R8AAPAfAADABwAAwAMAAPgDAADwHwAA8AcAAOADAADAAwAAwAMAAMAHAADgBwAA4AcAAOAHAADwDwAA/j8AAA=="; var saveImg9 = "data:application/file;base64,AAABAAEAEBAAAAAAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8BAAAAFwAAAGkAAABzAAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAADkAAAAP////AQAAAIdgZmj/YWlt/2FobP9haGz/YGhr/2Boa/9fZ2v/X2dr/15mav9dZWn/XGRo/0ZNUP8AAACdAAAAFf///wEAAACr2tzc/9ve4P/a3t//1dnZ/7S2tf+foJz/m5ya/6apqP/O0tP/09fZ/9DV1v+hqq//AAAAuQAAABX///8BAAAAq+3u7//e4eL/ub29/2hnXv9oVUX/U0As/zgxGf83Lx3/YWBX/7a5uv/S1tj/o6yx/wAAALkAAAAV////AQAAAKv29/f/19na/1dUQf9jXDv/dmtJ/4FoSP9VQiL/V0Ek/008Iv9HQTP/yc3P/6Wus/8AAAC5AAAAFf///wEAAACr+Pj4/5uamP9tY0L/g31b/6GLa/+McVH/eFY5/4xwUv9yXkD/RTki/4uMiv+nsLT/AAAAuQAAABX///8BAAAAq/n6+v+FfXL/waSM/8qznf/DrZP/ooFi/7WfhP+qh2//blk9/1A+Iv9aWlH/pK2x/wAAALkAAAAV////AQAAAKv6+/v/d3Rr/9zCsP/RxbH/z8Wu/9fJt//Qvab/qItv/5iOb/9tYUH/VVJK/6Wtsf8AAAC5AAAAFf///wEAAACr+/z8/4mHff+3pI//3NK//+HXxf/m3Mz/5trJ/9rMuf+bgWT/d14//2hnYP+osbX/AAAAuQAAABX///8BAAAAq/z9/f/FxL7/j4l+//Xw5f/29ez/8/Dl/+DMuv/VuaP/poZn/2dFKv+srav/oamt/wAAALkAAAAV////AQAAAKv+/v7/+/z8/5iZjf+5uqr/6+PW/+3i1P/kzL3/vZR+/4NhSf+Qh3z/z9HS/4qQkv8AAAC1AAAAFf///wEAAACr/v7+//7+/v/u7u3/tbiv/5WSgP+DfGj/e25Z/29gTv+sppz/vr6+/5aYmP90eHr/AAAApwAAABP///8BAAAAq/////////////////7+/v/9/f3//f39//v8/P/5+fn/1dXV/2pqav9TU1P/QUFB/wEBAYkAAAAJ////AQAAAKv7+/v//////////////////v7+//7+/v/+/v7/+vr6/9fY2P/V1tb/7Ozs/4KCgv8EBAQrAAAAA////wEAAACFlJSU/6ioqP+qqqr/qqqq/6qqqv+qqqr/qKio/6anp/2kpaX9o6Oj/4qKitUZGRk9////Af///wH///8BAAAAFQAAAFUAAABVAAAAVQAAAFUAAABVAAAAVQAAAFUAAABTBAQEUx8fH1dfX18z////Af///wH///8BAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w=="; var loadImg = "data:image/x-icon;base64,AAABAAEAEBAAAAAAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////AQAAAB+yg2l71ZRt+daTa//Wk2v/1pNr/9aTa//Wk2v/v4NlywYEAycAAAAX////Af///wH///8B////Af///wHdo4M53Zx3/+Sgef/innb/4p52/+Kedv/lo3r/5aR6/+mqgfvPj27N////Af///wH///8B////Af///wH///8B4KSD8+mmff/opH3/56N6/+Whef/no3r/66qB/8KBXf/Fg1//0Y5s78+Pbqn///8B////Af///wH///8B////AeGlg//trIX/7ayE/+6thP/urIX/9bWL/8eFYf/GhF//yYZh/9SPa/nkn3j/////Af///wH///8B////Af///wHkn3j/76+G/+6uh//vrob/76+G//W3jP/GhF//y4di/9ONZ//XkWr/5J94/////wH///8B////Af///wH///8B5J94/++wif/wsIj/8LGJ//CxiP/0toz/y4di/8+KZf/vroP/766D/+SfeP////8B////Af///wH///8B////AeSfeP/xs4v/8bOL//Cziv/ws4v/87WL/9CNa+3QjWvt3p96/96fev/en3r/////Af///wH///8B////Af///wHkn3j/8rWN//K2jf/ytY3/8rWN//O2jvfdo4Lj0I5sJdCObCXQjmwl0I5sJf///wH///8B////Af///wH///8B5J94//O3j//zuI//87iP//O4j//zuZDx3aOD7////wH///8B////Af///wHdo4M/5J94/+SfeP/kn3j/5J94/++2j//zupH/9LqR//O6kv/0upL/87qR/+SfeP/kn3j/5J94/+SfeP////8B////Af///wHkoXr/9cCY//W8k//0vJT/9L2T//S8lP/0vZT/9LyU//S8lP/1vJT/9cCY/+Shev////8B////Af///wH///8B9b+WC+SjfP/2yqP/9b+W//a/lf/2v5X/9b6V//W+lv/1vpX/9sqj/+SjfP////8B////Af///wH///8B////Af///wH2wZgX5aZ+//fTrP/2wJj/9sCY//bAmP/2wZj/99Os/+Smf/////8B////Af///wH///8B////Af///wH///8B////Af///wHkqYH/99ax//fCmv/3wpn/99aw/+Sogf////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AeWrhP/317L/99ey/+WrhP////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B5a2F/+Wthf////8B////Af///wH///8B////Af///wH///8BAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w=="; var moveToMenu = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABKElEQVR42o3TMUvDQBQH8P+7tLlEwaW4ugl+iU6CCA4i0tbdqavgZ/ErCE79DsVBkYpKLR2kuApOatG297zLJWkqXnIPwrsk937cveQIJXHZBZt8cgFyzaEqYGuTvl7feM2FVAIHR8Bj341UAu1T4PPdjXgBJgzyPKDFy4SDIkJZo1yRASZ+FDB5Itzfct7YBGjuBBBh6oT6ed2OazGjsV3wQ2Cu64bXUKM7FgZJgPaufinTSVFhrDPFheVIe01nwLgfq9HNVCRAaw8Q6USWS4B05mgVIH2/qG+ABh+46im7heP9EELOLRDZpVqAQev8ZwUS/DBLivMtlDWxc7Ycs6yBhyov9vqMGcBBDB5/rxT7/Qfntjn/FXsDrmIvoHUonMVegMllx/kXlvSRMQ0GPE4AAAAASUVORK5CYII="; var removeFromToolbar = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACMElEQVR42p3Sz2/SUBwA8G9pgQJd6QYZQQkOjUFdXMCLMn9B4l3myRgXhydPZgcTY2KyLfGiF/wT9GTmhfIXjMQ4NP5YD5qZTGdVdEx+9FVKSwttrTV4QD3AN3mH9837fr7v+/Kww1e4ic2HiSYMRGxufcHjxs87nQ5GN0zodnXQNLVomvCAL6ZR/xxmAS9VsX1umz1pJ/dfKGeD4+58OERNYQQO7Y4BWs8E3XCAqvRAEkWkdpTcNptm+4DpMVUOtboZl4tY2reXWmTGvbDTVKFnALicTrvYsFqbpgEOBw6tpgiigOb4Yoa1gTMzY1B+XUexKM1gLid8a3QgQHtBklQQBJm3RuAxDBiPl0z4aMq+eu1rFYmiFLOBowd8QJEEiLIBlbpV7PdArdZCApJX3j9O3e/Pe/Di0zTpJgvB8CSjSG1o7O7mbCA04QIHjoGsGuAfI6FRk0D8ISe3VlPc4OPGL61nab+/QDE0VD9/+T1CKOCCtqoDQRBAe0n4yH/nZUVLVtjTCP4R8cvPN8LRSKL6qVKygUjIC0rXAAMw6+EI6GkmoGaDM0DP8KuzfyHx+WfLe6KRpdpOlbMB+E9oWof78OhEcjB/5OqLbHAyUEB1oYTBCDFz7VWaYZg11BTYkYBj17lFyu3Lo5aYGwk4fuNNHgd8QVHk2EjA7K3NDVM3iuV708tDA2dXtqb0rr5mrWT57jQaGjh1+13eKio+uXOo9Gs/NJC6+TZhdf7zQ38Ceg0HgF1MCP0AAAAASUVORK5CYII="; var iconADD = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAMAAABl5a5YAAAAkFBMVEWsFBSfERGYExOPDw8jEBCwFBRJICDXICBCGRnELCwUDg5BDg6XDg7AFhbAGBjVKyvHHBzIKyuJGBiDGRm7FxeiOTmMMDASDg5PExM1Dg4TDg4xEBBaIyMvExMsExMbDw9GDg4AAAC5Dw/JDg7MDg7QDw++Dg60Dg7DDg6sDg61FRWNDg7YGRmwDg7WKyvEGhojAnMyAAAAInRSTlP7+/TzTfst/k/9J4T85N/16PFfWgljXR15BRU7HQ8MMIsAJl/uYAAAAINJREFUeF6Nz8cSgzAMBFDSGx1Cc4wdSy6Q9v9/F4Y2Hk7sTe+iXee5yFqokzhOqAWPr5QtsyFAOMxQ0voYIDokTcsestALTwjK8/2ih/tbSkQwSjd8BEDobjFB9hPCGNVuXHeAipBzpMR2z1g+vaWR1rvc7nFpPq+rXb3g/FatXrvIH9eGIuNzLuIwAAAAAElFTkSuQmCC"; var customBtn = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjVJREFUeNqcUkuIUmEUPl4fML6bBsFRacRF2EaCcRO48bFLEIJcBIJLxb2b2UWLkIEgQQjauVFaKmgYuclUTMUHKoaKE4GPxnxh5r3ezh0QHJFmmA/OPZfDfx7fdw7AfojQ7qGx4QawdgMymeyRyWR6IZVKucFg8N10Ov0Ot4VGozmNRCLx5XL5F/HHbrefYZh7m1yWWq0+TafTn2kEdqXr9TrtcDje3JR4xRHH1QYCgXOz2Wzs9/sQj8dBIpEATtGrVqu9yWSywmdLNGq3AAeNsFgsz202mxk7QzKZBK1WCzqdjtHjKUmSx41Go4L+slQqpYvF4keKoibXpnA6nWfY+VehUKBSqRTJ0Oh2u3Qul6MHgwE9Ho9pLMD4H16v95zD4RxuU6BbrdYlPh5g8tfFYvET9XiIiRylUsnQgPl8DtgVhsOheL1eS6LRaGy1Wg02FAA5VmKxWB1/yUQioWOxWHKXy2XEYsDQEggEgKJCJpOBcrnMbOliW4MNSOaDCbVKpVISCoVGHBnQQygUgnK1AkeH9z+Ew+HX2xoQezZDjUaj3ygDiMViaLfbV8kK+TGw2WysJzzafry3QK1W+9Lr9RpIDbLZLEhE4vedTsdvMBieuN3ulwRBPLh2B7uYzWYXzWZzjBoc5PP5MJ70K1xfEsVc4cpNeDcnuLFvzM3978gILpcrRy/w+XybGE+v1z/z+/2frFarG9d5AHeBSqUyeDyetwqF4jHcFXw+/4TH44n+CTAA3Ccog288LRAAAAAASUVORK5CYII="; var saveAll = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACOElEQVR42mNkwAJ+7xf7//3tKwZeIUELRqf3JxnwAEZkzrtlwnv/MzE6/WfkWCwS/iTu7RLO/wzMPAwc/z4Lc0f/eIfTgP/7BM0PXDY5ofB9N8M/EB8k+BcoyQw1mEWd4SurLIO97lkUFzX9b/oPNmBznc7/////MbAzfIdoBoI/P77Abfnzn4XhH9A0kOLA7icQV88HKn0EdcH6Ss3/yM76/f0jg2vTXYZ/f39j9fdUgQkMdTp1DNFXoiEGrCzFNMCj6SrD/79/MDQzsbAzCEfyMTBwADkbGBjBBiwrRDXgF9AAz6ZLWF1QIlHCsFRnKdj2pYxLIQYsytPAMMC75SLYBVMkpzDkPM+By0lFSTEwCDAwvJ79eouoqKgv2IB5WWgGfPvI4N95kUEyQQwcJVXbq8CGeEp6MlzUuQi2fcKbCQgDZqWhG/CJIaDrLIPMf0kGBjeggAoDw5YNWxh8rHwYGMQZGB5PfszAysq6RUJCAmLAtCR1DAMCu08zzJSZxtDm0cbA8AQoyAxJGyDbWx+2MrCwsGyRkZGBGDApDpsBx8FhME95HkObfhtYM4MqA8OdnjtgNSAXyMvLQwzoi8JmwGF4NGoc12Bg6IHYXnuzFm6AsrIyxIAJ+UHXfj27oomIhc9AA/ajpAOdPToMV1yuwPnMzMxbNDU14QaEAqnGH28fqYGywt/fP5i8q5czYUtIMABygY6ODsSAJUuWOKMrUFHT2PPvzy90YZhX/79//36dt7d3KACPfPJHOU7GxAAAAABJRU5ErkJggg=="; let cIDs = ["custombuttons-contextpopup-exportXML", "custombuttons-contextpopup-exportXML-sub"]; let bIDs = ["custombuttons-contextpopup-bookmarkButton", "custombuttons-contextpopup-bookmarkButton-sub"]; addMenuItem(cIDs, bIDs, "Сохранить код кнопки в XML файл", saveImg9, "document.getElementById('" + this.id + "').saveXML(('triggerNode' in this.parentNode) " + "? this.parentNode.triggerNode.URI " + ": document.popupNode.URI);", "X"); let xIDs = ["custombuttons-contextpopup-importnewbutton", "custombuttons-contextpopup-importnewbutton-sub"]; let aIDs = ["custombuttons-contextpopup-addnewbutton", "custombuttons-contextpopup-addnewbutton-sub"]; addMenuItem(xIDs, aIDs, "Добавить кнопку из XML файла\u2026", loadImg, "document.getElementById('" + this.id + "').loadXML();"); let fIDs = ["custombuttons-contextpopup-copyImageURI", "custombuttons-contextpopup-copyImageURI-sub"]; let b2IDs = ["custombuttons-contextpopup-copyURI", "custombuttons-contextpopup-copyURI-sub"]; addMenuItem(fIDs, b2IDs, "Копировать изображение кнопки в формате base64", saveImg1, "document.getElementById('" + this.id + "').copyImageURI();"); let f1IDs = ["custombuttons-contextpopup-saveButtonImage", "custombuttons-contextpopup-saveButtonImage-sub"]; addMenuItem(f1IDs, cIDs, "Сохранить изображение кнопки", saveImg8, "document.getElementById('" + this.id + "').saveImageURI();"); let f2IDs = ["custombuttons-contextpopup-copyButtonsCodeText", "custombuttons-contextpopup-copyButtonsCodeText-sub"]; addMenuItem(f2IDs, b2IDs, "Копировать код кнопки как текст", saveImg2, "document.getElementById('" + this.id + "').copyButtonsCodeText();"); let f3IDs = ["custombuttons-contextpopup-copyAsHTML", "custombuttons-contextpopup-copyAsHTML-sub"]; addMenuItem(f3IDs, b2IDs, "Копировать код кнопки как HTML ссылку", saveImg3, "document.getElementById('" + this.id + "').copyToHTMLCode();"); let f4Ds = ["custombuttons-contextpopup-copyToBBCode", "custombuttons-contextpopup-copyToBBCode-sub"]; addMenuItem(f4Ds, b2IDs, "Копировать код кнопки как BBcode сылку", saveImg4, "document.getElementById('" + this.id + "').copyToBBCode();"); let f5Ds = ["custombuttons-contextpopup-saveAsHTML", "custombuttons-contextpopup-saveAsHTML-sub"]; addMenuItem(f5Ds, bIDs, "Сохранить код кнопки в HTML файл", saveImg5, "document.getElementById('" + this.id + "').saveToHTMLCode();"); let f8Ds = ["custombuttons-contextpopup-saveAsHTMLAll", "custombuttons-contextpopup-AsHTMLAll-sub"]; addMenuItem(f8Ds, f5Ds, "Сохранить все кнопки в HTML файл", saveAll, "document.getElementById('" + this.id + "').saveToHTMLALLCode()"); let f6Ds = ["custombuttons-contextpopup-getButtonId", "custombuttons-contextpopup-getButtonId-sub"]; let b1IDs = ["custombuttons-contextpopup-remove", "custombuttons-contextpopup-remove-sub"]; addMenuItem(f6Ds, b1IDs, "Показать Id кнопки", saveImg6, "document.getElementById('" + this.id + "').idMIonclick(window.document);"); let f7Ds = ["custombuttons-contextpopup-addNextButton", "custombuttons-contextpopup-addNextButton-sub"]; var addMI = document.getElementById('custombuttons-contextpopup-addnewbutton'); addMI.setAttribute('image', iconADD); var addMI1 = document.getElementById('custombuttons-contextpopup-addnewbutton-sub'); addMI1.setAttribute('image', iconADD); var addMI2 = document.getElementById('custombuttons-contextpopup-move-moveToPanel'); addMI2.setAttribute('image', moveToMenu); var addMI3 = document.getElementById('custombuttons-contextpopup-move-removeFromToolbar'); addMI3.setAttribute('image', removeFromToolbar); var addMI4 = document.getElementById('custombuttons-contextpopup-customize'); addMI4.setAttribute('image', customBtn); //var addMI5 = document.getElementById('custombuttons-contextpopup-remove'); //addMI5.setAttribute('label', 'Удалить...'); ///////////////////////////////////////////////////////////////////////////// /////////////////////////////// Общие функци //////////////////////////////// ///////////////////////////////////////////////////////////////////////////// var options1 = {year: "numeric"}; var options2 = {day: "numeric", month: "long"}; var cDate = new Date().toLocaleDateString("ru-RU", options1); var dDate = new Date().toLocaleDateString("ru-RU", options2); var aDate = cDate + "г" + " " + dDate; var options3 = {weekday: "long", year: "numeric", month: "long", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric", hour12: false}; var bDate = new Date().toLocaleDateString("ru-RU", options3); var saveToFile = function (fileContent, fileName) { var uc = Components.classes['@mozilla.org/intl/scriptableunicodeconverter'].createInstance(Components.interfaces.nsIScriptableUnicodeConverter); uc.charset = 'utf-8'; fileContent = uc.ConvertFromUnicode(fileContent); var nsIFilePicker = Components.interfaces.nsIFilePicker; var fp = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker); fp.init(window, '', fp.modeSave); fp.defaultString = fileName; fp.appendFilters(fp.filterHTML); fp.appendFilters(fp.filterAll); fp.open(function (rv) { if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) { var stream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream); stream.init(fp.file, 0x02|0x20|0x08, 0666, 0); stream.write(fileContent, fileContent.length); stream.close(); } }); }; function mostRecentWindow(windowType) { return Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow(windowType); }; ///////////////////////////////////////////////////////////////////////////// ////////////////////////////Остальные функци //////////////////////////////// ///////////////////////////////////////////////////////////////////////////// /////////////////////////////// Показать Id кнопки /////////////////////////////// this.idMIonclick = function idMIonclick() { var btn = document.popupNode.id; var box = custombuttons.confirmBox("Копировать в буфер", btn, "Да", "Нет"); if (box) { custombuttons.cbService.writeToClipboard(btn); custombuttons.alertSlide(btn, "Скопирована в буфер"); } } /////////////////////////////// Копировать изображение кнопки в формате base64 /////////////////////////////// this.copyImageURI = function copyImageURI() { var btn = document.popupNode; if (!btn) return; cbu.gClipboard.write(btn.image); var as = Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService); as.showAlertNotification(btn.image, "Кнопка: " + btn.name, "Изображение кнопки скопировано в буфер", false, "", null); } /////////////////////////////// Копировать код кнопки как текст /////////////////////////////// this.copyButtonsCodeText = function copyButtonsCodeText() { var btn = document.popupNode; if (!btn) return; var code = ((btn.cbCommand == "") || (btn.Command == "/*CODE*/")) ? "" : ("\n/*CODE*/\n" + btn.cbCommand + "\n"); var init = ((btn.cbInitCode == "") || (btn.cbInitCode == "/*Initialization Code*/")) ? "" : ("\n/*Initialization Code*/\n" + btn.cbInitCode); cbu.gClipboard.write(code + init); //custombuttons.alertSlide(btn.name, "Код скопирван в буфер"); var as = Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService); as.showAlertNotification(btn.image, "Кнопка: " + btn.name, "Код скопирван в буфер", false, "", null); } /////////////////////////////// Копировать код кнопки как HTML ссылку /////////////////////////////// this.copyToHTMLCode = function copyToHTMLCode() { var btn = document.popupNode; if (!btn) return; var code = "<p><div id=\"install\" style=\"background: transparent -moz-linear-gradient(center top , rgb(224, 102, 255) 30%, rgb(125, 38, 205) 55%); text-shadow: 0pt -1px 0pt rgb(122, 55, 139); border: 1px outset rgb(85, 26, 139); border-radius: 1em; padding: 0; width: 240px; text-align: center;\"><a href=\"" + btn.URI + "\" style=\"display: block; padding: 1em; color: #ffffff; text-decoration: none;\" title=\"Click here to install " + btn.name + "\" rel=\"nofollow\"><img src=\"" + btn.image + "\" alt=\"" + btn.name + "\" style=\"vertical-align: middle; float: left;\"/>" + btn.name + "</a></div></p>"; cbu.gClipboard.write(code); var as = Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService); as.showAlertNotification(btn.image, "Кнопка: " + btn.name, "HTML кнопки скопирован в буфер", false, "", null); } /////////////////////////////// Копировать код кнопки как BBcode сылку /////////////////////////////// this.copyToBBCode = function copyToBBCode() { var btn = document.popupNode; if (!btn) return; var code = "[url=" + btn.URI + "][B]" + btn.name + "[/B][/url]"; cbu.gClipboard.write(code); //.toXMLString()); var as = Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService); as.showAlertNotification(btn.image, "Кнопка: " + btn.name, "BBCode кнопки скопирован в буфер", false, "", null); } /////////////////////////////// Сохранить изображение кнопки /////////////////////////////// this.saveImageURI = function saveImageURI(btn) { var remove = gBrowser.removeCurrentTab.bind(gBrowser); var promiseTargetFile = async (...args) => { var res = await window.promiseTargetFile(...args); setTimeout(remove, 0); return res; } var internalSave = eval(`(${window.internalSave})`); var save = eval(`(${window.saveDocument})`); var btn = document.popupNode; if (!btn) return; (saveButtonImage = btn => { if (btn.image != "") { var tab = gBrowser.selectedTab; gBrowser.selectedTab = gBrowser.addTab(btn.image, { triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() }); setTimeout(function() { window.content.document.title = btn.name; save(window.content.document); }, 2000); } else custombuttons.alertBox("Эта кнопка не имееет изображения!"); })(btn); } /////////////////////////////// Сохранить кнопку в XML файл /////////////////////////////// this.saveXML = function saveXML(aStrURI) { var cbURI = (aStrURI != undefined) ? aStrURI : readFromClipboard(); if (!cbURI || !/^custombutton\:\/\//.test(cbURI)) { custombuttons.uChelpButton(this); return; } var topicURL = "http://forum.mozilla-russia.org/viewforum.php?id=34" var cbXML = cbURI.replace(/^custombutton\:\/\//, ""); var decodeXML = unescape(cbXML); var btnName = decodeXML.match(/\<name\/?.+/).toString(); var name = "untitled"; if (!/\<name\/\>/.test(btnName)) { name = btnName.replace(/\<\/?\w+\>/g, "").toString(); } var image = decodeXML.match(/\<image\/?.+/).toString(); var icon = ""; if (!/\<\image.*\[\].*\>$/.test(image)) { icon = image.match(/[^\[\]]+/g)[2].toString() .replace(/custombuttons\-stdicon\-\d/, "").toString(); } function htmlEntities(str) { return str.replace(/&/g, "&").replace(/</g, "<") .replace(/>/g, ">").replace(/"/g, """); } var xmlTemplate = "custombuttons/\"\n\ xmlns:html=\"http://www.w3.org/1999/xhtml\">\n\ <html:head>\n\ <html:title><![CDATA[" + name + "]]></html:title>\n\ <html:link rel=\"shortcut icon\" href=\"" + icon + "\"/>\n\ <html:style type=\"text/css\"><![CDATA[\n\ body { font-size: medium; margin: 0; }\n\ body, code:before, help:before, initcode:before {\n\ font-family: \"Verdana\", sans-serif;\n\ }\n\ #wrapper { position: fixed; top: 1em; right: 1em; text-align: center; }\n\ p { font-size: small; text-align: center; }\n\ #button {\n\ background-color: rgb(85, 168, 2);\n\ background-image: linear-gradient(to bottom, rgb(147, 200, 94),\ rgb(85, 168, 2));\n\ background-image: -moz-linear-gradient(top, rgb(147, 200, 94),\ rgb(85, 168, 2));\n\ background-image: -o-linear-gradient(top, rgb(147, 200, 94),\ rgb(85, 168, 2));\n\ background-image: -webkit-linear-gradient(top, rgb(147, 200, 94),\ rgb(85, 168, 2));\n\ border: 1px solid rgb(58, 116, 4);\n\ border-radius: .5em;\n\ -moz-border-radius: .5em;\n\ -webkit-border-radius: .5em;\n\ padding: 0;\n\ margin-bottom: 1em;\n\ box-shadow: 1px 2px 3px rgba(0, 0, 0, .25);\n\ -moz-box-shadow: 1px 2px 3px rgba(0, 0, 0, .25);\n\ -o-box-shadow: 1px 2px 3px rgba(0, 0, 0, .25);\n\ -webkit-box-shadow: 1px 2px 3px rgba(0, 0, 0, .25);\n\ }\n\ #button a {\n\ color: #000;\n\ text-shadow: -1pt -1px 0pt rgba(255, 255, 255, .5);\n\ padding: 1em;\n\ text-decoration: none;\n\ }\n\ :-moz-any-link:focus {\n\ color: white;\n\ outline-color: transparent;\n\ text-decoration: none;\n\ }\n\ #button a, code, code:before, initcode, initcode:before, help, help:before {\ \n display: block;\n\ }\n\ #credits { position: fixed; bottom: 1em; right: 1em; font-size: small; }\n\ custombutton { background-color: rgb(171, 171, 171); margin: 1em; }\n\ date, image, mode, accelkey { display: none; }\n\ name { font-weight: bold; font-size: x-large; }\n\ code:before, help:before, initcode:before {\n\ font-weight: bold;\n\ font-size: large;\n\ margin: 0 0 1em;\n\ padding: .5em;\n\ }\n\ code:before { content: \"Код\"; }\n\ help:before { content: \"Справка\"; }\n\ initcode:before { content: \"Инициализация\"; }\n\ code, initcode, help {\n\ background-color: rgb(255, 255, 255);\n\ border: 1px inset rgb(170, 170, 170);\n\ font: medium monospace;\n\ margin: 1em 1em 2em 0;\n\ padding: 1em;\n\ text-align: left;\n\ width: 840px;\n\ white-space: pre-wrap;\n\ word-wrap: break-word;\n\ }\n\ .clear { clear: both; }\n\ ]]></html:style>\n\ </html:head>\n\ <html:body>\n\ <html:div id=\"wrapper\">\n\ <html:div id=\"button\">\n\ <html:a href=\"" + cbURI + "\" rel=\"nofollow\" title=\"Установить " + htmlEntities(name, "ENT_COMPAT") +"\">\n\ <![CDATA[Установить кнопку]]>\n\ </html:a>\n\ </html:div>\n\ <html:div id=\"credits\">\n\ <html:a href=\"" + topicURL +"\">\n\ <![CDATA[Другие кнопки]]><html:br/>\ <![CDATA[на форуме Mozilla Россия]]>\n\ </html:a>\n\ </html:div>\n\ </html:div>\n\ </html:body>"; decodeXML = decodeXML.replace(/custombuttons\/\"\>/, xmlTemplate); name += ".xml"; saveToFile(decodeXML, name); var btn = document.popupNode; var as = Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService); as.showAlertNotification(btn.image, "Кнопка: " + btn.name, "сохранена в XML файл", false, "", null); } var mrw = mostRecentWindow('navigator:browser'); var css = '@-moz-document url("chrome://browser/content/browser.xhtml"){' + this.Help + '}'; var uri = makeURI('data:text/css,' + encodeURIComponent(css)); var sss = Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService); if (!sss.sheetRegistered(uri, sss.USER_SHEET)) sss.loadAndRegisterSheet(uri, sss.USER_SHEET); /////////////////////////////// Добавить кнопку из XML файл /////////////////////////////// this.loadXML = function loadXML() { var nsIFilePicker = Ci.nsIFilePicker; var fp = window.makeFilePicker(); fp.init(window, "Установить кнопку из XML файла", nsIFilePicker.modeOpen); fp.appendFilters(fp.filterXML); fp.appendFilter("Все файлы", "*.*"); fp.open(re=> { if ( re == fp.returnOK ) gBrowser.selectedTab = gBrowser.addTrustedTab(fp.file.path); }) } /////////////////////////////// Сохранить все кнопки в HTML файл /////////////////////////////// this.saveToHTMLALLCode = function saveToHTMLALLCode() { var visibleCBbuttons = [...document.querySelectorAll('[cb-mode]')]; var paletteCBbuttons = [...custombuttons.palette.querySelectorAll('[cb-mode]')]; var allCBbuttons = visibleCBbuttons.concat(paletteCBbuttons); var gn = btn => btn.getAttribute("label") || "Без названия"; allCBbuttons.sort((a, b) => gn(a).localeCompare(gn(b))); var array = []; allCBbuttons.forEach(but=> { var uri = but.URI ? but.URI : getPaleteButtonsURI(but); var name1 = but.getAttribute("label") || "Без названия"; var image = but.getAttribute("image") || "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAACNFBMVEXDRgDweQDnbwC0NgDCRQC7PQDtpTu+QQD78q3PUwDCRAD//8vbYQDLTgDocAD0iQX1jQbGSgD7iAD4gwDVaw7vdwDyegD+igDweQDlawDyhAXveADmZwDzmBbtcwDwkhHveADmhBTkgxbweADkfRH+igD7hADXZQX0gADyjA/tfgvveQDiawDQVADRXgfnbwD1jAb9iQD9z0PVZAbxpinykRHtdgD5mRbERQDDRgDOYArCRAD9iQD3ewDxegD3dwDFRgDAQAD+hgD4fQDucgDtgQftfwTISQDCRQDvdgD5lxb1kRb2qh7wnynkagD766LDRQDDRwDDRQDspjbtpzbuqDbvqzv//8DUZAbCRQD//83pjhvveQbvggW+QQDfcxLlmUb//8veYADMTwDHSADVVwC8PgDwixb78q3oZgDUWADRVADCRQD9iQDERwDBQQDYVQC+PgC0NgDbYQDWWgDUWADSVQDFSAC+QAC7PAC0NgD+wRL+/kD+/zb+7i3+8Cv+/DX+wBL/+DD/rwz+qgz+rwz/tAz+sQzfbAT+3iP/+jD//Dz1jwP+nwf5iwf7pBz2tRr4lwb/ogfsdQT+2R7/9ET+2iT8yyLmgBL5iQL2egLokhP7zzT60zv1zUr0gAL1ewP50yn9+UL++EXooyngaAH41EPzowzyySj+xxzlhhHvvyruwjXxvTnUag3+zxrwigP+swz86U/ZXwD75lHqegD6xzb//kn+uhPTXAG3OAD/+UC2vFeJAAAAe3RSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAACfnwAIaelpAAA2+wD7UQAAa3oArKzRzMysnwgAvPQA/gAAw3prw0oALr16vS4AACnF6bspAAAA/mIAADQAAAAAAI8AAEwA0vv7kd2yAuuvr+vKABL23U+8Sk/d9vUDIIAQAAAQgCAfvupHAAABB0lEQVR4Xi3IU3fDABgA0C+u26FdZ9u2bdu2vZSzbds2/tyac3IfLxjpGyA6MimqY6gHTNgiiNwkwRM1E7EhTrYyTfMzzsh0ZEPiH+D6+u5mV1jEhpe5haVCYW1T4suEvUOkk7PLpVJ5WFnl7hEUDN5LPvsHJ6cazdn13f3DYxu0B35+/Y2qVSr17NzGeUgohIVHLK/PMDa39qKieRATGxd/9cS4uU1MwnmQktqY/qGlaVr7/ZOVDTmQm5df8PwyNj4xOTVdjOM4kCRZOr+wWFa+srpWQVEU8PnV2zu7NbV19UfHDQRBAIfTdNHc0soVdnR2dfdgGAgEvW99/QNc4eDQ8O8Ihv0D77NPgbVLZ6kAAAAASUVORK5CYII="; array.push("<li>\n<img src=" + image + "> \<a href=" + uri + ">" + name1 +"</a><br>\n"); }); var before = "<html>\n<head>\n<title>Custom Buttons</title>\n<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>\n"; var before1 = "<style type='text/css'>\nbody {background: beige;} a:link {color: black; text-decoration: none;} img {border: 0; margin: 0px 10px;}\n</style>\n"; var before2 = "</head>\n<body>\nCustom Buttons\n<p>\n"; var info = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULAppInfo); var before3 = info.vendor + " " + info.name + " " + info.version + " (build " + info.appBuildID + ")\n"; var after = "\n</ol>\n</body>\n</html>"; var text = before + before1 + before2 + before3 + "<p>\n" + bDate + "<p>\n" + "<ol>" + array.join("") + after; var name = "CB buttons " + aDate + ".html" saveToFile(text, name); var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService) alertsService.showAlertNotification(saveImg5, "Экспорт в HTML", "Экспортировал все CB кнопки как HTML"); setTimeout(()=> alertsService.closeAlert(), 4000); }; function getPaleteButtonsURI(but) { var uri = "chrome://custombuttons/content/nbftemplate.xml"; var stream = NetUtil.newChannel({uri, loadUsingSystemPrincipal: true}).open(); var doc = new DOMParser().parseFromStream(stream, null, stream.available(), "application/xml"); stream.close(); ["help,Help", "name,label", "image,image", "mode,cb-mode", "initcode,cb-init", "accelkey,cb-accelkey", "code,cb-oncommand"] .forEach(str=> { var arr = str.split(','); var value = but.getAttribute(arr[1]), name = arr[0]; custombutton.buttonSetText(doc, name, value, true); }); var ser = new XMLSerializer(); return "custombutton://" + escape(ser.serializeToString(doc)); }; /////////////////////////////// Сохранить кнопку в HTML файл /////////////////////////////// this.saveToHTMLCode = function saveToHTMLCode() { var btn = document.popupNode; var xml = '<html xmlns="' + xhtmlns + '">\n'; xml += '<head>\n'; xml += '<meta http-equiv = "Content-Type" content = "text/html; charset=utf-8"/>\n'; xml += '<title> ' + btn.name + ' для Custom Buttons </title>\n'; xml += '<link rel="icon" type="image/vnd.microsoft.icon" href = "'+ btn.image +'" />\n'; xml += '<style type="text/css">\n'; xml += '.button a{ \n'; xml += 'background-color: rgb(85, 168, 2); \n'; xml += 'background-image: linear-gradient(to bottom, rgb(147, 200, 94), rgb(85, 168, 2)); \n'; xml += 'background-image: -moz-linear-gradient(top, rgb(147, 200, 94), rgb(85, 168, 2)); \n'; xml += 'border: 1px solid rgb(58, 116, 4); \n'; xml += 'border-radius: .5em; \n'; xml += ' -webkit-border-radius: .5em; \n'; xml += 'padding: 0; \n'; xml += 'margin-bottom: 1em; \n'; xml += 'box-shadow: 1px 2px 3px rgba(0, 0, 0, .25); \n'; xml += ' -o-box-shadow: 1px 2px 3px rgba(0, 0, 0, .25); \n'; xml += ' -webkit-box-shadow: 1px 2px 3px rgba(0, 0, 0, .25); \n'; xml += ' color: #000; \n'; xml += ' text-shadow: -1pt -1px 0pt rgba(255, 255, 255, .5); \n'; xml += ' padding: 0.5em; \n'; xml += ' text-decoration: none; \n'; xml += '} '; xml += 'pre { border: 1px inset rgb(170, 170, 170); \n'; xml += 'background-color: rgb(255, 255, 255);} \n'; xml += 'body { background-color: rgb(245, 245, 220);} \n'; xml += '</style> \n'; xml += '</head>\n'; xml += '<body>\n'; xml += '<section id="install"><h1> ' + btn.name + ' </h1> \n'; xml += '</section>\n'; xml += '<div class="button"><a href = "' + btn.URI + '">Установить кнопку</a></div> \n'; xml += '<section id="init"><h2>Инициализация</h2><pre>' + e4xConv_encodeHTML(btn.cbInitCode) + '</pre></section>\n'; xml += '<section id="code"><h2>Код</h2><pre>' + e4xConv_encodeHTML(btn.cbCommand) + '</pre></section> \n'; xml += '<section id="help"><h2>Справка</h2><pre>' + e4xConv_encodeHTML(btn.Help) + '</pre></section> \n'; xml += '</body> \n'; xml += '</html> '; var html = '<!DOCTYPE html>\n' + xml; var name = btn.name + ".HTML"; saveToFile(html, name); var as = Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService); as.showAlertNotification(btn.image, "Кнопка: " + btn.name, "сохранена в HTML файл", false, "", null); } function e4xConv_encodeHTML(s, isAttr) { s = String(s) .replace(/&/g, "&") .replace(/</g, "<") .replace(/>/g, ">") .replace(/"/g, """); if(isAttr) { s = s .replace(/\t/g, "	") .replace(/\n/g, "
") .replace(/\r/g, "
"); } return s; }; /////////////////////////////// Переместить кнопку /////////////////////////////// this.MoveToolbarButtons = MTB = { // Start editable preferences MoveButtonMICBContext: true, // Add "Move button" menu item to Custom Buttons context menu? MoveButtonMITBarContext: false, // Add "Move button" menu item to toolbars context menu? ShowMoveAlert: false, // Show the alert with instructions when moving buttons? MoveBtnImage: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAYklEQVQ4jWNgGJTgaAXHf2LEcGrGZQBBQ45WcPz/fZ0XpwG45FAUEDIAqzyyJLIiZIxNHqdmYvHRCo7/DLhsIEYziivQDcHnBawxgqyQUCzgjQlC6YCotEB2QkJWTIzY4AAAezv/caeCLKcAAAAASUVORK5CYII=", // End editable preferences _UID: "__cb_move_toolbar_buttons_" + custombuttons.getNumber(self.id), WindowIDs: ["main-window", "messengerWindow", "msgcomposeWindow"], ToolbarContexIDs: ["toolbar-context-menu", "aios-toolbar-contextmenu", "aios-sbhtoolbar-contextmenu"], Pref: "extensions.custombuttons.MoveToolbarButtons.Id" + custombuttons.getNumber(self.id) + ".MoveButtonID", SP: Services.prefs, Init: function() { if (!(MTB._UID in window)) { window[MTB._UID] = { Initialized: false }; } if (!window[MTB._UID]["Initialized"]) { window[MTB._UID]["Initialized"] = true; custombuttons.isPref(MTB.Pref, ""); if ("CustomizableUI" in window) { var originalFunction = custombuttons.persistCurrentSets.toString(); eval("custombuttons.persistCurrentSets=" + originalFunction .replace(", newButtonId)", ", newButtonId, aToRight)") .replace("pos + 1", "aToRight ? pos : pos + 1")); } if (MTB.MoveButtonMICBContext) { var contextPops = document.getElementsByTagName("menupopup"); let p = 0, pLen = contextPops.length; for (; p < pLen; p++) { var cPopID = contextPops[p].id; if (cPopID.substr(0, 26) === "custombuttons-contextpopup") { var cPopEl = document.getElementById(cPopID); var moveMIID = "custombuttons-contextpopup-moveButton" + cPopID.slice(26); var moveMIEl = document.getElementById(moveMIID); if (!moveMIEl) MTB.CreateMoveMI(moveMIID, cPopEl); } } } if (MTB.MoveButtonMITBarContext) { Array.prototype.slice.call(MTB.ToolbarContexIDs).forEach(function(aTBCtxID, aIndex) { let Ctx = document.getElementById(aTBCtxID); let tBarCtxMIID = MTB._UID + "moveButton" + aIndex; if (!document.getElementById(tBarCtxMIID)) { if (Ctx) { MTB.CreateMoveMI(tBarCtxMIID, Ctx); Ctx.addEventListener("popupshowing", function(aE) { document.getElementById(tBarCtxMIID).hidden = (document.popupNode.tagName !== "toolbarbutton"); }, false); } } }); } addDestructor(function(aReason) { if (aReason === "delete") { SP.resetUserPrefs(MTB.Pref); delete window[_UID]; } if (aReason === "delete" || aReason === "update") { window[MTB._UID]["Initialized"] = false; } }); } }, getPopupNode: function(aEl) { if (custombuttons.popupNode) return custombuttons.popupNode; var popupNode = aEl; while (popupNode.tagName.toLowerCase() !== "toolbarbutton") { popupNode = popupNode.parentNode; } return popupNode; }, CreateMoveMI: function(aMItemID, aPopupEl) { let moveMIEl = aPopupEl.appendChild(document.createElementNS(xulns, "menuitem")); moveMIEl.setAttribute("id", aMItemID); moveMIEl.setAttribute("label", "Переместить кнопку..."); moveMIEl.setAttribute("class", "menuitem-iconic"); moveMIEl.setAttribute("image", MTB.MoveBtnImage); moveMIEl.setAttribute("tooltip", MTB._UID + "moveButtonMI_tooltip"); moveMIEl.setAttribute("onclick", "document.getElementById(\"" + self.id + "\").MoveToolbarButtons.MoveOnClick(event);"); }, MoveOnClick: function(aE) { var popupNode = MTB.getPopupNode(aE.target); if (!popupNode) return; aE.stopPropagation(); aE.preventDefault(); if (aE.button === 0 && !aE.shiftKey && !aE.ctrlKey && !aE.altKey) { MTB.SP.setCharPref(MTB.Pref, popupNode.id); window.addEventListener('click', MTB.MoveListener, true); window.addEventListener('mouseup', MTB.DefaultPrevention, true); window.addEventListener('mousedown', MTB.DefaultPrevention, true); window.addEventListener('contextmenu', MTB.DefaultPrevention, true); MTB.HidePopup(aE.target); MTB.ShowMoveAlert && Services.prompt.alert(null, self.name, "Now click ANY toolbarbutton element inside ANY toolbar.\n" + "Left click will position the button to the left of the target.\n" + "Right click will position the button to the right of the target.\n\n" + "To cancel the movement, just click ANY element inside the browser that IS NOT a toolbarbutton.\n"); } }, MoveListener: function(aE) { MTB.DefaultPrevention(aE); window.removeEventListener('click', MTB.MoveListener, true); window.removeEventListener('mouseup', MTB.DefaultPrevention, true); window.removeEventListener('mousedown', MTB.DefaultPrevention, true); window.removeEventListener('contextmenu', MTB.DefaultPrevention, true); var anchor = aE.target; if (anchor.tagName !== "toolbarbutton") return; var toolbar = anchor.parentNode; var BtnToMove = document.getElementById(MTB.SP.getCharPref(MTB.Pref)); if (aE.button === 0 && !aE.shiftKey && !aE.ctrlKey && !aE.altKey) toolbar.insertBefore(BtnToMove, anchor); else if (aE.button === 2 && !aE.shiftKey && !aE.ctrlKey && !aE.altKey) toolbar.insertBefore(BtnToMove, anchor.nextSibling); if ("CustomizableUI" in window) custombuttons.persistCurrentSets(toolbar.id, anchor.id, BtnToMove.id || BtnToMove.getAttribute("id"), !(aE.button === 2)); else { toolbar.setAttribute("currentset", toolbar.currentSet); document.persist(toolbar.id, "currentset"); } MTB.SP.setCharPref(MTB.Pref, ""); }, DefaultPrevention: function(aE) { aE.preventDefault(); aE.stopImmediatePropagation && aE.stopImmediatePropagation(); aE.stopPropagation(); }, Tooltips: function(aRem) { var popSetID = MTB._UID + "popupset"; var popSetEl = document.getElementById(popSetID); if (popSetEl) popSetEl.parentNode.removeChild(popSetEl); if (aRem) return; if (!popSetEl) { popSetEl = document.createElementNS(xulns, "popupset"); popSetEl.setAttribute("id", popSetID); } popSetEl.appendChild(MTB.parseXML("<tooltip xmlns=\"" + xulns + "\" xmlns:html=\"" + xhtmlns + "\" id=\"" + MTB._UID + "moveButtonMI_tooltip" + "\">" + "<description><html:b>Instructions</html:b> : After clicking this menu item, you can " + "click ANY toolbarbutton element inside the application to place the currently " + "selected button to the left (with Left click) or to the right (with Right click) " + "of the targeted toolbarbutton.</description>" + "<separator/>" + "<description><html:b>Note</html:b> : It can be ANY toolbarbutton, not just " + "other Custom Buttons.</description>" + "</tooltip>")); setTimeout(function() { Array.prototype.slice.call(MTB.WindowIDs).forEach(function(aWinID) { let win = document.getElementById(aWinID); if (win) !document.getElementById(popSetID) && win.appendChild(popSetEl); }); }, 100); }, parseXML: function(aXML) { // Return parsed XML aXML = aXML.replace(/>\s+</g, "><"); // Linearize XML return (new DOMParser).parseFromString(aXML, "application/xml").documentElement; }, HidePopup: function(aEl) { try { aEl.hidePopup(); } catch (aError) { try { aEl.parentNode.hidePopup(); } catch (aError) { try { aEl.parentNode.parentNode.hidePopup(); } catch (aError) { try { aEl.parentNode.parentNode.parentNode.hidePopup(); } catch (aError) {} } } } } }; this.MoveToolbarButtons.Init();
Отсутствует
Dumby благодарю
Отсутствует
Dumby посмотри еще вот это, что то на последней лисе перестал работать, ошибка - PlacesUtils.getConcreteItemId is not a function
// Двойным левым кликом на папке закладок добавлять закладку в папку закладок addEventListener("dblclick", (e, targ = e.originalTarget)=> { if ( e.button || !targ._placesNode || !PlacesUtils.nodeIsFolder(targ._placesNode) ) return; var docTitle = gBrowser.selectedTab.label.substr(3, 50); var folderId = PlacesUtils.getConcreteItemId(targ._placesNode); var folderTitle = PlacesUtils.bookmarks.getItemTitle(folderId); var currentURI = Services.io.newURI(gBrowser.currentURI.spec, null, null); PlacesUtils.bookmarks.insertBookmark(folderId, currentURI, 0, docTitle); // всплывающая подсказка .... Components.utils.import('resource://gre/modules/PopupNotifications.jsm'); var notify = new PopupNotifications(gBrowser, document.getElementById("notification-popup"), document.getElementById("notification-popup-box")); var notification = notify.show( // browser gBrowser.selectedBrowser, // popup id "PDES-popup", // message "Добавил в папку " + folderTitle + ":", // anchor id null, // main action null, // secondary action null, // options { // Alternative way to set the popup icon popupIconURL: gBrowser.selectedTab.image || "chrome://global/skin/icons/Portrait.png" } ); setTimeout(function(){ notification.remove(); }, 2000); });
Отсутствует
getConcreteItemId
Ну какой id?
Решение постепенно отказаться от использования id в пользу guid'ов
было принято сто лет назад, и нам тоже следует придерживаться этой тенденции.
addEventListener("dblclick", async e => { if (e.button) return; var trg = e.target, node = trg._placesNode || trg._placesView?._resultNode; if (!node || !PlacesUtils.nodeIsFolder(node)) return; var parentGuid = PlacesUtils.getConcreteItemGuid(node); try { await PlacesTransactions.NewBookmark({ //index: 0, parentGuid, url: gBrowser.currentURI.spec, title: gBrowser.selectedTab.label.substr(3, 50) }).transact(); var msg = `Добавил в папку ${ PlacesUtils.bookmarks.getLocalizedTitle({guid: parentGuid, title: node.title}) }:`; var popupIconURL = gBrowser.selectedTab.image || "chrome://global/skin/icons/Portrait.png" } catch(ex) { msg = "ERROR! " + ex.message; popupIconURL = "chrome://global/skin/icons/warning.svg"; } var n = PopupNotifications.show( gBrowser.selectedBrowser, "PDES-popup", msg, null, null, null, {popupIconURL, hideClose: true} ); setTimeout(() => n.remove(), 2e3); });
Отсутствует
Dumby
Не подскажите, откуда прет здесь Firefox , как бы сменить?
data:image/jpeg;charset=utf-8;base64,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VVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A8Poor0PwtbaJ4rl1Wzbw7b6Xa29jNcjUYLid5LcouVMpdyjBiNpAVcluMV7MpWOWx55RW7o3hPV9Zt4ZrCK1ImcxQpLewwyTMMcRo7hn5IHyg88daqJoWpyWP2tLOVoftYscDBczkZEez72fw9utHMu4WZm0V0yeBfET3uoWkdikk+nKrXax3MTCAMcfOQ2Bg53ZPygEtgCq2oeFNYsH08TW0Uiag/lWs1vcxTxSvu27RIjFcgkZBORmjmj3CzMKirV/YXNhqVxp93H5d3bytBJHuB2upwRkHB5HUVvweAvEE2oXtgsFkl7ZMyzwS6jbRum1dzHDSAlQOSwyOvPBobS3BK+qOWorV1Dw/qFhZS3k6QPaRXAtWmguYpk8wpvChkYg/L3GR268VlU07gFFegeIF0bw/onhdo/Dem3s9/pq3U811Ndbi5kdeAkyqBhR2rMXw9ea1YeGoNH8P+Ve6gbkRzreBvtpRskBGP7vYARz973qFNNKT0T/AMrjtrY5Kit+HwhrM2ozWUUFu08EPnzkXkPlwIDg+bJv2RkHjDEEHjFdJ8PvBs//AAsC1stdtLRo4IWvDDNdxCOdfLZ4yrbsSISBnaSMZzwDTlNJNglc88orpZNC1rXNU1GVYNOzbbftM8Etrb2cecBR5ilYQT2APJz1OaiPg3Xf7XTTBZK15LAbqFVnjKzx7d26Jw22TjP3CScEdQafMu4jn6Kvz6RewaPbapNCI7G5keKF2dQZCv3sLncQM43YxnjOaoUwCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKu6PNZ2+pwSapatd2QOJYVkMbMpGMqw6EZyO2QM5FdX/AMINH539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
Отсутствует
откуда прет здесь Firefox , как бы сменить?
Насколько я понимаю, прёт прямо из Gecko.
Но, затем, проходит через chrome://mozapps/locale/profile/profileSelection.properties
Наверно, там и можно заменить некоторые %S на желаемое имя.
Отсутствует
Custom Buttons 0.0.7.0.0.30, paxmod и bootstrap в zip-папке.
Что-то не работает на 111. Само расширение в about:addons есть, включено, а кнопки все пропали. Тоже самое и с Add Toolbar Buttons, включено, а кнопок нет. Посмотри плиз.
Отредактировано voqabuhe (14-03-2023 00:38:39)
Отсутствует
Здравствуйте!
Есть код, который вызывает гугловскую панель для перевода страницы.
Бывает так, что надо одновременно перевести кучу страниц, но панель только появляется и требует дальнейших действий (тыкать на кнопку перевести).
Можно ли попросить добавить в этот код автоматическое нажатие на кнопку "перевести"?
var vert = ` javascript:{var d, b, o, v, p; b = (d = document).body; o = d.createElement('script'); o.setAttribute('src', 'https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit'); o.setAttribute('type', 'text/javascript'); b.appendChild(o); v = b.insertBefore(d.createElement('div'), b.firstChild); v.id = 'google_translate_element'; v.style.display = 'none'; p = d.createElement('script'); p.text = 'function googleTranslateElementInit(){new google.translate.TranslateElement({pageLanguage:""},"google_translate_element");}'; p.setAttribute('type', 'text/javascript'); b.appendChild(p)};void(0);` ; gBrowser. loadURI(vert, { triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() });
Отредактировано leex (14-03-2023 05:18:32)
Отсутствует
А сам %S где бы сменить,чтоб не париться ?
Говорю же, в бинарниках,
то есть в скомпилированной части браузера, а точнее, в firefox.exe
Можно взять хекс-редактор, и заменить первое вхождение
байтовой последовательности, которая образует слово «Firefox».
Не знаю как сделать имя длиннее. Если короче, то остаток заполнить нулями.
Но так, у меня, в недрах AppData и LocalAppData
создалась одноимённая папка, то есть, пришлось ещё править тамошний profiles.ini
Так что — сам решай, где больше «париться».
Посмотри плиз.
Посмотри на что? На Firefox 111.0?
Видел RC build2. Хорошо, распаковал уже релиз,
поставил CB 0.0.7.0.0.30 и ATB 2021.9.5 — кнопки на месте.
Более того, и на бете 112.0b1 кнопки никуда не делись.
Разве что отображение некоторых пострадало от выпила -moz-image-region
Отсутствует
Здравствуйте! Помогите, пожалуйста, не работают обе команды?
content.scrollTo(0,content.scrollMaxY/2); //вниз до середины document.body.innerText; //в консоли работает, а в СВ- нет
//3-Удалить куки с текущего сайта: (contextMenu=>{ //var menu = contextMenu.appendChild(document.createElement("menu")); var menu = contextMenu.appendChild(document.createXULElement("menu")); menu.id = "content-removeCookies." menu.setAttribute("label", "Удалить куки текущего сайта"); menu.setAttribute("class", "menu-iconic"); addEventListener("popupshowing", ()=> menu.setAttribute("image", gBrowser.mCurrentTab.image), false, contextMenu); addDestructor(()=> menu.remove() ); //var menuPopup = menu.appendChild(document.createElement("menupopup")); var menuPopup = menu.appendChild(document.createXULElement("menupopup")); //var menuitem = menuPopup.appendChild(document.createElement("menuitem")); var menuitem = menuPopup.appendChild(document.createXULElement("menuitem")); menuitem.setAttribute("label", "Удалить"); menuitem.onclick =()=> { var host = Services.eTLD.getBaseDomain(gBrowser.currentURI); for ( var en = Services.cookies.enumerator; en.hasMoreElements(); ) { var cookie = en.getNext().QueryInterface(Ci.nsICookie); ~cookie.host.indexOf(host.trim()) && Services.cookies.remove(cookie.host, cookie.name, cookie.path, false); } var reversedDomain = host.split("").reverse().join("") + "."; Cu.import("resource://gre/modules/FileUtils.jsm"); var file = FileUtils.getFile("ProfD", ["webappsstore.sqlite"]); var dbConn = Services.storage.openDatabase(file); dbConn.executeSimpleSQL("DELETE FROM webappsstore2 WHERE scope LIKE \"%" + reversedDomain +"%\""); dbConn.close(); //setTimeout(function(){content.document.location.reload()},3000); }; })(document.getElementById("contentAreaContextMenu"));
Отредактировано dedfor (22-03-2023 13:33:16)
Отсутствует
Можете подсказать, что делает 2код(последний) по ссылке https://forum.mozilla-russia.org/viewto … 43#p776143
Отредактировано b0ttle (19-03-2023 13:51:39)
Отсутствует
Можете подсказать, что делает 2код(последний) по ссылке https://forum.mozilla-russia.org/viewto … 43#p776143
Ответ в посте выше по ссылке под спойлером первая строка. Как мне кажется - чисто индивидуальная "хотелка".
Отсутствует
Garalf
При чём здесь Custom Buttons, с этим сюда -> https://forum.mozilla-russia.org/viewto … 10#p804310
Win7
Отсутствует