Dumby
Что с ней не так?
У меня не показывала адрес закладки при наведении на звездочку. ХЗ что произошло, но теперь всё работает. Сорри.
Совсем недавно Андрей спрашивал.
Спасибо.
Сколько можно одну и ту же xul-xhtml тему мусолить?
Спасибо.
Отредактировано voqabuhe (15-05-2020 14:35:26)
Отсутствует
есть такие коды для CB, прекрасно работающие на FF 52 esr
можно ли адаптировать их для user_chrome_files на последнем FF 76?
// ЕСЛИ ТЕКУЩАЯ ВКЛАДКА ПУСТАЯ, ТО ОТКРЫВАТЬ ЗАКЛАДКИ ПО СКМ В ТЕКУЩЕЙ ВКЛАДКЕ function openBookmark(e) { var type = e.type; var target = e.originalTarget; var bookMenu = target.parentNode; // стоп, если не закладка из меню закладок if ( target.localName !== "menuitem" || !target._placesNode ) return; // если левый клик открыть закладку в новой вкладке if ( type == 'click' && e.button == 1 ) { e.preventDefault(); e.stopPropagation(); var itemUri = target._placesNode.uri; // получить адрес закладки var bookmarklet = ( itemUri.substr(0, 11) == "javascript:"); if ( !gBrowser.webProgress.isLoadingDocument && ( "isBlankPageURL" in window ? isBlankPageURL(content.location.href) : content.location.href == "about:blank" ) ) { gBrowser.loadURI( itemUri ); } else { gBrowser.selectedTab = gBrowser.addTab( itemUri ); }; }; }; addEventListener("click", openBookmark, true, window );
// FindBar, листание результатов поиска колесиком мыши (FindBar, Mouse Scroll find) addEventListener("wheel", (e, findbar = gBrowser.selectedTab._findBar) => findbar && findbar.matches(":hover") && e.deltaY && findbar.onFindAgainCommand(e.deltaY < 0) , false, gBrowser);
Отредактировано Inko7 (15-05-2020 15:19:35)
Отсутствует
Inko7
try {({ init(tabpanels) { var dsp = e => this[e.type](e); addEventListener("click", dsp, true); tabpanels.addEventListener("wheel", dsp); addEventListener("unload", () => { removeEventListener("click", dsp, true); tabpanels.removeEventListener("wheel", dsp); }, {once: true}); }, click(e) { var url = e.button == 1 && e.target.nodeName == "menuitem" && e.target._placesNode?.uri; if (url) e.stopPropagation(), isBlankPageURL(gBrowser.currentURI.spec) && !gBrowser.webProgress.isLoadingDocument ? gBrowser.loadURI(url, this.p) : gBrowser.selectedTab = gBrowser.addTab(url, this.p); }, p: {triggeringPrincipal: document.nodePrincipal}, wheel(e) { var findbar = gBrowser.selectedTab._findBar; findbar?.matches(":hover") && e.deltaY && findbar.onFindAgainCommand(e.deltaY < 0); } }).init(document.getElementById("tabbrowser-tabpanels"))} catch(ex) {Cu.reportError(ex);}
Отсутствует
Dumby
пробовал помещать этот код и в custom_script.js и в custom_script_win.js - эффекта не увидел
Отредактировано Inko7 (16-05-2020 13:02:05)
Отсутствует
Dumby
Эту бы кнопку в скрипт "Нет псевосессиям"
/*Initialization Code*/ ((topic, id) => { var obs, getObserver = () => { for(var o of Services.obs.enumerateObservers(topic)) { var res = o.wrappedJSObject; if (res && id in res) return res; } } addDestructor(reason => { if (reason[5] != "e") return; var obs = getObserver(); obs && obs.destroy(); }); (obs = getObserver()) || Services.obs.addObserver(obs = { [id]: true, __proto__: null, destroyed: false, destroy() { Services.obs.removeObserver(this, topic); this.destroyed = true; }, get wins() { return Array.from(Services.wm.getEnumerator("navigator:browser")) .filter(win => win.toolbar.visible); }, observe(cancelQuit, t, data) { data != "restart" && !cancelQuit.data && this.onQuit(true); }, handleEvent() { this.destroyed || this.onQuit(); }, onQuit(fromObs) { var {wins} = this, multi = wins.length > 1; if (multi) return fromObs && this.destroy(); this.destroy(); var {tabs} = wins[0].gBrowser; if (tabs.length > 1 ) return; var es = JSON.parse(SessionStore.getTabState(tabs[0])).entries; es.length == 1 && wins[0].isBlankPageURL(es[0].url) && this.erase(); }, erase() { Services.obs.notifyObservers(null, "browser:purge-session-history"); Cu.import("resource:///modules/sessionstore/SessionFile.jsm", {}) .SessionFileInternal.write = () => {}; } }, topic, false); addEventListener("DOMWindowClose", obs); })("quit-application-requested", `${_id}:quitApplicationRequestedObserver1`);
Отсутствует
Dumby.
Вы когда-то по моей просьбе написали вот такой код:
// Убрать замыливание последних букв и вернуть многоточие в названии вкладок. // https://forum.mozilla-russia.org/viewtopic.php?pid=749234#p749234 ((func, destroy) => { [...gBrowser.tabs].forEach(func); addEventListener("TabOpen", func, false, gBrowser.tabContainer); addEventListener("TabAttrModified", func, false, gBrowser.tabContainer); addDestructor(() => [...gBrowser.tabs].forEach(destroy)); })(e => { var tab = e.target || e; var lab = document.getAnonymousElementByAttribute(tab, "class", "tab-text tab-label"); if (!lab.hasAttribute("crop")) { lab.setAttribute("crop", "end"); lab.setAttribute("flex", "1"); } else if (lab.value == tab.label) return; lab.setAttribute("value", tab.label); }, tab => { var lab = document.getAnonymousElementByAttribute(tab, "class", "tab-text tab-label"); for(var attr of ["crop", "flex", "value"]) lab.removeAttribute(attr); });
«The Truth Is Out There»
Отсутствует
при нажатии СКМ по папкам в меню закладок или на панели закладок
==> код позволяет
И как же такое может быть, ведь это будет <menu> или <toolbarbutton>,
а в коде написано
if ( target.localName !== "menuitem" || !target._placesNode ) return;
Эту бы кнопку в скрипт
try {Services.obs.addObserver(function qar(cancelQuit, topic, data) { if (cancelQuit.data) return; Services.obs.removeObserver(qar, topic); if (data == "restart") return; var wins = Array.from(Services.wm.getEnumerator("navigator:browser")).filter( win => win.toolbar.visible && !win.PrivateBrowsingUtils.isWindowPrivate(win) ); if (wins.length > 1) return; var [win] = wins, {tabs} = win.gBrowser; if (tabs.length > 1 ) return; var es = JSON.parse(win.SessionStore.getTabState(tabs[0])).entries; if (es.length == 1 && win.isBlankPageURL(es[0].url)) Services.obs.notifyObservers(null, "browser:purge-session-history"), Cu.import("resource:///modules/sessionstore/SessionFile.jsm", {}) .SessionFileInternal.write = () => {}; }, "quit-application-requested", false);} catch(ex) {Cu.reportError(ex);}
В ночном похоже отвалился CB?
Было дело. Bug 1558635
Возможно ли его переделать под последнюю версию ?
Ну, <label> вкладки нынче предлагается получать так: var lab = tab.textLabel;
соответственно, можно попробовать заменить в коде (в двух местах).
Отсутствует
Ну, <label> вкладки нынче предлагается получать так: var lab = tab.textLabel;
соответственно, можно попробовать заменить в коде (в двух местах).
Спасибо, все получилось.
Есть ещё просьба по одной из ваших кнопок.
((main, parts) => this._handleClick = () => { var df = MozXULElement.parseXULToFragment(` <menupopup> <menuitem class="menuitem-iconic" image="data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAiAcFBa4KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwsJCaECAQE/BQMDAAAAAJUgICD4V1ZW/2FhYf5hYWH/YmFh/2BgYP9fX1//X19f/19fX/9gYGD/YmFh/2FhYf9gYGD+ZmVl/1RSUuIVFBQtCgkJy1paWv+Li4v9h4eH/oiIiP6FhYX+i4uL/pKSkv6Sk5P+kpKS/ouLi/6FhYX+iIiI/oiIiP6Hh4f7lZaW/25tbYQNDQ3OcHBw/5KSkv6Li4v/i4uL/5mZmf+EhIT/ZGRk/1tbWv9kZGT/hISE/5mZmf+Li4v/jY2N/4yMjPyWl5f/iomJjQ4NDc13d3f/m5ub/pWVlf+goKD/XFxc/ygoKP8fHyD/GBsb/yAhIv8pKSn/W1tb/6CgoP+Wlpb/lpaW/J6env+Jh4eMDg4OzX1+fv+ioqL+qqqq/1hYWP8ZGRn/Ghwb/x4dHP8mIh//FhQR/xUWF/8aGhr/WFhY/6urq/+cnJz8pKSk/4qJiYwPDg7Ng4OD/7W1tf6MjIz/Ghoa/xYYGP8uKCb/ZEAo/5xyOP++saL/RD45/xISE/8bGxv/jY2N/6+vr/ypqan/ioiIjA8PD82IiIj/xMTE/l1cXP8LDAz/JiId/1o3LP9ADgD/mGog//Dt6P/VysX/Ih4Z/wsMDf9eXl7/v7+//K6urv+KiYmMEA8PzY+Pj//Kysr+SEhH/wEDBv9MPi7/hlES/3dCAP+VZAn/tJVO/7eVXf9OQTL/AAIE/0pJSf/FxcX8tLS0/4qJiYwQEBDNm5ub/9/e3/5SUlL/AAAA/0M7Mf/aya7/ybiO/5RmEf9aIAD/cjkX/z80KP8AAAD/U1JS/9nZ2fzAwMD/i4qKjBEREc2oqKn/8O/w/oeGhv8AAAD/DAsK/6qkof/17uj/nW8l/14eCf9hPTr/ExUU/wAAAP+Hh4f/6urq/MzMzf+Mi4uMERERzbCwsv/r6uz+3Nzd/yoqKv8AAAD/ExEP/2heU/9yWjv/UD0u/xcXFv8AAAD/Kioq/93d3v/l5eb81NTV/4yLi4wSERHNuLm5/+/v8P7z8/P/xsbG/yAgIP8AAAD/AQEB/wAAAP8BAQH/AAAA/yAgIP/Gxsb/9PT0/+np6vzb29v/jIuLjBIREc2+vb7/+Pj5/uvr7P/7+/v/4ODg/3Nyc/8uLi7/Hh4d/y0sLP9zc3P/4ODg//v7+//s7O3/8/P0/OHg4f+Mi4uLFBMTyMPDw//////7+Pj4/ff29v38/Pz9/////fr6+v3u7u79+vr6/f////38/Pz99/b2/fn5+f37+/v53t7e/5KSko4GBgZ7m5yc//j4+P/w8fH/8fLy//Dw8P/u7u7/8vLy//X19f/y8vL/7u7u//Dw8P/x8vL/8vLy/uXl5f/BwcH+k5GRUAAAAAQeHR1yb25uxn59fcZ9fHzGfXx8xn18fMZ9e3vGfHt7xn17e8Z9fHzGfXx8xn18fMZ9fHzGgH9/xYmIiGVaV1cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" label="Сохранить всю страницу как PNG" value="all"/> <menuitem class="menuitem-iconic" image="data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAiAcFBa4KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwsJCaECAQE/BQMDAAAAAJUgICD4V1ZW/2FhYf5hYWH/YmFh/2BgYP9fX1//X19f/19fX/9gYGD/YmFh/2FhYf9gYGD+ZmVl/1RSUuIVFBQtCgkJy1paWv+Li4v9h4eH/oiIiP6FhYX+i4uL/pKSkv6Sk5P+kpKS/ouLi/6FhYX+iIiI/oiIiP6Hh4f7lZaW/25tbYQNDQ3OcHBw/5KSkv6Li4v/i4uL/5mZmf+EhIT/ZGRk/1tbWv9kZGT/hISE/5mZmf+Li4v/jY2N/4yMjPyWl5f/iomJjQ4NDc13d3f/m5ub/pWVlf+goKD/XFxc/ygoKP8fHyD/GBsb/yAhIv8pKSn/W1tb/6CgoP+Wlpb/lpaW/J6env+Jh4eMDg4OzX1+fv+ioqL+qqqq/1hYWP8ZGRn/Ghwb/x4dHP8mIh//FhQR/xUWF/8aGhr/WFhY/6urq/+cnJz8pKSk/4qJiYwPDg7Ng4OD/7W1tf6MjIz/Ghoa/xYYGP8uKCb/ZEAo/5xyOP++saL/RD45/xISE/8bGxv/jY2N/6+vr/ypqan/ioiIjA8PD82IiIj/xMTE/l1cXP8LDAz/JiId/1o3LP9ADgD/mGog//Dt6P/VysX/Ih4Z/wsMDf9eXl7/v7+//K6urv+KiYmMEA8PzY+Pj//Kysr+SEhH/wEDBv9MPi7/hlES/3dCAP+VZAn/tJVO/7eVXf9OQTL/AAIE/0pJSf/FxcX8tLS0/4qJiYwQEBDNm5ub/9/e3/5SUlL/AAAA/0M7Mf/aya7/ybiO/5RmEf9aIAD/cjkX/z80KP8AAAD/U1JS/9nZ2fzAwMD/i4qKjBEREc2oqKn/8O/w/oeGhv8AAAD/DAsK/6qkof/17uj/nW8l/14eCf9hPTr/ExUU/wAAAP+Hh4f/6urq/MzMzf+Mi4uMERERzbCwsv/r6uz+3Nzd/yoqKv8AAAD/ExEP/2heU/9yWjv/UD0u/xcXFv8AAAD/Kioq/93d3v/l5eb81NTV/4yLi4wSERHNuLm5/+/v8P7z8/P/xsbG/yAgIP8AAAD/AQEB/wAAAP8BAQH/AAAA/yAgIP/Gxsb/9PT0/+np6vzb29v/jIuLjBIREc2+vb7/+Pj5/uvr7P/7+/v/4ODg/3Nyc/8uLi7/Hh4d/y0sLP9zc3P/4ODg//v7+//s7O3/8/P0/OHg4f+Mi4uLFBMTyMPDw//////7+Pj4/ff29v38/Pz9/////fr6+v3u7u79+vr6/f////38/Pz99/b2/fn5+f37+/v53t7e/5KSko4GBgZ7m5yc//j4+P/w8fH/8fLy//Dw8P/u7u7/8vLy//X19f/y8vL/7u7u//Dw8P/x8vL/8vLy/uXl5f/BwcH+k5GRUAAAAAQeHR1yb25uxn59fcZ9fHzGfXx8xn18fMZ9e3vGfHt7xn17e8Z9fHzGfXx8xn18fMZ9fHzGgH9/xYmIiGVaV1cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" label="Сохранить видимую часть страницы как PNG" value="page"/> <menuitem class="menuitem-iconic" image="data:image/x-icon;base64,AAABAAEAIBkAAAEAIAAMDQAAFgAAACgAAAAgAAAAMgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29fT/2tra/8jIyP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8jIyP/a2tr/9vX0/+zs7P/ak0b/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/9qTRv/s7Oz/7Ozs/+J9Dv/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+/6SdmP/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r/+vn4//z7+v/6+fj/4n0O/+zs7P/s7Oz/4n0O//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r/aFtT//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//j39v/ifQ7/7Ozs/+zs7P/ifQ7/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P9oW1P/7+zq/+/s6v/v7Or/8O3r//Dt6//w7ev/8O3r//Dt6//w7ev/8O3r/+/s6v/w7ev/9fTy/+J9Dv/s7Oz/7Ozs/+J9Dv/49/b/+Pf2//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4/2hbU//q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/y8O//4n0O/+zs7P/s7Oz/4n0O//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/aFtT/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe//Dt6//ifQ7/7Ozs/+zs7P/ifQ7/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P9oW1P/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/7uro/+J9Dv/s7Oz/7Ozs/+J9Dv/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx/2hbU//x7+3/8vDv//Hv7f/x7+3/8e/t//Lw7//x7+3/8e/t//Lw7//x7+3/8vDv//Hv7f/29fT/4n0O/+zs7P/s7Oz/4n0O//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//aFtT/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/8vGwf/ifQ7/7Ozs/+zs7P/ifQ7/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f9nWlL/aFtT/2hbU/9nWlL/Z1pS/2hbU/9oW1P/Z1pS/2daUv9oW1P/aFtT/2hbU/9nWlL/pJyX/+J9Dv/s7Oz/7Ozs/+J9Dv/w7ev/8O3r//Dt6//w7ev/8O3r//Dt6//x7+3/8O3r//Dt6//w7ev/8e/t//Dt6//w7ev/8O3r//Hv7f/w7ev/8O3r//Dt6//x7+3/8O3r//Dt6//w7ev/8e/t//Dt6//w7ev/8O3r//Dt6//w7ev/4n0O/+zs7P/s7Oz/4n0O/+/s6v/v7Or/7uro/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/u6uj/7+zq/+/s6v/ifQ7/7Ozs/+zs7P/ifQ7/7uro/+7q6P/u6uj/7uro/+zo5v/u6uj/7uro/+7q6P/s6Ob/7uro/+7q6P/u6uj/7Ojm/+7q6P/u6uj/7uro/+zo5v/u6uj/7uro/+7q6P/s6Ob/7uro/+7q6P/u6uj/7Ojm/+7q6P/u6uj/7Ojm/+J9Dv/s7Oz/7Ozs/+J9Dv/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/4n0O/+zs7P/s7Oz/4n0O/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/ifQ7/7Ozs/+zs7P/ifQ7/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+J9Dv/s7Oz/7Ozs/+J9Dv/m4d7/5uHe/+bh3v/p5eL/5uHe/+bh3v/m4d7/6eXi/+bh3v/m4d7/5uHe/+nl4v/m4d7/5uHe/+bh3v/p5eL/5uHe/+bh3v/m4d7/6eXi/+bh3v/m4d7/5uHe/+nl4v/m4d7/5uHe/+bh3v/p5eL/4n0O/+zs7P/s7Oz/4n0O/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/ifQ7/7Ozs/+zs7P/ifQ7/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+J9Dv/s7Oz/7Ozs/+J9Dv/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/k39z/4n0O/+zs7P/s7Oz/4n0O/+Lc2f/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/ifQ7/7Ozs/+zs7P/ifQ7/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+J9Dv/s7Oz/9fTy/+J9Dv/8+/r/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/4n0O//X08v/8+/r/6KFU/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ooVT//Pv6/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" label="Сохранить выбранный элемент страницы как PNG" value="click"/> <menuitem class="menuitem-iconic" image="data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAADDn2Hfz5pE/8eVQP7IlkH/yJZB/8iWQf/IlUH/yJVA/8iVQP/IlED/yJQ//8iUP//IlD//yJM+/8iTPv/Hkj3/nI1w//bDbP//8OH//+zW///s1///69b//+rV///p1P//59L//+XQ///izf//38n//9vG///ZxP//1b///dG////Prf/KlkX/88N4/v37///99Pj//fT6//vy9v/68fT/+u/y//rt8P/66u3/+ufq//rl6P/64eT/+93h//3a3//71d7//9LK/86XR//0xHb//vv////18///9fT///f5///4////9f7///P8///v+f//7Pb//+nz///m8f//4eb//9vZ//3Y2v//1Mb/zphH//TGd//+/////Pj1///7///Q58r/m9aV/6TZnv+i15r/otWY/6LTlv+j0pb/mc6M/9DXuf//3+P//Nnc///Wyf/OmUf/9MZ3//7////8+/j//////53WnP+Y5pn/rvGv/6PvpP+e7p//me6b/5nvm/95533/mM+L///j7f/629z//9jL/86ZR//0xnf//v////z9+v//////qtup/8Xzxf/a/tn/z/vO/8n7yf/D+sL/xPvD/6Hzo/+j05b//+Tu//re3///2cz/zplI//XGeP/+/////P36//////+n26f/uvC6/9T71P/K+Mr/xvjG/8D3wP+/+L//nfCf/6LTlf//5u//+t/g///cz//OmUj/9MZ3//7////8/fr//////6rcqv/G9MX/3//f/9n92f/V/NX/0PzQ/9H+0P+s9a7/pdSY///o8f/64OL//9zP/86aSP/0xnf//v////z9+f//////ndid/5TjlP+v7q//qeyp/6jsqf+k7KX/p+6n/4Tlh/+Z0Y7//+r0//rh4v//3tH/zppI//TGd//+/////v77///////Y8Nj/p9+n/6/jr/+t4a3/rd2p/67bpv+u2ab/p9Wc/9jgx///6Oz//OPl///e0f/Omkj/9MV1//7//////fr///78///+/f///////////////////P////j////0+///8fn//+vu///m4v/94+P//97P/86ZSP/zx3v//v/////+/f///////f////v////7////+/////v+///7+///+/f///vz/P/98Pr//+33//3p9///5OL/zppL//a1Sv/0xoL/9cR7//XEfP/1xHz/9cR8//XEfP/1xH3/9cR8//XCev/1wXr/9b94//W9d//1u3X/87l0//y6bP/Llj7/+pMA/vWBAP/1gwD/9YMA//WDAP/1gwD/9YMA//WDAP/1gwD/9YQA//WEAP/1hAD/9YQA//WEAP/zhAH//okA/8qLIv3xpzP/4ptV/+OdU//jnVP/451T/+OdU//jnVP/451T/+OdU//jnVL/451S/+OdUv/jnVL/451S/+GdVf/qnUf/2aRJ/9q0c9/8yn7/98V5/vjGev/4xnr/+MZ6//jGev/4xnr/+MZ6//jGev/4xnr/+MZ6//jGev/4xnr/+MZ6/vrIe/+jj2y4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" label="Сохранить выбранную область страницы как PNG" value="clipping"/> </menupopup> `); var popup = df.firstChild; popup.setAttribute("context", ""); popup.setAttribute("oncommand", "handleCommand(event);"); popup.handleCommand = e => { var name = _id + ":DataURLReady"; main = main.replace("%MESSAGE_NAME%", name); var urls = {}, configurable = true, enumerable = true; Object.entries(parts).forEach(([key, part]) => Object.defineProperty(urls, key, { configurable, enumerable, get() { var value = `data:;charset=utf-8,({${ encodeURIComponent(main + part) }%0A}).init("${key}")`; Object.defineProperty(urls, key, {configurable, enumerable, value}); return value; }})); var getTabLabel = () => { var label = gBrowser.selectedTab.label; var label = label.replace(/[:+.\\\/<>?*|"]+/g, " ").replace(/\s\s+/g, " "); return label.substring(0, 50); } var listener = msg => { var fp = makeFilePicker(); fp.init(window, "Сохранить как…", fp.modeSave); fp.appendFilter("", "*.png"); fp.defaultString = getTabLabel() + ".png"; fp.open(res => res == fp.returnCancel || !fp.file || makeWebBrowserPersist().saveURI( Services.io.newURI(msg.data), document.nodePrincipal, null, null, null, null, null, fp.file, null )); } messageManager.addMessageListener(name, listener); addDestructor(() => messageManager.removeMessageListener(name, listener)); (popup.handleCommand = e => gBrowser.selectedBrowser.messageManager .loadFrameScript(urls[e.target.value], false) )(e); } this.append(df); (this._handleClick = () => popup.openPopup(this, "after_start"))(); })(` init(cmd) { cmd.startsWith("c") ? this[cmd].init(this[cmd].parent = this) : this[cmd](); }, capture(win, x, y, width, height) { var canvas = win.document.createElementNS("${xhtmlns}", "canvas"); canvas.width = width; canvas.height = height; var ctx = canvas.getContext("2d"); var tryDraw = ind => { try {ctx.drawWindow(win, x, y, canvas.width, canvas.height, "white")} catch(ex) {canvas.height = ind * canvas.width; tryDraw(--ind);} } tryDraw(17); sendAsyncMessage("%MESSAGE_NAME%", canvas.toDataURL("image/png")); }, `, { all: `all() { var win = content; this.capture(win, 0, 0, win.innerWidth + win.scrollMaxX, win.innerHeight + win.scrollMaxY); }`, page: `page() { var win = content, doc = win.document, body = doc.body, html = doc.documentElement; var scrX = (body.scrollLeft || html.scrollLeft) - html.clientLeft; var scrY = (body.scrollTop || html.scrollTop) - html.clientTop; this.capture(win, scrX, scrY, win.innerWidth, win.innerHeight); }`, clipping: `clipping: { handleEvent(e) { if (e.button) return false; e.preventDefault(); e.stopPropagation(); switch(e.type) { case "mousedown": this.downX = e.pageX; this.downY = e.pageY; this.bs.left = this.downX + "px"; this.bs.top = this.downY + "px"; this.body.appendChild(this.box); this.flag = true; break; case "mousemove": if (!this.flag) return; this.moveX = e.pageX; this.moveY = e.pageY; if (this.downX > this.moveX) this.bs.left = this.moveX + "px"; if (this.downY > this.moveY) this.bs.top = this.moveY + "px"; this.bs.width = Math.abs(this.moveX - this.downX) + "px"; this.bs.height = Math.abs(this.moveY - this.downY) + "px"; break; case "mouseup": this.uninit(); break; } }, init() { var win = {}; Cc["@mozilla.org/focus-manager;1"].getService(Ci.nsIFocusManager) .getFocusedElementForWindow(content, true, win); this.win = win.value; this.doc = this.win.document; this.body = this.doc.body; if (!HTMLBodyElement.isInstance(this.body)) { Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService) .showAlertNotification("${self.image}", ${JSON.stringify(self.label)}, "Не удается захватить!"); return false; } this.flag = null; this.box = this.doc.createElement("div"); this.bs = this.box.style; this.bs.border = "#0f0 dashed 2px"; this.bs.position = "absolute"; this.bs.zIndex = "2147483647"; this.defaultCursor = this.win.getComputedStyle(this.body, "").cursor; this.body.style.cursor = "crosshair"; ["click", "mouseup", "mousemove", "mousedown"].forEach(type=> this.doc.addEventListener(type, this, true)); }, uninit() { var pos = [this.win, parseInt(this.bs.left), parseInt(this.bs.top), parseInt(this.bs.width), parseInt(this.bs.height)]; this.body.style.cursor = this.defaultCursor; this.body.removeChild(this.box); this.parent.capture.apply(this, pos); ["click", "mouseup", "mousemove", "mousedown"].forEach(type=> this.doc.removeEventListener(type, this, true)); } }`, click: `click: { getPosition() { var html = this.doc.documentElement; var body = this.doc.body; var rect = this.target.getBoundingClientRect(); return [ this.win, Math.round(rect.left) + (body.scrollLeft || html.scrollLeft) - html.clientLeft, Math.round(rect.top) + (body.scrollTop || html.scrollTop) - html.clientTop, parseInt(rect.width), parseInt(rect.height) ]; }, highlight() { this.orgStyle = this.target.hasAttribute("style") ? this.target.style.cssText : false; this.target.style.cssText += "outline: red 2px solid; outline-offset: 2px; -moz-outline-radius: 2px;"; }, lowlight() { if (this.orgStyle) this.target.style.cssText = this.orgStyle; else this.target.removeAttribute("style"); }, handleEvent(e) { switch(e.type){ case "click": if (e.button) return; e.preventDefault(); e.stopPropagation(); this.lowlight(); this.parent.capture.apply(this, this.getPosition()); this.uninit(); break; case "mouseover": if (this.target) this.lowlight(); this.target = e.target; this.highlight(); break; } }, init() { this.win = content; this.doc = content.document; ["click", "mouseover"].forEach(type=> this.doc.addEventListener(type, this, true)); }, uninit() { this.target = false; ["click", "mouseover"].forEach(type=> this.doc.removeEventListener(type, this, true)); } }` });
NS_ERROR_ILLEGAL_VALUE: Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIWebBrowserPersist.saveURI]
Можно как-то поправить?
Отредактировано unter_officer (20-05-2020 14:41:06)
«The Truth Is Out There»
Отсутствует
Есть ещё просьба по одной из ваших кнопок.
Не, код не мой, с меня только e10s-оболочка, какая-то.
А перестановки аргументов в nsIWebBrowserPersist.saveURI() обсуждались не раз.
Если нужно, например, под текущий релиз — принцип прост:
открываем релизную idl'ку, смотрим какие аргументы принимает метод saveURI(),
и пытаемся подогнать. Попробуй сам. Если не получится, или просто затем свериться
̣ fp.open(res => res == fp.returnCancel || !fp.file || makeWebBrowserPersist().saveURI( Services.io.newURI(msg.data), document.nodePrincipal, //null, null, null, null, null, fp.file, null null, null, null, null, fp.file, null, null ));
Отсутствует
Dumby, спасибо большое.
Не подскажите ещё вот с этим.
// Открыть новую вкладку двойным кликом по панели вкладок addEventListener("dblclick", e => { if ( e.button || e.ctrlKey || e.shiftKey || e.altKey ) return; try { BrowserOpenTab(); } catch(e) { }; }, false, document.getElementById("TabsToolbar"));
Суть в том, что на крайней версии новая вкладка почему-то открывается не только при двойным кликом по панели вкладок, но и при двойном клике по самим табам. Можно это как-то подправить?
Отредактировано unter_officer (20-05-2020 23:40:32)
«The Truth Is Out There»
Отсутствует
новая вкладка почему-то открывается не только при двойным кликом по панели вкладок, но и при двойном клике по самим табам
Ну да, сами табы же на панели вкладок.
Можно, например, какой-нибудь проверочный селектор
подобрать, чтоб подходил под задачу. Что-то типа
(sel => addEventListener("dblclick", e => !(e.button || e.ctrlKey || e.shiftKey || e.altKey) && e.target.matches(sel) && BrowserOpenTab() , false, document.getElementById("TabsToolbar") || 1))( "#tabbrowser-arrowscrollbox,toolbarspring,#TabsToolbar" );
Отсутствует
И как же такое может быть, ведь это будет <menu> или <toolbarbutton>,
а в коде написано
if ( target.localName !== "menuitem" || !target._placesNode ) return;
не совсем понял про что конкретно речь...
код вроде давно-давно писал bunda1 и он работает до сих пор у меня на FF52esr, лежит в какой-то кнопке в инициализации
может для FF76 его нужно вначале адаптировать?
мне главнее получить работоспособность второго кода - "прокручивать найденные результаты на странице колесиком мышки"
Отсутствует
Ну да, сами табы же на панели вкладок.
Можно, например, какой-нибудь проверочный селектор
подобрать, чтоб подходил под задачу. Что-то типаскрытый текстВыделить кодКод:
(sel => addEventListener("dblclick", e => !(e.button || e.ctrlKey || e.shiftKey || e.altKey) && e.target.matches(sel) && BrowserOpenTab() , false, document.getElementById("TabsToolbar") || 1))( "#tabbrowser-arrowscrollbox,toolbarspring,#TabsToolbar" );
Dumby, большое спасибо за помощь.
«The Truth Is Out There»
Отсутствует
может для FF76 его нужно вначале адаптировать?
мне главнее получить работоспособность второго кода - "прокручивать найденные результаты на странице колесиком мышки"
А речь о чём? Если о FindBar, то его Dumby уже адаптировал.
Отредактировано voqabuhe (21-05-2020 21:48:35)
Отсутствует
А речь о чём?
вопрос был про адаптацию кодов для user_chrome_files
пост с запросом
Отсутствует
Dumby. Возможно ли подправить вот эту кнопочку под крайнюю версию ?
// "Автоматически перезагружать" в контекстном меню вкладки, от 19.11.2015. ................. ((tabContextMenu, tabs, attr) => { const reloadInterval = 60000; // интервал перезагрузки, 60 sek = 60000 ms const throbber = [".tab-progress-box", ".tab-progress"]; // индикаторы загрузки скрываемые при автоперегрузке const reloadButtonStyle = "pointer-events: auto !important; -moz-appearance: none !important; -moz-box-ordinal-group: 0 !important; margin-left: -1px !important; margin-right: -1px !important; padding: 0 !important; border: none !important;"; const reloadButtonIcon = "data:image/x-icon;base64,AAABAAEADAwAAAEAIACYAgAAFgAAACgAAAAMAAAAGAAAAAEAIAAAAAAAcAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgIAAQECAAAAAAAAAAAAAAAAAAAAAAABAQIAAQICAAAAAAAAAAAAAAAAAAEBAQAAAAAEBggGDydSUhM6g40SOYONCyNRUgEDCAYAAAAAAAEBAQAAAAAAAQICAAAAAA4XIR4nXLvNJGnx/yNq9/0jaff9I2jx/x1Suc0FDh4eAAAAAAABAQIAAAAACAoGBDNluMopaOn/LWnf/jJnw90zacTdLmvf/Stq6v8jU7PJAQIEAwAAAAAAAAAAJDpVVTV27f8ta+H/Jkh9hAgJBAEGCAQAK09+gzJw4/8vb+v/ESdPVAAAAAAAAAAANFmJjDR7/P8tZcncBQcKCAAAAAAAAAAACQwLBzhyzNwyefv/HUKFjAAAAAAAAAAAOV+LjDyI//8wbc3bAgUJBgEBAAAAAAABCAsKBjx5z9s6hf//IkqIjAAAAAAAAAAAMEhcVk6c//8+ivH/J1GHigMEBAIBAAAALlV/f0SP8/9Flf//HDhZVgAAAAAAAAAACgoIBVqXzcpPqP//QHq5wBYgJR0/d7C0TJ/8/06j//9GiMzNBAYIBQAAAAABAQICAAAAABggIx5mqt/iOWiNiyAvNjBpv///Xbj//1KWz9ESHSUhAAAAAAEBAgIAAAAAAQEBAQAAAAAJCwoHOllqZRYgJR0mO0VANVVnZAcJCAYAAAAAAQEBAQAAAAAAAAAAAAAAAAECAgIBAQECAAAAAAEBAgEAAAEBAAAAAAABAQIBAQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; // Создать новый пункт контекстного меню вкладки .... const menuitem = document.createElement("menuitem"); menuitem.setAttribute("type", "checkbox"); menuitem.setAttribute("label", "Автоматически перезагружать"); menuitem.onclick =()=> toggleAutoReload(document.popupNode); tabContextMenu.insertBefore(menuitem, document.getElementById("context_bookmarkAllTabs")); // над каким пунктом меню показывать // Устанавливаем где показывать пункт меню и чекбокс у пункта .... addEventListener("popupshowing", (e)=> { var tab = e.target.triggerNode; menuitem.hidden = !tab.linkedBrowser.currentURI.scheme.startsWith("http") menuitem.setAttribute("checked", tab.hasAttribute(attr)); }, false, tabContextMenu); // Добавлять или удалять кнопку и атрибут перегрузки на вкладку, добавлять обработчик на кнопку .... function toggleIconAndAttribute(tab) { var hbox = document.getAnonymousElementByAttribute(tab, "class", "tab-content"); if ( tab.hasAttribute(attr) ) { // удалить кнопку и атрибут hbox.removeChild(tab.querySelector("#tabReloadButton")); tab.removeAttribute(attr); return; } var reloadButton = document.createElement("toolbarbutton"); // создать кнопку reloadButton.setAttribute('image', reloadButtonIcon); reloadButton.setAttribute('style', reloadButtonStyle); reloadButton.setAttribute('id', 'tabReloadButton'); hbox.appendChild(reloadButton); tab.setAttribute(attr, 'true'); // добавить атрибут и обработчик reloadButton.onclick =()=> toggleAutoReload(tab); }; // Восстановить авто перегрузку табов и иконку после старта браузера и после перемещения вкладки .... function restoreAutoReload(e) { var tab = e.target; if ( !tab.hasAttribute(attr) || tab.querySelector("#tabReloadButton") ) return; tab.removeAttribute(attr); toggleAutoReload(tab); }; addEventListener('TabMove', restoreAutoReload, false, tabs); addEventListener('SSTabRestored', restoreAutoReload, false, tabs); // Стиль удаляет разные индикаторы загрузки вкладки при автоперегрузке .... throbber.forEach((m,i)=> throbber[i] = '.tabbrowser-tab[autoReload]:not([busy]) ' + m); var str = throbber + '{-moz-appearance: none !important; display: none !important;}'; const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); var uri = makeURI("data:text/css," + encodeURIComponent(str)); sss.loadAndRegisterSheet(uri, 0); // Переключать авто перегрузку таба .... function toggleAutoReload(tab) { clearInterval(tab.interval), toggleIconAndAttribute(tab); if ( !tab.hasAttribute(attr) ) return; tab.interval = setInterval(()=> { if (tab.collapsed || !menuitem.parentNode) clearInterval(tab.interval); gBrowser.reloadTab(tab); tab.removeAttribute("busy"); }, reloadInterval ); }; // Удалить изменения при удаления кода .... addDestructor(()=> { menuitem.remove(); sss.unregisterSheet(uri, 0); try{ document.querySelector("#tabReloadButton").remove() } catch(e){} }); })(document.getElementById("tabContextMenu"), gBrowser.tabContainer, "autoReload");
«The Truth Is Out There»
Отсутствует
katana
проверьте вот этот код для user-chrome-files кто-нибудь у себя? правда, я так и не разобрался в какой именно файл его поместить...
проверил еще раз после обновления user_chrome_files и частично код ЗАРАБОТАЛ! - прокрутка результатов поиска на странице листается колесом мыши
(код помещал в конец custom_script_win.js)
Отредактировано Inko7 (23-05-2020 09:56:49)
Отсутствует
Dumby
Что необходимо добавить (изменить) в этом скрипте:
Отредактировано kokoss (25-05-2020 02:11:43)
Win7
Отсутствует
Dumby. Возможно ли подправить вот эту кнопочку под крайнюю версию ?
Что-то не соображу как сделать, чтобы favicon таба
не дёргался, если есть, но был скрыт, если нет.
({ interval: 6e4, id: "cb-auto-reload", init(popup) { this.tabs(this.initTab, true) && this.addStyle(); addDestructor(this.destroy, this); var dsp = e => this[e.type](e); for(var type of ["popupshowing", "TabClose", "SSTabRestored"]) addEventListener(type, dsp, false, ( type[0] == "p" ? this.popup = popup : gBrowser.tabContainer ) || 1); }, destroy(reason) { this.tabs(this.destroyTab, reason != "delete"); this.menuitem?.remove(); }, tabs(callback, arg) { var res; for(var tab of gBrowser.tabs) { var has = SessionStore.getCustomTabValue(tab, this.id); has && callback.call(this, tab, arg, res = true); } return res; }, initTab(tab, arg) { arg || SessionStore.setCustomTabValue(tab, this.id, "1"); var img = document.createXULElement("hbox"); img.className = this.id; img.setAttribute("onclick", 'linkedObject.destroyTab(this.closest("tab"))'); img.linkedObject = this; tab.throbber.before(img); tab.setAttribute(this.id, setInterval(this.reload, this.interval, tab)); }, destroyTab(tab, arg) { clearInterval(tab.getAttribute(this.id)); arg || SessionStore.deleteCustomTabValue(tab, this.id); tab.removeAttribute(this.id); tab.querySelector("." + this.id).remove(); }, addStyle() { this.addStyle = () => {}; var css = ` tab.tabbrowser-tab:not([pinned]) .${this.id} { width: 16px; height: 16px; margin-left: -5px; background-position: center; background-repeat: no-repeat; background-image: url("data:image/x-icon;base64,AAABAAEADAwAAAEAIACYAgAAFgAAACgAAAAMAAAAGAAAAAEAIAAAAAAAcAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgIAAQECAAAAAAAAAAAAAAAAAAAAAAABAQIAAQICAAAAAAAAAAAAAAAAAAEBAQAAAAAEBggGDydSUhM6g40SOYONCyNRUgEDCAYAAAAAAAEBAQAAAAAAAQICAAAAAA4XIR4nXLvNJGnx/yNq9/0jaff9I2jx/x1Suc0FDh4eAAAAAAABAQIAAAAACAoGBDNluMopaOn/LWnf/jJnw90zacTdLmvf/Stq6v8jU7PJAQIEAwAAAAAAAAAAJDpVVTV27f8ta+H/Jkh9hAgJBAEGCAQAK09+gzJw4/8vb+v/ESdPVAAAAAAAAAAANFmJjDR7/P8tZcncBQcKCAAAAAAAAAAACQwLBzhyzNwyefv/HUKFjAAAAAAAAAAAOV+LjDyI//8wbc3bAgUJBgEBAAAAAAABCAsKBjx5z9s6hf//IkqIjAAAAAAAAAAAMEhcVk6c//8+ivH/J1GHigMEBAIBAAAALlV/f0SP8/9Flf//HDhZVgAAAAAAAAAACgoIBVqXzcpPqP//QHq5wBYgJR0/d7C0TJ/8/06j//9GiMzNBAYIBQAAAAABAQICAAAAABggIx5mqt/iOWiNiyAvNjBpv///Xbj//1KWz9ESHSUhAAAAAAEBAgIAAAAAAQEBAQAAAAAJCwoHOllqZRYgJR0mO0VANVVnZAcJCAYAAAAAAQEBAQAAAAAAAAAAAAAAAAECAgIBAQECAAAAAAEBAgEAAAEBAAAAAAABAQIBAQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); } tab.tabbrowser-tab[${this.id}] :-moz-any(.tab-throbber, .tab-icon-pending) { display: none; } tab.tabbrowser-tab[${this.id}]/*[image]*/ .tab-icon-image { display: -moz-box; } `.replace(/;/g, " !important;"); var args = ["data:text/css," + encodeURIComponent(css), windowUtils.USER_SHEET]; windowUtils.loadSheetUsingURIString(...args); addDestructor(() => windowUtils.removeSheetUsingURIString(...args)); }, checked(tab = TabContextMenu.contextTab) { return tab.hasAttribute(this.id); }, cmd(tab) { this.addStyle(); (this.cmd = tab => this.checked(tab) ? this.destroyTab(tab) : this.initTab(tab))(tab); }, reload(tab) { gBrowser.reloadTab(tab); }, get shouldHide() { return !TabContextMenu.contextTab .linkedBrowser.currentURI.scheme.startsWith("http"); }, popupshowing(e) { if (this.shouldHide) return; var menuitem = this.menuitem = document.createXULElement("menuitem"); menuitem.id = "context_cbAutoReloadTab"; menuitem.setAttribute("type", "checkbox"); menuitem.setAttribute("label", "Автоматически перезагружать"); menuitem.setAttribute("oncommand", "linkedObject.cmd(TabContextMenu.contextTab)"); menuitem.linkedObject = this; this.popup.querySelector("#context_duplicateTab").after(menuitem); (this.popupshowing = e => e.target == this.popup && !(menuitem.hidden = this.shouldHide) && menuitem.setAttribute("checked", this.checked()) )(e); }, TabClose(e) { var intervalId = e.target.getAttribute(this.id); if (!intervalId) return; clearInterval(intervalId); var tab = e.detail.adoptedBy; tab && SessionStore.setCustomTabValue(tab, this.id, "1"); }, SSTabRestored(e) { var tab = e.target; SessionStore.getCustomTabValue(tab, this.id) && !tab.hasAttribute(this.id) && this.initTab(tab, true); } }).init(document.getElementById("tabContextMenu"));
частично код ЗАРАБОТАЛ!
Это так кажется из-за упорствования в ереси,
что код делает то, чего он не делает.
Под скудное описание того, что он якобы делает,
возможно, в какой-то степени, подойдёт нечто вроде
try {({ init(tabpanels) { var dsp = e => this[e.type](e); addEventListener("click", dsp, true); tabpanels.addEventListener("wheel", dsp); addEventListener("unload", () => { removeEventListener("click", dsp, true); tabpanels.removeEventListener("wheel", dsp); }, {once: true}); }, e: {ctrlKey: true, shiftKey: true}, p: {triggeringPrincipal: document.nodePrincipal}, s: "menu.bookmark-item,toolbarbutton.bookmark-item[type=menu]", click(e) { if ( e.button == 1 && isBlankPageURL(gBrowser.currentURI.spec) && !e.ctrlKey && !e.shiftKey && !e.altKey && e.target.matches(this.s) && !gBrowser.webProgress.isLoadingDocument ) { var trg = e.target, pn = trg._placesNode; if (!pn) return; e.stopPropagation(); var urls = PlacesUtils.getURLsForContainerNode(pn); PlacesUIUtils.openInTabClosesMenu && trg.tagName == "menu" && closeMenus(trg); if (urls.length && OpenInTabsUtils.confirmOpenInTabs(urls.length, window)) gBrowser.loadURI(urls.shift().uri, this.p), urls.length && PlacesUIUtils._openTabset(urls, this.e, window); } }, wheel(e) { var findbar = gBrowser.selectedTab._findBar; findbar?.matches(":hover") && e.deltaY && findbar.onFindAgainCommand(e.deltaY < 0); } }).init(document.getElementById("tabbrowser-tabpanels"))} catch(ex) {Cu.reportError(ex);}
Что необходимо добавить (изменить) в этом скрипте:
https://github.com/ardiman/userChrome.js/blob/master/autopopup/AutoPopup.uc.js
что бы он реагировал и на кнопки CB ? В 76
Ну, если заменить парочку подряд идущих функций,
то будет реагировать на всякие там менюшки #main-menubar'a, папок закладок
на панели закладок, и CB-кнопок, сделанных по стандарту «this.type = "menu";».
Но телепатии коду это не прибавит, пользовательская кнопка может быть сделана как угодно.
̣ function getPopupMenu(elt) { if (whitesInx > -1 && PopElt) return PopElt; var popup = elt.querySelector(":scope > menupopup"); if (popup) return popup; var id = elt.getAttribute("popup"); return id && document.getElementById(id); } function getPopupPos(elt) { var x = elt.screenX, y = elt.screenY, pos = 0; var trg = elt.closest("toolbar,hbox,vbox"); if (trg) { var {width, height} = (elt = trg).getBoundingClientRect(); if (height >= 3 * width) { if (height >= 45) pos = 9; } else if (width >= 3 * height && width >= 45) pos = 8; } else elt = elt.closest("window"); try { var {width, height} = elt.getBoundingClientRect(); x = pos & 1 ? x <= width / 2 + elt.screenX ? 1 : 3 : y <= height / 2 + elt.screenY ? 0 : 2; } catch {x = 0;} return popupPos[x]; }
У меня на ночном так и не заработал CB
А почему он должен был заработать? Что-то предпринималось?
Отсутствует