Кто знает в 69 загрузки не исчезают из библиотеки
DownloadsCommon.getData(content).removeFinished(); Cc["@mozilla.org/browser/download-history;1"] .getService(Ci.nsIDownloadHistory) .removeAllDownloads();
Отредактировано solombala (04-10-2019 18:15:11)
Отсутствует
Тоже заметил когда тестил твою сборку), вроде в однопроцессорном пашет точно не знаю, в многоп. не пашет.
Да и вообще сам не разберешься будешь ждать год, темболее скоро праздники я просто забил настроив ПКМ открытие самой библиотеки или ctrl+j.
(btn=>{addEventListener("contextmenu",e=>e.ctrlKey||e.preventDefault()||DownloadsPanel.showDownloadsHistory(),false,btn);})(document.getElementById("downloads-button"));
(возможно код с ошибками... но пашет) удобнее конечно если при выходе очищает, но... крутимся как можем.
Отредактировано func4ptch4 (05-10-2019 06:09:41)
Отсутствует
удобнее конечно если при выходе очищает
Может так
((g, id, {history}) => addDestructor(r => id in g && g[id].destroy(r)) || id in g || ({ clearOnRestart: false, su: Services.startup, init() { g.AsyncShutdown.quitApplicationGranted.addBlocker( id, this.condition = this.condition.bind(g[id] = this) ); }, destroy(reason) { if (reason[5] != "e") return; delete g[id]; g.AsyncShutdown.quitApplicationGranted.removeBlocker(this.condition); }, condition() { return this.su.restarting && !this.clearOnRestart || history.removeVisitsByFilter({ transition: history.TRANSITIONS.DOWNLOAD }); } }).init())( Cu.import("resource://gre/modules/AsyncShutdown.jsm", {}), "Custom Buttons button: Clear downloads history.", PlacesUtils );
Отредактировано Dumby (05-10-2019 21:38:20)
Отсутствует
Круть, спасибо) вопрос насчет кода https://forum.mozilla-russia.org/viewto … 42#p773842 что он точно делает? так то он не нужен, просто что он делает.
Upd: еще раз спасибо, даже не знаю что и сказать)
Отредактировано func4ptch4 (06-10-2019 13:50:39)
Отсутствует
вопрос насчет кода https://forum.mozilla-russia.org/viewto … 42#p773842 что он точно делает?
Ну, почти правильно сказал, только не long click, а long press.
Если добавить triggeringPrincipal, то даже будет работать, но криво:
при открытии в активной вкладке залипает курсор.
И, такое использование frame script'а, когда в каждом разворачивается
новый отдельный обработчик считается не по-перформансу.
Плюс, unload не учитывается, хотя, может и не надо.
Вобщем, код неудачный, лучше избавься от него.
P.S. У меня в предыдущем посте return потерялся. Добавил.
Отсутствует
Сори если не в тему!
Во-общем , у меня работают скрипты в цикле через прокси.
Но когда происходит какая-та ерунда у поставщика проксей , (обычно ддос) то авторизация слетает и появляется модальное окно
Можно ли это как то обойти?
Отсутствует
Решил костылем на vbs.
Set shell = WScript.CreateObject("WScript.Shell") title = "Authentication Required" If shell.AppActivate(title) Then shell.SendKeys "%{F4}" End If
Отсутствует
Подскажите, а почему не получаются простые команды JavaScript, типа вывести в консоль?
Отредактировано Parazit (11-10-2019 17:28:11)
Отсутствует
Здравствуйте, как можно сделать из этого меню чтобы автопопап был и открывался нормально, он снизу открывает и подкошенный какой-то.
this._handleClick=()=>popup.openPopup(this); var popup=addElement("menupopup",{position:"after_start",oncontextmenu:"return false", style:"-moz-appearance:none;border:1px solid rgb(220,220,220);"},self); var mainBox=addElement("hbox",{},popup); var leftBox=addElement("vbox",{style:"background-color:rgb(217,231,215);"},mainBox); // ======================================================== const _proxyieo="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAEAklEQVR42pWTbUxTVxzGn9veyy20FYTJCpTXUah0CbpFYS6TgIZN4hTYIhi/KFuWZQmL2zJhYcxkiYbFDy4bDJxR58YcwgQWl+EUBqWAvBSQgKBApZDaUt6hQGl7e+9OXez0wxL3T07yP/c893fPec5zKfzf8oUSbgTACQOZ2R8/ph43+zL27RcD/o4Nu40GzYMHJXgEROH2CASB9DxcHC/QrM8mB+e8o23RDj8Fejs3J7fml6pS0gatAxsS8pron3UPi3wchAu4wFM2x7oQysqYwYGBzrz33yvWd3ZrvaBDOTkfVFZVlVXf78CibQmKgCBIxAxYhoWPmCYiARzPezYF8+IM1GEvYMVgGjuZ//Gn7V2dv3lBmZkHj16qq64obatnbesr7jhFuMiflUEulcGPZj3HElwc59kWZbCauJiQCGZ1Yrr/zCdFhe36rpv/grKyjl6trS0/2fyTZHppVtAooymFPBCBsk2QMX6PfHK6neBcLoxaTNyL4Sp6wzjb99XxE4Xanq5bXtDBrMy8utq6smP1X0vumscFtTKKCpUFwl8qhx8jAU2JwfNu8G4Oo1Yzl65Jpv1m7f0l+QWfNfd0/OkFZRPQNQJ662qJRG8cElQh4VQQgXg8YmkGYiJz8wLcnBtjM2bu2K4DdMSaT29J/onCpp7Wxqc8qq2rL0/9oUjSNtbrjgsOE22WyEHTNEUTsz1XZ3c54XA6YZqzuD7ae4TRcJv15cWnC27oGv/ygrKys/JqrtVWpF/+gtHe70ZE4BbIGSkYhgbjAfEiOBw2BIgckFICl5H4Ci1Zck021NSf+rWy5bwXlHPk8PGqyitnddYH5Hot8PeVQkx8EZHwkBNhbtEijE+2Q/2cnNKEJQg+rC81bhmErveWcWHO/k3F501nH4FS0/fsOV/2/aVVpz3Itrw873Y4F1gJK1UEh0T4sqzPvYdtwqhVh5fid1Hq8CSSdDGGjJ3ovPcHRk39U60Nd4u8v0j5uYoUGSuhNHFqa1OrNjU8Ourd6JjY7STo0A6fw9RKP5I0mUhLPASOJHPgQQffb2gUGcx9mJgwtnhBpEjy4Ijbqo6/eOHCmeSkpDd5kRjmWQMu3vwQQ5M6JMdnkpGBQH8FLAtGvnvkBjVi0lGrG9apJ0FSMtb2vJ6+/btvSw/HqVSxZL7SPtjI/NhY8OqCayxyW+QbiAxOQIwyAWtrq1z3cIPIMNMtmpufHngS9F8likpF4e4Dz5/aFpuGWMXLUIXuwOyyWWgevEwZHvbxA9r5smcBISQBO/bmRv6ctHOnandiNrYqUjBi7kC1tgR3hnr1v58W8p4J5KktkaKc/e9EFaelvBatDFVSt/XtzuvXW3pvX8GXZFn7N/UMs/PM0CK5AAAAAElFTkSuQmCC"; var leftItem1=addElement("menuitem",{label:"Open Connections",image:_proxyieo,oncommand:"openConnections()"},leftBox); //Функция открывает настройки прокси в окне ................... this.openConnections=function openConnections(){self.win&&self.win.close(); self.win=openDialog("chrome://browser/content/preferences/connection.xul","Proxy","centerscreen"); self.win.addEventListener("load",function f(e){this.removeEventListener("load",f,true);e.target.documentElement.setAttribute("type","prefwindow");},true); //добавить атрибут "prefwindow" gBrowser.addEventListener("click",function c(){this.removeEventListener("click",c);try{self.win.close()}catch(e){};},true);}; //закрыть настройки прокси по клику на странице /**/ // ======================================================== function addElement(elementName,attributes,parent){ var element=document.createXULElement(elementName); element.id=_id+"-"+elementName+"-"+Date.now(); for(var attribute in attributes)element.setAttribute(attribute,attributes[attribute]); if(["menu","menuitem"].indexOf(elementName)!=-1)element.classList.add(elementName+"-iconic"); return parent.appendChild(element);};addDestructor(()=>popup.remove());
Отсутствует
В 70-й отвалилась кнопка "Очистить панель адреса прокруткой колёсиком мыши"
// Очистить панель адреса прокруткой колёсиком мыши ..................................... (function () { var urlbar = document.getElementById("urlbar"); if ( !urlbar ) return; addEventListener('DOMMouseScroll', function(){ urlbar.value = ''; }, false, urlbar ); })();
// Очистить панель поиска прокруткой колёсиком мыши на панели поиска, от 19.09.2014. .............. (function () { var searchbar = document.getElementById("searchbar"); if ( !searchbar ) return; addEventListener('DOMMouseScroll', function(){ searchbar.textbox.value = ''; }, false, searchbar ); })();
Отсутствует
xrun1
Может так.
// Очистить панель адреса прокруткой колёсиком мыши, на панели адреса от 24.10.2019. .............. (()=>{ var urlbar = document.getElementById("urlbar"); if ( !urlbar ) return; addEventListener('wheel', ()=> urlbar.value = '', false, urlbar); })(); // Очистить панель поиска прокруткой колёсиком мыши на панели поиска, от 24.10.2019. .............. (()=>{ var searchbar = document.getElementById("searchbar"); if ( !searchbar ) return; addEventListener('wheel', ()=> searchbar.value = '', false, searchbar); })();
Отсутствует
Dumby раньше Вы мне показывали как создать в контекстном меню аддонов на странице about:addons.
var copyToClipboard = function (aString) { Cc["@mozilla.org/widget/clipboardhelper;1"]. getService(Ci.nsIClipboardHelper).copyString(aString); }; (function () { addEventListener("shown", { url: "chrome://mozapps/content/extensions/aboutaddons.html", handleEvent(e) { e.target.baseURI == this.url && !e.target.contains(this.item) && requestAnimationFrame(() => e.target.prepend(this.item)); }, get item() { var item = document.createElementNS(xhtmlns, "panel-item"); item.append("Домашняя страница"); item.onclick = e => { e.stopPropagation(); item.parentNode.hide(); this.onAddon(item.closest("addon-card").addon); } addDestructor(() => item.remove()); delete this.item; return this.item = item; }, onAddon(addon) { var url = addon.homepageURL; if (!url) { if (addon.reviewURL) { url = addon.reviewURL.replace(/\/reviews\/.*$/, "/"); } else { url = "https://addons.mozilla.org/search/?q=" + encodeURIComponent(addon.name); } } openURL(url); } }, true, gBrowser.tabpanels || 1); })(); (function () { addEventListener("shown", { url: "chrome://mozapps/content/extensions/aboutaddons.html", handleEvent(e) { e.target.baseURI == this.url && !e.target.contains(this.item) && requestAnimationFrame(() => e.target.prepend(this.item)); }, get item() { var item = document.createElementNS(xhtmlns, "panel-item"); item.append("Папка установки"); item.onclick = e => { e.stopPropagation(); item.parentNode.hide(); this.onAddon(item.closest("addon-card").addon); } addDestructor(() => item.remove()); delete this.item; return this.item = item; }, onAddon(addon) { switch (addon.type) { case "plugin": var pathes = addon.pluginFullpath; for (var i = 0; i < pathes.length; i++) { this.revealPath(pathes[i]); } return; case "userchromejs": var file = addon._script.file; if (file.exists()) file.reveal(); return; } var gecko = parseInt(Services.appinfo.platformVersion); var nsLocalFile = Components.Constructor("@mozilla.org/file/local;1", (gecko >= 14) ? "nsIFile" : "nsILocalFile", "initWithPath"); var dir = Services.dirsvc.get("ProfD", Ci.nsIFile); dir.append("extensions"); dir.append(addon.id); var fileOrDir = dir.path + (dir.exists() ? "" : ".xpi"); try { (new nsLocalFile(fileOrDir)).reveal(); } catch (ex) { var addonDir = /.xpi$/.test(fileOrDir) ? dir.parent : dir; try { if (addonDir.exists()) { addonDir.launch(); } } catch (ex) { var uri = Services.io.newFileURI(addonDir); var protSvc = Cc["@mozilla.org/uriloader/external-protocol-service;1"]. getService(Ci.nsIExternalProtocolService); protSvc.loadUrl(uri); } } } }, true, gBrowser.tabpanels || 1); })(); (function () { addEventListener("shown", { url: "chrome://mozapps/content/extensions/aboutaddons.html", handleEvent(e) { e.target.baseURI == this.url && !e.target.contains(this.item) && requestAnimationFrame(() => e.target.prepend(this.item)); }, get item() { var item = document.createElementNS(xhtmlns, "panel-item"); item.append("Файл установки"); item.onclick = e => { e.stopPropagation(); item.parentNode.hide(); this.onAddon(item.closest("addon-card").addon); } addDestructor(() => item.remove()); delete this.item; return this.item = item; }, onAddon(addon) { var gecko = parseInt(Services.appinfo.platformVersion); var nsLocalFile = Components.Constructor("@mozilla.org/file/local;1", (gecko >= 14) ? "nsIFile" : "nsILocalFile", "initWithPath"); var dir = Services.dirsvc.get("ProfD", Ci.nsIFile); dir.append('extensions'); dir.append(addon.id); if ( dir.exists() ) dir.launch(); var file = Components.classes['@mozilla.org/file/directory_service;1'] .getService(Components.interfaces.nsIProperties) .get('ProfD', Components.interfaces.nsIFile); file.append('extensions'); file.append( addon.id + '.xpi' ) if ( file.exists() ) file.launch(); return; } }, true, gBrowser.tabpanels || 1); })(); (function () { addEventListener("shown", { url: "chrome://mozapps/content/extensions/aboutaddons.html", handleEvent(e) { e.target.baseURI == this.url && !e.target.contains(this.item) && requestAnimationFrame(() => e.target.prepend(this.item)); }, get item() { var item = document.createElementNS(xhtmlns, "panel-item"); item.append("Копировать имя и версию"); item.onclick = e => { e.stopPropagation(); item.parentNode.hide(); this.onAddon(item.closest("addon-card").addon); } addDestructor(() => item.remove()); delete this.item; return this.item = item; }, onAddon(addon) { copyToClipboard(addon.name + " " + addon.version); } }, true, gBrowser.tabpanels || 1); })(); (function () { addEventListener("shown", { url: "chrome://mozapps/content/extensions/aboutaddons.html", handleEvent(e) { e.target.baseURI == this.url && !e.target.contains(this.item) && requestAnimationFrame(() => e.target.prepend(this.item)); }, get item() { var item = document.createElementNS(xhtmlns, "panel-item"); item.append("Копировать версию"); item.onclick = e => { e.stopPropagation(); item.parentNode.hide(); this.onAddon(item.closest("addon-card").addon); } addDestructor(() => item.remove()); delete this.item; return this.item = item; }, onAddon(addon) { copyToClipboard(addon.version); } }, true, gBrowser.tabpanels || 1); })(); (function () { addEventListener("shown", { url: "chrome://mozapps/content/extensions/aboutaddons.html", handleEvent(e) { e.target.baseURI == this.url && !e.target.contains(this.item) && requestAnimationFrame(() => e.target.prepend(this.item)); }, get item() { var item = document.createElementNS(xhtmlns, "panel-item"); item.append("Копировать ID"); item.onclick = e => { e.stopPropagation(); item.parentNode.hide(); this.onAddon(item.closest("addon-card").addon); } addDestructor(() => item.remove()); delete this.item; return this.item = item; }, onAddon(addon) { copyToClipboard("ID: " + addon.id); } }, true, gBrowser.tabpanels || 1); })(); (function () { addEventListener("shown", { url: "chrome://mozapps/content/extensions/aboutaddons.html", handleEvent(e) { e.target.baseURI == this.url && !e.target.contains(this.item) && requestAnimationFrame(() => e.target.prepend(this.item)); }, get item() { var item = document.createElementNS(xhtmlns, "panel-item"); item.append("Копировать имя"); item.onclick = e => { e.stopPropagation(); item.parentNode.hide(); this.onAddon(item.closest("addon-card").addon); } addDestructor(() => item.remove()); delete this.item; return this.item = item; }, onAddon(addon) { copyToClipboard(addon.name); } }, true, gBrowser.tabpanels || 1); })();
/*CODE*/ var hid = false; //false - скрыть скрытые адоны, true - показать скрытые адоны var br = gBrowser; var img2 = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAABwWjpocFs8zHFbPP9xWzz/cVs8/3FbPP9xWzz/cVs8/3FbPP9xWzz/cVs8/3FbPP9xWzz/cVs8/3BbPMxwWjpodWBB4bWwqv/o6Oj/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+rq6v+1sKr/dWBB4XtlR//f39//6Ojo/8e7q/+0oIf/po1t/6aNbf+mjW3/po1t/6aNbf+mjW3/po1t/+rq6v/s7Oz/39/f/3tlR/+Ba07/29vb/+fn5//f39//3Nzc/9nZ2f/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ/9nZ2f/l5eX/5+fn/9vb2/+Ba07/h3FV/9bW1v/k5OT/5OTk/+Dg4P+bhGb/k3hX/5N4WP+TeFf/m4Rm/+Dg4P+WfF3/rp2H/+Dg4P/U1NT/h3FV/454XP/Z2dn/5+fn/+Pj4//j4+P/ysK3/8nCtv/Jwrb/xr2w/8e9sP/d29j/2NjY/5d9Xv+vnon/1dXV/454XP+UgGP/3Nzc/+rq6v/m5ub/lHlY/5d8XP+dhmf/lXpa/5R5WP+dhmf/uqyb/+bm5v+UeVj/r56I/9jY2P+UgGP/m4dr/97e3v/t7e3/6enp/93d3f/d3d3/3t7e/yOC5P+AsOD/3t7e/+Pj4/+lkHX/rp6J/+Li4v/c3Nz/m4dr/6KNc//h4eH/8PDw//Dw8P/w8PD/7Ozs/zKK6f/h4eH/C3To/+zs7P/s7Oz/4+Pj/+bm5v/u7u7/4eHh/6KNc/+olHr/5OTk//Pz8//z8/P/8/Pz//Dw8P8Seen/8PDw/xJ56f8Seen/8PDw//Dw8P/z8/P/8/Pz/+Tk5P+olHr/r5uC/+fn5//29vb/9vb2//b29v/z8/P/lL3o/xl96f/n5+f/grTo/yWE6v/z8/P/9vb2//b29v/n5+f/r5uC/7Whif/p6en/+fn5//n5+f/5+fn/+fn5//Dw8P+JuOr/JYXr/+/v7/+60ev/9fX1//n5+f/5+fn/6enp/7Whif+6p5D/7Ozs//v7+//7+/v/+/v7//v7+//6+vr/8/Pz/4y77f83juz/9fX1//v7+//7+/v/+/v7/+zs7P+6p5D/v6yW/+3t7f/8/Pz//f39//39/f/9/f3//f39//z8/P/09PT/xNnw//r6+v/9/f3//f39//z8/P/t7e3/v6yW/8Owm8ze2tX/9fX1//f39//39/f/9/f3//f39//39/f/9/f3//T09P/39/f/9/f3//f39//19fX/3trV/8Owm8zGsp9oyLWezMi1n//ItZ//yLWf/8i1n//ItZ//yLWf/8i1n//ItZ//yLWf/8i1n//ItZ//yLWf/8i1nszGsp9oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="; var img1 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmlJREFUeNpsU0toU0EUPfPysx/tTxuDH9SCWhUDooIbd7oRUUTMouqi2iIoCO6lceHWhegy4EJFinWjrlQUpVm0IIoFpVDEIthm0dpikpf3ZuZ6Z94nrXhhMjM3c8895977BBHB2PznK8WPtDgyWH5q77cPH8PpdXuhpQT4ifR9u5sfJb1bmw6VivahATDrxcRZ2njfoaMv+2j7mLDn93MPiNRMvGbL18L9IpF8h9/TN+EYkMffSiOXJ5+hkD+PdqcLpICWHOHc2CC+LEyA/K+cKQMnlQHJX8wqYG3MAJy88Wa4OLDvEqAEOpJd0LxHIMdHBziowSwVlF8D6QaicK01krw/JynwcKoEwZczewroTvZirlKJs5CqQ5CG8pb57FnJUA0LYCXMX5fibd+p8LWDDemcPZbzQyjvH+Ki1TlIciElA7ghwLKV4kRZstt2sANWRjYTAGzuP2hXZFpJ/GsxgGJ0ox1aoFWsDXyyxqCs26+ydmagFN/rRjymJ1898bzGzmQE0HCZpmk5A0RFIv8Pn0WYPsiu6t/Rsj6PauVTwffTSzGAGZhUG2F06hEc9ibS7OPMNp6ErYFlKavo7MkhmTqCxZ/jwzGA9Hx82H2BZSw1NTN9Gx8ycHkajU/7M+jInsDC7DiaEmo1bNl1AMr9ASFgqVu9MCTIzoGUimXVAnnaN0PdBBDCCYbEtMk6wkpQwIG0sn0PQIUF4GsTwLSIFKNqF6DVrQq+IWVrQDxAYQC/1SsYOI4pOxKZrfifiUSbDUisif7XlpGIPufXd/uvdvZm760M0no1FZcnrzUdjw7au3vu/BVgAFLXeuTxhTXVAAAAAElFTkSuQmCC"; var trigger, trigger1, dialog, drives, count; var icon1 = "data:image/png;base64,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"; var icon2 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACa0lEQVR42oWTXUhTYRjH/+/50H1mZ/kRs5WstTKCcsFiTIVYUETUneAupEAqwSuD2obJokS78WawLrppu+uiSymCwFr2ceEcQoWM/MjK2odzNfd1ds7pbKCo2Py/HHh5nuf9v7/znOcQrKvP0sY1NPgMXJOdpiiRgCQAIsqZ2qxY4BZXlmdyyfR1+Kc+YpPIxu72mYtWm328y3IOGqpWzpCNgoV8AoHpF8XU1+/OnOvls50NZOked30622ZrtXBGoqBYSPLKCEWE5qbzodDEg+L9N8PYJrI9oAt0xy+1ddaf0BhQhIDX32YwEZp4wt99dQ07iGiGL3hMzS23GImUqQWVsYkz6wyMSdWIoiTg7coslheW0sKffOlHfDm46hof2GJwyO+MOh1XTJxCAwZU5SmKJZQksVKQD06hmoje1zVrs9nMsZ+/0cDppMONBqKU3z/B/0V07Rfs4wX09PTseDgYDILU3HP0quu0/alYclS9V9t92ma9rFGpEUnNI5ZJYTBytGJQLt6s9RiBy27B6GS4Eh3q9NWdaunnlRSy2SzAUvCGj1Un2BIZ7PDjYF0f9inl8WHAsCwG3xt3IXC390KSwhUKT/sjGPbchF4LSlkLDa3AQEi/C8GIY46oaiRpNbcENXsEzVo9WBpE/qw1NAP3jLk6ARk7/5k9vr+1lC1ALPCQaYD51HNk+AhoAi/jcFcloIc6MqL1gFqi5HbwAhCXmxdNXsXDd4FykdfrlaoSUHccomivJ2AZ+UIKdLYE/kvsqZRcu4GxD+l1g//3wNMZhYo2leeYVH4OApEX0ijwJzEyuVg2qDaJ/wCoeQGVklbGmAAAAABJRU5ErkJggg=="; var icon3 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH1wcREBAg9OD7NAAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAARnQU1BAACxjwv8YQUAAAH6SURBVHjaxVNBaxNBFP4mGRNp06bSaGu9qXhRLOSQX6Dg0d48SMWC4Mmbv8AfYA7Sgp6UgteCF29CKahBsKKWglgam4rRxGxiks3u7Mz6zZIlSVHRk7N8vLcz7/vemzczwP8eorSCgtLJJeXpUGtMBQHgK5RptxbuYJUx5o8CL5bx+OzCkyuZ2cLIwtPihbVW9a1GiCyFQyusFD4S2zfv4x5DtI2TAphOZk8zbXFE4NKt5ctInDmY8OLd6zNrtI+IlhURG0Xs55dezZXXF9Gq7CA9NQvNbAH19W/wo+6gWXeaN1aQkybEXLv2Bb36Z+SvfUAynYLgB9Y+GLEv6Sl4HTdcvX0yy4kZqdkit1nFWC4Pme4ydvMXxNiOwwTfIVP5OCBlK0Cv8Y4C5xnXYM+bB0ixTwjWHwpUdzbh+ijZSWlYQefrcxwrLJJcIZxRAWM33qP1KTCOwJ9ErbyLno8trvqRgOrsITV5ik6pT2IXvbZdINmjVr8CmYMx09h7/8wKMBtUtIWgu4/DE8e5lxob4pLsDkhhvxJrjYfE2Am065/Et1ZUQRAJTBxJIDQJZrgKZDiRwYA03AlxCF1Ho92oYGM7ElCS5/qmVjXzLx+cg71tMex5D/8Pw+ng4etd2GYpER0ucJRI26v9l2/Ivg82CI2YIP+BPCyifwI91AzKs/qQkQAAAABJRU5ErkJggg=="; var icon4 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC5UlEQVR4AWIgFvxfaXzz/0tNC5wKbgpHCINoS9V+NW2TpVNlnPfc5Q0CsEkOwHItURRd3bfHeBh927Zt27Zt27Zt2/6xbdvJWFcnj8Xsqo1C42Ccw/mLnfNeeH2R5PcRWbG/J7+vcbC8GE3QAwPQP3L1DsnwlAcOWOv+waVg5F4dMdbu2Un8GlwX0nHO3vazHDoOGC07b/aHBEb8CLVj6MXw1HmvLVzvAJm89V7S/9B9ZdGV68gD11wtXLZcuNuW/kN2FckfIFI4usOPFn/5/iITEqcC6J+514St8oGpQIFNkovYIzORXNtinFqMtSOLwFJ8u+BQ8GaC73fQQ/lh3OSGnwDokGlc2GrVN7KUB6EOht0O+jyg3mHM2oegFTw1+UpmLbfBng6uB56L0SktY7IPGaPdcy3toZSA6WHQ46PQnlw//gH8lAtWis2//JvZh+9Btr0AZmPwBJHYZUZgNQEAXE8zc0GafrVdeWHFqdTDFqgKEKPhtXHmH0/z567nQ6YOwY1QEmyzzmLfO1LRZbF4sMw8FUJ8xZ+lrRhd3gwU4AtuE6RappavcdPun4LTBBtwLWVsLzSy6YYPdf0AKa9B3FR5eLtP2d8fQm7tEuGsx3V97qXvzDXZev3hEADyAAUQ3zXAwIqdOLTjEhJ2HQlAOZ9g69XmsrCU5LVhR7F0oZAsTOS+8z+CAlADxAWKX2vgg0K9zS3bCTw7gCobwhXNp/225+5PjqfvoAxru/34+pzn2CM1HfJAHSh7QrlxJQAdu/DIuNazpbje3iKbbS1y4PoiZ2dFboqJPKFFXkXk3Q6+38O3EP/JUAlAAwB3L6qs8cPyWoa6HYXFHVwQg/lxmJPoyGFYoiEPrFAdNL5fCJ4BoIDeX5hkuHD/2i0zb8vGFutIsAbpOrQ1oMWGmEPNMYgEh8WilUPVy8UVrAp9Q9dtOCNzwtPFdfee4G6yXVO23kLslbNU/v3cSvHRZVOdcnT1ADucXxaSvokQAAAAAElFTkSuQmCC"; var icon5 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjenhJ3MAAACvklEQVQ4T2NgQAL///9nA2LpusbW2PDoxKYFi5baA/k8yGrwsoGKRexdvJbxiyv8F5XX+C8kLv/21avXyqQYIKmmbXRFxdD6v7aVy39+Udnvd+/e1wIazIjTEKAkBxBLAbEyEBv1TZzaIKGo+V9O0+h/YmrWbJAYEMsBsRJUHSeKYSA/axqYX1fTNbkHwkoaBs90gLYbOfr8B/Ed3Hz2mtu6HIPK3waql4EZAGSzMAAJDVll7a9mroH/QdjCI/i/nX80GIP4+jZu/w3tPcFsBXX990D1akgGcIAM0JZT0/1r4R7438Y77L9zSAJWbOcb+V/T0OIFyEKot7mBNBfIAAWgFz7auXhdMLZyeGBs5/7fIzIFAzsFxfw3NLd7BlTv0DNhSkxyRm77pStXdUAG8CxdsRoUUKpfv35zMrV1eeYRnvTfLy4LBfvGZv7XMrL8nZZTuFTbyPKnmaPXfzefoFMgA0BOkYWGtJm7f+g5j7CE/8HJeRjYLzbjv5138H8QHRCf9d/YxukjyAB5c3u3r3GpWdvTc4vWmtg4/41IL/ofkVGMgZ39w/+D5B19Qv57RyT9d3D3ewaOBVtX788+kcn/vcIT/kdmlPz3BtKeoXH/QQbF5FSAcVRW2X9rF6/vnz59jqxubJ3oFxZ9pXfStEyQAaqeQeHPorNK/ycWVP+3c/f9m1tSsb6kqn65q2/w2+jMEqB4zf/4vKr/Dp7+34HqDYBYEIjFgZgXZIBiWHzKFZDCSKCNUckZZ4BipkCs09DWNdc/JuV/SkkDGDv5BP9/8OixBVCOCZ4aQSYlZxccDI5P/x+WnPPfJyzm7eOnz0BxLRmekHodJA7CfpFAbwVH/Z+9YIkfOAUipSbOdZu22ta3dfWV1zevyiwsW/Hq9RtQ3uDrnTw9ASg+qbGjZ8rM+YsKt+7c4wx1PtwFACct2zZrCHmoAAAAAElFTkSuQmCC"; function jarLoaded(e) { var val = gURLBar.value; if(val.search(/(file|jar):/) == 0 && val.search(/\.(ja|jar|xpi|zip)$/i) > -1) loadURI("jar:" + val + "!/"); } function jarClicked(e) { if(e.button == 0) { var tabUrl = gURLBar.value; if(tabUrl.search(/(file|jar):/) == 0 && tabUrl.search(/\/$/) > -1 || tabUrl.search(/view-source:/) == 0) { var node = e.target.href; if(node && node.search(/\.(exe|dll|sqlite|sqlite-shm|sqlite-wal)$/i) == -1) { if(tabUrl.search(/view-source:/) == 0 && node.search(/view-source:/) == 0 || node.search(/\.(ja|jar|xpi|zip)$/i) > -1) { e.preventDefault(); e.stopPropagation(); br.selectedTab = br.addTab(node); } else if(node.search(/\/$/) == -1) { e.preventDefault(); e.stopPropagation(); br.selectedTab = br.addTab("view-source:" + un(node)); }}}}} function intf(drives, count) { var data = '<?xml version="1.0"?>'; data += '<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>'; data += '<window title="Firefox Explorer" onload="self.load()" xmlns="' + xulns + '">'; data += '<keyset>'; data += '<key keycode="VK_ESCAPE" oncommand="close()"/>'; data += '</keyset>'; data += '<vbox flex="1">'; data += '<richlistbox id="listbox" flex="1" >'; data += '<listcols>'; data += '<listcol/>'; data += '<listcol flex="1" />'; data += '</listcols>'; data += '</richlistbox>'; data += '<hbox>'; data += '<button image="' + icon2 + '" label=" Add-on" oncommand="self.addon(event)" tooltiptext="Ctrl+ = Без закрытия диалога"/>'; data += '<button image="' + img2 + '" label=" 1 omni.ja" oncommand="self.omni(event)" tooltiptext="Ctrl+ = Без закрытия диалога"/>'; data += '<button image="' + img2 + '" label=" 2 omni.ja" oncommand="self.omni1(event)" tooltiptext="Ctrl+ = Без закрытия диалога"/>'; data += '<button image="' + icon4 + '" label=" Firefox" oncommand="self.folder(event,' + "'GreD'" + ')" tooltiptext="Ctrl+ = Без закрытия диалога"/>'; data += '<button image="' + icon3 + '" label=" Профиль" oncommand="self.folder(event,' + "'ProfD'" + ')" tooltiptext="Ctrl+ = Без закрытия диалога"/>'; data += '<button label="Закрыть" oncommand="self.close()"/>'; data += '</hbox>'; data += '<hbox>'; for(i = 0; i < count; i++) data += '<button image="' + icon1 + '" label=" ' + drives[i] + '" oncommand="self.mydrives(event,' + "'" + drives[i] + "'" + ')" tooltiptext="Ctrl+ = Без закрытия диалога"/>'; data += '</hbox>'; data += '</vbox>'; data += '</window>'; return data.replace(/self/g, "opener.document.getElementById("" + self.id + "")"); } this.load = function() { if(!("AddonManager" in window)) Components.utils.import("resource://gre/modules/AddonManager.jsm"); if(!("Services" in window)) Components.utils.import("resource://gre/modules/Services.jsm"); var then, promise = AddonManager.getAddonsByTypes(["extension"], then = function(addons) { var list = new Array(); addons.forEach( function(addon) { if (addon.hidden == false || addon.hidden == hid) { list.push(addon); } }); function key(addon) { return addon.name.toLowerCase(); } list.sort( function( a, b){ var ka = key(a); var kb = key(b); return ka == kb ? 0 : ka < kb ? -1 : 1; }); var {document} = dialog; for(var addon of list){ var item = document.createXULElement("richlistitem"); item.setAttribute("selected", "false"); var cell1 = document.createXULElement("vbox"); cell1.setAttribute("class", "icon-container"); item.appendChild(cell1); var cell2 = document.createXULElement("image"); cell2.setAttribute("anoid", "icon"); cell2.setAttribute("class", "icon"); cell2.setAttribute("src", addon.iconURL); if (addon.iconURL == null) cell2.setAttribute("src", icon5); cell2.style.height="16px"; cell2.style.width="16px"; cell1.appendChild(cell2); var cell = document.createXULElement("label"); cell.setAttribute("value", addon.name); cell.style.height="16px"; item.appendChild(cell); var cell = document.createXULElement("label"); cell.setAttribute("value", addon.version); item.appendChild(cell); var box = dialog.document.getElementById("listbox"); box.appendChild(item).addon = addon; box.focus(); } }); promise && typeof promise.then == "function" && promise.then(then, Components.utils.reportError); // Firefox 61+ } this.addon = e => { var item1 = dialog.document.querySelector("richlistitem[selected]"); var uri = item1.addon.getResourceURI(); if (uri.schemeIs("jar")) uri = uri.spec else { var file = uri.QueryInterface(Ci.nsIFileURL).file; uri = file.isDirectory() ? uri.spec : "jar:" + uri.spec + "!/"; } if (!e.ctrlKey) { dialog.close(); dialog = null; } br.selectedTab = br.addTrustedTab(uri); } this.omni1 = function(e) { var profileDir = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("GreD", Components.interfaces.nsIFile) .path; var file = profileDir + "\\browser\\omni.ja"; var vert="jar:" + "file:///" + file + "!/"; br.selectedTab = br.addTrustedTab(vert); if(!e.ctrlKey) dialog.close(); } this.omni = function(e) { var file = Services.dirsvc.get("GreD", Ci.nsIFile); file.append("omni.ja"); var uri = Services.io.newFileURI(file); br.selectedTab = br.addTrustedTab("jar:" + uri.spec + "!/"); if(!e.ctrlKey) dialog.close(); } this.folder = function(e, shortcut) { var uri = Services.io.newFileURI(Services.dirsvc.get(shortcut, Ci.nsIFile)); br.selectedTab = br.addTrustedTab(uri.spec); if(!e.ctrlKey) dialog.close(); } this.mydrives = function(e, letter) { br.selectedTab = br.addTrustedTab("file:///" + letter + "/"); if(!e.ctrlKey) dialog.close(); } this.close = function() { dialog.close(); } Cu.import("resource://gre/modules/FileUtils.jsm"); var root = new FileUtils.File("\\\\."); var drivesEnum = root.directoryEntries; drives = []; while (drivesEnum.hasMoreElements()) { drives.push(drivesEnum.getNext().QueryInterface(Ci.nsIFile).path); } count = drives.length; //var url = "data:application/vnd.mozilla.xul+xml;text/plain," + encodeURIComponent(intf(drives, count)); var url = "data:application/vnd.mozilla.xul+xml;text/plain," + encodeURIComponent(intf(drives, count)); if (parseInt(Services.appinfo.platformVersion) >= 69 && Services.appinfo.browserTabsRemoteAutostart) { var chromeURL = `chrome://custombuttons/content/cbdialog${Date.now()}.xul`; Cc["@mozilla.org/addons/addon-manager-startup;1"].getService(Ci.amIAddonManagerStartup).registerChrome( Services.io.newFileURI(Services.dirsvc.get("ProfD", Ci.nsIFile)), [["override", chromeURL, url]] ); url = chromeURL; } var feature = "chrome,centerscreen,width=580,height=410,alwaysRaised"; dialog = window.openDialog(url, "", feature);
Отредактировано Andrey_Krropotkin (25-10-2019 14:10:20)
Отсутствует
bunda1
Похоже, теперь в адресной строке не работает прокрутка. Пробовал интерфейс и со строкой поиска и без. В "urlbar" никак.
searchbar [144.083×26]
namespaceURI: XUL
margin: 0
border: 1px
padding: 0
id = searchbar
flex = 1
src = moz-extension://243005c3-3d6a-465d-9496-850fde7893be/yandex-ru.ico
Отсутствует
bunda1
Похоже, теперь в адресной строке не работает прокрутка. Пробовал интерфейс и со строкой поиска и без. В "urlbar" никак.
Добавлено 24-10-2019 20:13:59
addEventListener('wheel', (e, trg = e.target)=> { if ( trg.id != 'urlbar' ) return; trg.value = ''; });
Отредактировано bunda1 (24-10-2019 20:13:59)
Отсутствует
bunda1
1-й вариант работает. Спасибо!
// Очистить панель адреса прокруткой колёсиком мыши на панели адреса (()=>{ document.getElementById("urlbar").onwheel =e=> { e.target.value = ''; }; })(); // Очистить панель поиска прокруткой колёсиком мыши на панели поиска (()=>{ document.getElementById("searchbar").onwheel =e=> { e.target.value = ''; }; })();
Отсутствует
А так работает? зачем их разделять если надо в обойх.
(()=>{document.getElementById("urlbar","searchbar").onwheel=e=>{e.target.value='';};})();
без (()=>{ })();
document.getElementById("urlbar","searchbar").onwheel=e=>{e.target.value='';};
Отредактировано func4ptch4 (25-10-2019 14:18:47)
Отсутствует
Где это расширение взять для FireFox Quantum ?
Отсутствует
Нет так не работает, но вот должно работать:
Нет так не работает, код document.getElementById("urlbar","searchbar") отдает только первый элемент, но вот так должно работать:
["urlbar", "searchbar"].forEach(el=> document.getElementById(el).onwheel=e=> e.target.value = "");
Отсутствует
Вопрос такой нельзя ли все упростить и второе как скрыть некоторые из этих пунктов
Так достаточно просто?
(lst => { addEventListener("shown", lst, true, gBrowser.tabpanels || 1); addDestructor(() => lst.item && lst.item.remove(lst.item = null)); })({ //------------------------------------------------------------------ "Копировать имя"(addon, hideOn) { if (hideOn) return false; gClipboard.write(addon.name); }, //------------------------------------------------------------------ "Копировать ID"(addon, hideOn) { if (hideOn) return false; gClipboard.write(addon.id); }, //------------------------------------------------------------------ "Копировать версию"(addon, hideOn) { if (hideOn) return ["custombuttons"]; gClipboard.write(addon.version); }, //------------------------------------------------------------------ url: "chrome://mozapps/content/extensions/aboutaddons.html", handleEvent(e) { if (e.target.baseURI != this.url) return; var item = this.getItem(e.target.ownerDocument); var type = e.target.closest("addon-list").getAttribute("type"); for(var child of item.children) { var res = this[child.textContent](null, type); child.hidden = res && res.includes(type); } e.target.contains(item) || requestAnimationFrame( () => e.target.prepend(item) ); }, item: null, getItem(doc) { if (this.item) { if (this.item.ownerDocument == doc) return this.item; this.item.remove(); } var item = doc.createElement("div"); item.onclick = e => { e.stopPropagation(); item.parentNode.hide(); this[e.target.textContent]( e.target.closest("addon-card").addon ); } for(var lab of this.labels) item.appendChild( doc.createElement("panel-item") ).append(lab); return this.item = item; }, get labels() { delete this.labels; return this.labels = Object.entries(this).map( ([key, val]) => String(val).startsWith('"') && key ).filter(Boolean); } });
Отсутствует