Сборки - разницы никакой. Понты одни.
понял, курю бамбук, занимаясь вечным вариантом, ждемс радикальных подвижек ...
Отредактировано ALEX_45_ORP (12-10-2021 19:58:37)
Win 10х64
Отсутствует
ждемс радикальных подвижек ...
Все ждут только одного , но не дождутся... Это декодер MP4. Если не DTV-DVD video decoder системный , хрен ролик посмотришь с MP4. Только webm с ютуба....
Гугловоды все себе захапали в этом плане.
Отсутствует
Dumby
this.onauxclick = e => e.button != 1 || gShowPopup(this);
popup появляется , но пункт "удалить с панели..." не работает. При ctrl + ПКМ - работает ....Это как код поменяли
Отсутствует
Нужна кнопка по нажатию на которую открывалась бы папка заданная мной.
this.onclick =e=> { e.button == 0 && runApp(); // ЛКМ }; function runApp() { var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); file.initWithPath( getPath() ); file.launch(); }; function getPath() { try { return Services.prefs.getComplexValue(s, Ci.nsIPrefLocalizedString).data; } catch(e) { return "C:\\Путь..."; }; };/*Initialization Code*/
Win7
Отсутствует
popup появляется , но пункт "удалить с панели..." не работает. При ctrl + ПКМ - работает ....Это как код поменяли
Да, действительно, вижу.
Это всё этот мерзкий баг, сколько же всего повылезало.
Вот, ещё больше сумбура, но, надеюсь, будет работать.
Custom Buttons 0.0.7.0.0.21
paxmod и bootstrap в zip-папке.
Отсутствует
Dumby
бЛАГОДАРЮ, тут другое BrowserUtils.jsm такого понавертели , что кн. "увел. изображение " лопнула... Команда handleCommand(); не работает. Заманался рихтовать сам BrowserUtils.jsm ....Что делать? Снят вопрос , люди скрипт подсказали , но можно и кнопкой
/*Initialization Code*/ addEventListener("popupshowing", { imgZoom: 190, // на сколько увеличить изображение из меню scrollZoom: 20, // на сколько увеличивать/уменьшать колесиком мыши scrollTop: 1, // или -1, переключение направление прокрутки для увеличение колёсиком receiveMessage(msg) { var container = document.documentElement .appendChild(document.createElement("div")); addDestructor(() => container.remove()); var image = container.appendChild(document.createXULElement("image")); image.style.cssText = "width: 100% !important; height: 100% !important;"; image.setAttribute("validate", "never"); var st = container.style; var dz = this.scrollZoom/100 * this.scrollTop; var currScale = 1, x, y, initialZoom = this.imgZoom/100 - 1; var hide, props = ["width", "height", "left", "top"], p = n => n + "px"; var set = (...args) => props.forEach((prop, ind) => st[prop] = p(args[ind])); (hide = () => { st.cssText = "position: fixed; display: none; z-index: 2147483647;"; currScale = 1; image.src = null; })(); container.onwheel = (e, ds = e.deltaY > 0 ? -dz : dz) => { if (currScale < .15 && ds < 0) return; st.transform = `scale(${currScale += ds})`; var {width, height, left, top, bottom, right} = container.getBoundingClientRect(); if (height < innerHeight) { if (top < 0) st.top = p(y -= top); if (bottom > innerHeight) st.top = p(y -= bottom - innerHeight); } if (width < innerWidth) { if (left < 0) st.left = p(x -= left); if (right > innerWidth) st.left = p(x -= right - innerWidth); } } (this.receiveMessage = msg => { var {src, width, height, left, top} = msg.data; image.src = src; left -= mozInnerScreenX; top -= mozInnerScreenY; set(width, height, x = left, y = top); st.display = "block"; container.onwheel(null, initialZoom); window.addEventListener("mousedown", hide, {once: true, capture: true}); })(msg); }, handleEvent(e) { if (!gContextMenu.onImage) return; var menuitem = document.createXULElement("menuitem"); menuitem.setAttribute("label", "Увеличить размер"); menuitem.className = "menuitem-iconic"; menuitem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADZElEQVR42oXSe0xbVRwH8N8597a35e7SAmUFukGhY66AMiNzw4GvTCQLCssc4pQsmTOa+ERMlrktW1zigpnEuWn8x2eMmiVGMBDCFjS+cJHEDIk8RoSNV1+3tLWX3t72nnO8sETJFrfvP7/k5Pw+Ob9fDoLrYi8ow9GFUbq+5aRLrGraqQcX6hlF2wkFEWn6EDIJAyQy9+3VT58cWb6PrmvmjGZS/FSHlxbXtbtLobGqJlPKMhNepWb0V8hKpi8FNd/gzCCogbdmvtg/8C9gz9+Eor5x5nn2tDOZ98Dx2i3C/uYai9mOGCxiDQIIg1/PgUCEhyvDMox9PXYBkPzaaoAzAFL0yle7ShtqO/eWJ9w1vJ1oGsVzYhTNATMQG4Q1G40ldDw6PB339fs7VgMmA0jnHfioo6F9Z3tDYYJzKSZKMYcDvAILiICfZUNYEYFixMKpKBk8MfTTasBsACnngU/6Wg4+VL/VFSOmBHAYY1BAhzAvgmyMEIkh0EUOBD1Eu49eStwA5D3z4TcPv9TYdHvxEhXSGgaEIMkJkKAS+ONmSKYolOVqMBlRSd8bv8v/AQXlJoiHUE5rZ1tFa/Nhj1uVrCaNMoQxYSaIqDxAGqAuQ2XZ1iS8HUTpkZMXe1eATOdtiCcJblGe1a3PnWp0uEvfv3tbeX5RhSet/q3wxh6xgAncZUmw2hxEryQx9/LHE7I2RV5HNudGFAtcZsuQd919u/kiz56JOwobcjd6xerqKnB4HIB4RvMzCM1DGj8X0GD64pL2Xdf850z+4djKC8wl24XUpj1P75sdfe/+sSHoq3uQnSuwa+s2Vy5uubd2jQWUTAYchJK8HpyIzvv7p/rMkV/OzPeeGEWi+x6LufiR573h8VO7Zr4n9fEZNeiqXHOofFvPsKPkS1fKsX5JU6uNZQh8Wh/hRcuvOC3/fLXrcGj52yOo7zzU9udvbzbN9uglggK2MhsnvfiE0tY9tfed7vM98D+x53tx1DdG0Z2b97Ejf3SRSiGGCysyENvdoipZa4+/8NmPp8+N+Ei2ZEVpQhG71rdcqFFozD+xcoQugFUvlDS8wWsl8Uebk5C79ujjHwyc6R/309ysDBRauEzhJkG9ErAdG0xEe6yVkwqcr+549/zZgcmQ7pAEkH2TDG6RfwCoJI0uEWJP5QAAAABJRU5ErkJggg=="); menuitem.setAttribute("oncommand", "handleCommand();"); e.target.append(menuitem); addDestructor(() => menuitem.remove()); menuitem.handleCommand = () => this.cmd(); this.handleEvent = () => menuitem.hidden = !gContextMenu.onImage; }, cmd() { var msg = this.msg = "UCF:GetImageScreenRectForMosuseZoom"; var code = `(targetIdentifier => { var image = ChromeUtils.import("resource://gre/modules/ContentDOMReference.jsm") .ContentDOMReference.resolve(targetIdentifier); var mm = image.ownerGlobal.docShell.messageManager; var rect = image.getBoundingClientRect(); var win = image.ownerGlobal; var x = rect.left, y = rect.top; var parentFrame = win.frameElement; while (parentFrame) { win = parentFrame.ownerGlobal; let cstyle = win.getComputedStyle(parentFrame); let framerect = parentFrame.getBoundingClientRect(); x += framerect.left + parseFloat(cstyle.borderLeftWidth) + parseFloat(cstyle.paddingLeft); y += framerect.top + parseFloat(cstyle.borderTopWidth) + parseFloat(cstyle.paddingTop); parentFrame = win.frameElement; } x += win.mozInnerScreenX; y += win.mozInnerScreenY; var fullZoom = win.windowUtils.fullZoom; mm.sendAsyncMessage("${msg}", { src: image.currentSrc, left: x * fullZoom, top: y * fullZoom, width: rect.width * fullZoom, height: rect.height * fullZoom, } ); })(`; messageManager.addMessageListener(msg, this); (this.cmd = () => { var {osPid} = gContextMenu.actor.manager.browsingContext.currentWindowGlobal; if (osPid == -1) osPid = Services.appinfo.processID; for(var ind = 0, len = Services.ppmm.childCount; ind < len; ind++) { var pmm = Services.ppmm.getChildAt(ind); if (pmm.osPid == osPid) break; } pmm.loadProcessScript("data:;charset=utf-8," + encodeURIComponent( code + JSON.stringify(gContextMenu.targetIdentifier) + ")" ), false); })(); } }, false, document.getElementById("contentAreaContextMenu") || 1);
Отредактировано ВВП (16-10-2021 10:22:27)
Отсутствует
Приветствую всех! Как прочитать CSS (текстовый файл) в переменную? Данный код не работает:
var reader = new FileReader(); reader.readAsText('chrome://user_chrome_files/content/custom_scripts/ucf_Reader.css'); var green = reader.result;
Второй вопрос: перестал работать CSS, переключающий стиль на любой странице на более подходящий для чтения. Остаётся только зелёный фон, а должен меняться и фон и текст.
/*AGENT_SHEET*/ @-moz-document url-prefix("http"), url-prefix("https"), url-prefix("ftp"), url-prefix("file") { html *, html { background: #ccd1d1 !important; text-shadow: none !important; color: #000000 !important; -moz-border-top-colors: #8FBC8F !important; -moz-border-bottom-colors: #8FBC8F!important; -moz-border-left-colors: #8FBC8F !important; -moz-border-right-colors: #8FBC8F !important; } code, pre, input, samp, kbd, var, dfn,.postright { -moz-appearance: none !important; background-color: #BADBAD !important; } input, select, textarea, button { -moz-appearance: none !important; border: 1px solid #BADBAD !important; background-color: #BADBAD !important; } .codebox, BLOCKQUOTE, TEXTAREA, .spoiler { -moz-border-top-colors: #444 !important; -moz-border-bottom-colors: #444 !important; -moz-border-left-colors: #444 !important; -moz-border-right-colors: #444 !important; } }
try { CustomizableUI.createWidget({ tooltiptext: `ЛКМ: Reader`, type: "custom", id: "ucf_Reader", label: "Reader", localized: false, onBuild(doc) { var trbn = doc.createXULElement("toolbarbutton"); trbn.id = this.id; trbn.tooltipText = this.tooltiptext; trbn.label = this.label; trbn.className = "toolbarbutton-1 chromeclass-toolbar-additional"; trbn.setAttribute("context", false); trbn.style.setProperty("list-style-image", 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACS0lEQVR4Xt1VIZCkMBBcGYlERiKRSCQSuTISiUQiVyJXIle8QCKRSOTJkyterDtU8t1cpipVl937f3mpmkuupnt6MjNhTz9v1XWdYi1Jkjit9YilXuGBGYDfySH3WwEAR2xODCLdi+BtiCX32+yVUg8cd5BvJPH/WGZVVRF790lM5ITYqGVZZkhAeVbnnOIOkivLMosIZPARu2ERu5DrY8QXQFNYFgTWsOoZviiKSsSlXBCan5VH84qwXUj/YuSAK2XSsYZJeZb/nUByfQWamHOmM8/z3hiTNU2T/q1A27YpOeTGysSGHeWRqZGrYuwm+J6Wiz5OkHDCGIwZn2eaUnJmNnfUN4/UPIfvPcahMeaX2qVa2/Y62mHdbD/NNitKK2OLF52gBAWNZ6yVPmKIJYdcxgh66buPRwKCI2janZ0eznEf3x9W57n1r3TjHp7pIybkUAjixH1Oo0xPZZoD+Ov37sRIaIbrIRAz+oi53T/x3MlBLEnKnND9leCW4IcIfBzGrIZlFYEd5TE0nmH0kQNsIIAYrU8Kk7id8Gf9zGZANqHAAXaXeQlrGvaMvi8C4a0ZmyU6E1zWZ1/LAyhgZy6D1H0QAX+m78AInlwKlOfzIcDYbLJ8Ilx/m+wcNOy6vXEqnH+ApQj4s6OPGGkyuYzBWPJl9RnpngSF7tdtZzuAzOUSjtwU+d2YvAixB4dcxvDZ9+FTVyDcggmxwUNbi6JIBRvcIqUvxoH42HWdiv0eNFB+4xWx32E9xJMX36CEGGI5++BvjHH6UesPIe4VKP0pWeUAAAAASUVORK5CYII=")', "important"); trbn.addEventListener("click", function(e) { var win = e.view; if (e.button == 0) { var green = ` @-moz-document url-prefix("http"), url-prefix("https"), url-prefix("ftp"), url-prefix("file") { html *, html { background: #ccd1d1 !important; text-shadow: none !important; color: #000000 !important; -moz-border-top-colors: #8FBC8F !important; -moz-border-bottom-colors: #8FBC8F!important; -moz-border-left-colors: #8FBC8F !important; -moz-border-right-colors: #8FBC8F !important; } code, pre, input, samp, kbd, var, dfn,.postright { -moz-appearance: none !important; background-color: #BADBAD !important; } input, select, textarea, button { -moz-appearance: none !important; border: 1px solid #BADBAD !important; background-color: #BADBAD !important; } .codebox, BLOCKQUOTE, TEXTAREA, .spoiler { -moz-border-top-colors: #444 !important; -moz-border-bottom-colors: #444 !important; -moz-border-left-colors: #444 !important; -moz-border-right-colors: #444 !important; } a:link { color: #300090 !important; } a:visited { color: #489412 !important; } a:active { color: #d81e1e !important; } a:hover { color: #d81e1e !important; } }`; var sss = this.sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); var uri = this.uri = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService).newURI("data:text/css,"+ encodeURIComponent(green),null,null); function setStyleForPages( reason ) { var style = sss.sheetRegistered(uri, sss.AGENT_SHEET); style ? sss.unregisterSheet(uri, sss.AGENT_SHEET) : sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); }; setStyleForPages(); return; } }, false); return trbn; }, }); } catch(e) {}
Отсутствует
Приветствую всех! Есть папка по пути C:\ФАЙЛЫ нужно вывести true или false в зависимости от того есть ли файл(ы) в папке. Папки не в счёт. Заранее благодарю!
Отредактировано Senflex (16-10-2021 12:21:41)
Отсутствует
Как прочитать CSS (текстовый файл) в переменную? Данный код не работает
Интересно, зачем бы это могло понадобиться.
FileReader здесь совсем неудобен. Мало того, что ему
в качестве аргумента нужен Blob или File, так он ещё и читает асинхронно.
Можно так:
var green = Cu.readUTF8URI(Services.io.newURI("chrome://user_chrome_files/content/custom_scripts/ucf_Reader.css"));
Есть папка по пути C:\ФАЙЛЫ нужно вывести true или false в зависимости от того есть ли файл в папке.
var result = false, en = FileUtils.File("C:\\ФАЙЛЫ").directoryEntries; while(en.hasMoreElements()) if ((result = en.getNext().QueryInterface(Ci.nsIFile).isFile())) break; alert(result);
Отсутствует
Dumby
Как сюда Ваш код прилепить? this.onclick = e => e.button != 1 || gShowPopup(this); ....Тут reload идет на СКМ ...Чет знает зачем.
/*Initialization Code*/ var src = "gBrowser.addTab = " + gBrowser.addTab.toString() .replace(/^(?!function )/, "function "); this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() }; this.tooltipText = "Л: См. ПАРОЛИ\nП: См. КУКИ"; (obj => { this.setAttribute("context", ""); this.onclick = e => obj[e.button < 2](e); })({ true(e) { var domain = this.domain(); if (!domain) return; this.cookies(domain); this.webappstore(domain); this.macromedia(); if (e.button) for(var br of gBrowser.browsers) try { this.domain(br) == domain && br.reload(); } catch(ex) {} }, false(e) { e.ctrlKey || e.shiftKey ? gShowPopup(self) : this.window(); }, domain(br = gBrowser.selectedBrowser, res) { try { res = new URL(br.currentURI.spec).hostname; res = res.includes(".") ? Services.eTLD.getBaseDomainFromHost(res) : undefined; } finally {return res;} }, remove(...args) { (this.remove = Services.cookies.remove.length == 4 ? Services.cookies.remove : (h, n, p, a) => Services.cookies.remove(h, n, p, false, a) )(...args); }, cookies(domain, has) { for(var {host, name, path, originAttributes, rawHost} of ( Services.cookies.enumerator || Services.cookies.cookies )) Services.eTLD.hasRootDomain(rawHost, domain) && this.remove(host, name, path, originAttributes); }, webappstore(domain) { var db = FileUtils.getFile("ProfD", ["webappsstore.sqlite"]); var conn = Services.storage.openDatabase(db); conn.executeSimpleSQL(`DELETE FROM webappsstore2 WHERE scope LIKE "%${ domain.split("").reverse().join("") + "." }%"`); conn.close(); }, macromedia() { var dir = Services.dirsvc.get("AppData", Ci.nsIFile); dir.append("Macromedia"); dir.exists() && dir.isDirectory() && dir.remove(true); dir.create(dir.DIRECTORY_TYPE, 0o755); }, get sdm() { this.url = "chrome://browser/content/preferences/dialogs/siteDataSettings.x" + (parseInt(Services.appinfo.platformVersion) <= 71 ? "ul" : "html"); delete this.sdm; return this.sdm = ChromeUtils.import( "resource:///modules/SiteDataManager.jsm" ).SiteDataManager; }, async window() { var domain = this.domain(); var win = Services.wm.getMostRecentWindow("Browser:SiteDataSettings"); win && win.close(); await this.sdm.updateSites(); win = openDialog(this.url, "_blank", ""); if (!domain) return; await new Promise(resolve => win.addEventListener("DOMContentLoaded", resolve, {once: true}) ); var list = win.document.getElementById("sitesList"); list.clearSelection = () => { delete list.clearSelection; list.selectedIndex = 0; list.focus(); } win.document.getElementById("searchBox").inputField.editor .QueryInterface(Ci.nsIPlaintextEditor).insertText(domain); } });
Отсутствует
.
Отредактировано ALEX_45_ORP (16-10-2021 14:46:30)
Win 10х64
Отсутствует
Тут reload идет на СКМ ...Чет знает зачем
Что ещё за зачемки, эту просили перерисовать, вот и идёт.
прилепить
Ну, например, если много не менять, то удалить это:
if (e.button) for(var br of gBrowser.browsers) try {
this.domain(br) == domain && br.reload();
} catch(ex) {}
И после true(e) { добавить
if (e.button) return gShowPopup(self);
Отсутствует
Dumby
И после true(e) { добавить
if (e.button) return gShowPopup(self);
Вроде так и делал , так да не так...Благодарю. Кстати, как культурно избавиться от trash в папке extensions ? Рихтанул XPIProvider.jsm . Избавился от features в профиле, но эта шняга(trash) иногда вылазит. А в ней опять мутные аддоны...
Отредактировано ВВП (16-10-2021 18:19:50)
Отсутствует
Интересно, зачем бы это могло понадобиться. «Как прочитать CSS (текстовый файл) в переменную?»
Чтобы кнопка переключения стиля страницы подгружала внешний CSS, который можно было бы изменять.
Если содержание CSS встроено в скрипт, то при каждом изменении скрипта нужно пересоздавать кэш быстрого запуска.
Отсутствует
Избавился от features в профиле, но эта шняга(trash) иногда вылазит. А в ней опять мутные аддоны...
Не знаю, у меня нет в профиле features. А от «мутных аддонов»,
возможно, избавит DisableSystemAddonUpdate в policies.json
Чтобы кнопка переключения стиля страницы подгружала внешний CSS, который можно было бы изменять.
Я не вижу здесь со стороны браузера какого-то отказа читать CSS самому.
(async () => CustomizableUI.createWidget({ label: "Reader", tooltiptext: "ЛКМ: Reader", id: "ucf_Reader", localized: false, onCreated(btn) { var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); var args = [Services.io.newURI("chrome://user_chrome_files/content/custom_scripts/ucf_Reader.css"), sss.AGENT_SHEET]; var reg = () => (this.flag = !this.flag) ? sss.loadAndRegisterSheet(...args) : sss.unregisterSheet(...args); (this.onCreated = btn => { btn._handleClick = reg; btn.style.setProperty("list-style-image", 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACS0lEQVR4Xt1VIZCkMBBcGYlERiKRSCQSuTISiUQiVyJXIle8QCKRSOTJkyterDtU8t1cpipVl937f3mpmkuupnt6MjNhTz9v1XWdYi1Jkjit9YilXuGBGYDfySH3WwEAR2xODCLdi+BtiCX32+yVUg8cd5BvJPH/WGZVVRF790lM5ITYqGVZZkhAeVbnnOIOkivLMosIZPARu2ERu5DrY8QXQFNYFgTWsOoZviiKSsSlXBCan5VH84qwXUj/YuSAK2XSsYZJeZb/nUByfQWamHOmM8/z3hiTNU2T/q1A27YpOeTGysSGHeWRqZGrYuwm+J6Wiz5OkHDCGIwZn2eaUnJmNnfUN4/UPIfvPcahMeaX2qVa2/Y62mHdbD/NNitKK2OLF52gBAWNZ6yVPmKIJYdcxgh66buPRwKCI2janZ0eznEf3x9W57n1r3TjHp7pIybkUAjixH1Oo0xPZZoD+Ov37sRIaIbrIRAz+oi53T/x3MlBLEnKnND9leCW4IcIfBzGrIZlFYEd5TE0nmH0kQNsIIAYrU8Kk7id8Gf9zGZANqHAAXaXeQlrGvaMvi8C4a0ZmyU6E1zWZ1/LAyhgZy6D1H0QAX+m78AInlwKlOfzIcDYbLJ8Ilx/m+wcNOy6vXEqnH+ApQj4s6OPGGkyuYzBWPJl9RnpngSF7tdtZzuAzOUSjtwU+d2YvAixB4dcxvDZ9+FTVyDcggmxwUNbi6JIBRvcIqUvxoH42HWdiv0eNFB+4xWx32E9xJMX36CEGGI5++BvjHH6UesPIe4VKP0pWeUAAAAASUVORK5CYII=")', "important"); })(btn); } }))();
Отсутствует
Отсутствует
Dumby,
Пожалуйста, если будет время и настроение, адаптируйте кнопку для Firefox 93.
const prefName = "Изменить уровень яркости экрана"; function getDarkLevel() { try { return cbu.ps.getIntPref(prefName); } catch (ex) { return 0; } } function getOpacity(aDarkLevel) { var opacity = 0; if (aDarkLevel === 50) opacity = aDarkLevel / 100; else opacity = (100 - aDarkLevel) / 100; return opacity; } function mouseWheel(aEvent) { var darkLevel = getDarkLevel(); if (aEvent.detail > 0) { if (darkLevel < 100) darkLevel++; else aEvent.stopPropagation(); } else { if (darkLevel > 0) darkLevel--; else aEvent.stopPropagation(); // else stop (min = 0) } gBrowser.style.opacity = getOpacity(darkLevel); cbu.ps.setIntPref(prefName, darkLevel); } this.onclick = function onclick(aEvent) { if (aEvent.button !== 1) return; gBrowser.style.opacity = "1"; cbu.ps.setIntPref(prefName, 0); } this.addEventListener("DOMMouseScroll", mouseWheel); var browser = document.getElementById("browser"); browser.style.backgroundColor = "black"; gBrowser.style.opacity = getOpacity(getDarkLevel()); this.tooltipText = this.name + "\n" + this.Help;
Отсутствует
Dumby
Забыл как...Снова кнопку закачку поставил с YT.dl.exe ...Но закачка идет в каталог браузера, а надо там где сам D:\\Загрузки\\видео\\youtube-dl.exe
(func => { var sysPlayerName = "YTPlayer"; var path = "D:\\Загрузки\\видео\\youtube-dl.exe"; var videoMoved = "Видео перенесено в " + sysPlayerName; var noFound = "Не найдено видео на странице, доступное для переноса в " + sysPlayerName; this.image = "moz-icon://file://" + path; this.label = "Открыть видео в " + sysPlayerName; this.tooltipText = "Л: Видео в плеер\nП: Видео из Clipboard"; this._handleClick = () => { var msgName = _id + ":Player"; var listener = ({data}) => data ? run([data]) : notify(); var listener = ({data}) => data ? run([data], true) : notify(); messageManager.addMessageListener(msgName, listener); addDestructor(() => messageManager.removeMessageListener(msgName, listener)); var url = "data:charset=utf-8," + encodeURIComponent( `(${func})()`.replace("MSG_NAME", msgName) .replace("VIDEO_MOVED", encodeURIComponent(videoMoved)) .replace("CONFIRM", encodeURIComponent("Открыть ссылку в плеере ?")) ); (this._handleClick = () => gBrowser.selectedBrowser.messageManager.loadFrameScript(url, false))(); } this.onclick = e => e.button != 1 || gShowPopup(this); this.oncontextmenu = e => { if (e.ctrlKey || e.shiftKey || e.altKey) return; e.preventDefault(); custombuttons.confirmBox(null, "Запустить плеер из буфера обмена ?", "Да", "Нет") && run([gClipboard.read(),]); } var popup = document.getElementById("contentAreaContextMenu"); addEventListener("popupshowing", { get hidden() { return !(gContextMenu.onLink || gContextMenu.onVideo || gContextMenu.onPlainTextLink); }, handleEvent() { if (this.hidden) return; var menuitem = document.createXULElement("menuitem"); for(var args of Object.entries({ image: self.image, oncommand: "play()", class: "menuitem-iconic", label: "Открыть в " + sysPlayerName })) menuitem.setAttribute(...args); menuitem.play = () => play(gContextMenu.linkURL || gContextMenu.mediaURL); document.getElementById("context-savelink").before(menuitem); addDestructor(() => menuitem.remove()); this.handleEvent = e => { if (e.target == popup) menuitem.hidden = this.hidden; } } }, false, popup || 1); var play = link => custombuttons.confirmBox(null, "Открыть ссылку в плеере ?", "Да", "Отмена") && run([link]); /* var run = args => { var file = FileUtils.File(path); (run = args => { if (!file.exists()) return custombuttons.alertBox("File not exists!", path); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(file); process.runwAsync(args, args.length); })(args); } */ var run = (...a) => { var file = FileUtils.File(path); (run = (args, quit) => { if (!file.exists()) return custombuttons.alertBox("File not exists!", path); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(file); process.runwAsync(args, args.length); })(...a); } var notify = () => { var name = _id + "-noFound"; var as = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService); (notify = () => setTimeout(as.closeAlert, 1150, name, as.showAlertNotification( "chrome://global/skin/icons/question-48.png", "", noFound, false, "", null, name )))(); } })(() => { var found, videoMoved, SEND = msg => { found = true; if (!msg || Cc["@mozilla.org/embedcomp/prompt-service;1"] .getService(Ci.nsIPromptService) .confirm(content, null, decodeURIComponent("CONFIRM")) ) { if (msg) videoMoved = decodeURIComponent("VIDEO_MOVED"); sendAsyncMessage("MSG_NAME", msg); } else return true; } var YoutubeID = /(?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})(?:\W|$)/; var tmp = '', tmpp = '', innerA = '<div style="display:block!important;color:#00ff00!important;width:250px!important;font:bold 16px serif!important;z-index:999!important;opacity:1!important;visibility: visible!important;', innerB = 'left:5px!important;position:absolute!important;height:auto!important;box-sizing:border-box!important;padding:5px!important;margin:5px!important;', //stopPl = "javascript:(function(){v=document.getElementById('movie_player');if(v){v.stopVideo()}else{v=document.getElementsByTagName('video');if(v){v[0].src='';try{v[0].load()}catch(e){}};}})();", ytIMGouter = function (ytID) { return '<div width="100%"><br /><a target="_blank" href="https://www.youtube.com/watch?v=' + ytID + '"><img src="https://i.ytimg.com/vi/' + ytID + '/hqdefault.jpg"></a><br />' + innerA + 'background-color:black!important;position:relative!important;bottom:20px!important;"> ' + videoMoved + '</div><br /></div><br />' }, handlWin = function (currentWin) { tmp = ''; var elem = currentWin.document.getElementsByTagName('video'), currLoc = currentWin.location; if (elem.length > 0) { if (currLoc.hostname.indexOf('youtu') != -1 && (tmp = currLoc.toString().match(YoutubeID)) && tmp[1].length == 11) { if (SEND('https://www.youtube.com/watch?v=' + tmp[1])) return; videoMovedbox = currentWin.document.createElement('videoMoved'); videoMovedbox.innerHTML = innerA + innerB + 'top:-15px!important;"><b>' + videoMoved + '</b></div>'; //loadURI(stopPl); (function(d){var v=d.getElementById('movie_player');if(v){try{v.stopVideo()}catch{}} else{v=d.getElementsByTagName('video');if(v[0]){v[0].src='';try{v[0].load()}catch{}};}})(currentWin.document); currentWin.document.getElementById('eow-title').appendChild(videoMovedbox); return true; }; for (i = 0; i < elem.length; i++) { if (((tmp = getSrc(elem[i].parentNode, currLoc)) && tmp.length > 2) || (i == 0 && currentWin.document.body.innerHTML.substring(0, 7) == '<video ' && (tmp = currLoc.toString()))) { if (SEND(tmp)) return; videoMovedbox = currentWin.document.createElement('videoMoved'); videoMovedbox.innerHTML = innerA + innerB + 'top:20px!important;background-color:black!important;">' + videoMoved + '</div>'; if (currLoc.hostname == 'www.youtube.com') { elem[i].parentNode.parentNode.appendChild(videoMovedbox); } else { elem[i].parentNode.appendChild(videoMovedbox); }; elem[i].src = ''; try { elem[i].load() } catch (e) {}; return true; } } }; currentWin._elems = currentWin.document.getElementsByTagName('iframe'); if (currentWin._elems.length > 0) { for (currentWin._iCounter = 0; currentWin._iCounter < currentWin._elems.length; currentWin._iCounter++) { if ((currentWin._elems[currentWin._iCounter].src.indexOf('youtube.com') > -1) && (tmp = currentWin._elems[currentWin._iCounter].src.match(YoutubeID)) && (tmp[1].length == 11)) { if (SEND('https://www.youtube.com/watch?v=' + tmp[1])) return; currentWin._elems[currentWin._iCounter].outerHTML = ytIMGouter(tmp[1]); return true; }; if (currentWin._elems[currentWin._iCounter].clientWidth > 80 && currentWin._elems[currentWin._iCounter].clientHeight > 40 && handlWin(currentWin._elems[currentWin._iCounter].contentWindow)) return true; } }; elem = currentWin.document.getElementsByTagName('object'); currLoc = currentWin.location; if (elem.length == 0) { elem = currentWin.document.getElementsByTagName('embed') }; if (elem.length > 0) { for (i = 0; i < elem.length; i++) { if (elem[i].innerHTML.indexOf('youtu') != -1 && (tmp = elem[i].innerHTML.match(YoutubeID)) && tmp[1].length == 11) { if (SEND('https://www.youtube.com/watch?v=' + tmp[1])) return; elem[i].outerHTML = ytIMGouter(tmp[1]); return true; } else { if (elem[i].clientWidth > 80 && elem[i].clientHeight > 40) { if (((tmp = getSrc(elem[i].parentNode, currLoc)) || (tmp = getLink(elem[i], currLoc))) && tmp.length > 2) { if (SEND(tmp)) return; elem[i].outerHTML = innerA + 'background-color:black!important;bottom:20px!important;"> ' + videoMoved + '</div>'; return true; }; }; } }; }; return false; }; function restProtHost(lnkR, curLoc) { if (lnkR.length == 0) return ''; let tr = lnkR.replace(/^:\/\//, curLoc.protocol + "//"); if (!tr.match(/^https?:\/\//i)) { lnkR = tr.replace(/^\/+/, ''); if (lnkR.split('/')[0].split('?')[0].split('#')[0].toLowerCase().match(/^(?:[-a-z\d]+\.)+[a-z\d]{2,6}$/)) { tr = curLoc.protocol + '//' + lnkR; } else { tr = curLoc.protocol + '//' + curLoc.host + "/" + lnkR; } }; return tr; }; function getSrc(vobj, currentLoc) { var t = '', tt = ''; if ((((t = vobj.innerHTML.match(/<video.*?\ssrc=(?:(?:'([^']*)')|(?:"([^"]*)")|([^\s]*))/i)) && (t) && (tt = t[1] || t[2] || t[3]) && tt.indexOf('blob:') == -1) || ((t = vobj.innerHTML.match(/<source.*?\ssrc=(?:(?:'([^']*)')|(?:"([^"]*)")|([^\s]*)).*?\stype=['"]?video\//i)) && (t) && (tt = t[1] || t[2] || t[3]))) && tt.length > 2 && tt.indexOf('blob:') == -1) { if (tt.indexOf(".mp4/?") == -1) { tt = tt.replace(/&/g, "&") }; t = restProtHost(tt, currentLoc); return t; }; return ''; }; function getLink(obj, curLocation) { if (!obj || !obj.tagName) return ''; q = obj.tagName.toLowerCase(); var getParam = function (e, n) { var v = '', r = new RegExp('^(' + n + ')$', 'i'), param = e.getElementsByTagName('param'); for (var igp = 0, p; p = param[igp]; igp++) { if (p.hasAttribute('name') && p.getAttribute('name').match(r)) { v = p.getAttribute('value'); break }; }; return v; }; var restPath = function (f, s) { return (f.substring(0, 4) == 'http') ? f : s.replace(/[#?].*$/, '').replace(/[^\/]*$/, f) }; function videoLinkExtract(fl) { alert(fl); var linkArr = [], outLinks = [], jj = 0, lba = '', lbb = '', decodeURL = gBrowser.currentURI.spec; { try { return decodeURIComponent(s) } catch (e) { return unescape(s) } }; for (var ij = 0; ij < 3; ij++) { lba = lba + String.fromCharCode(parseInt((Math.random() * 15 + 1) + '', 10)); lbb = lbb + String.fromCharCode(parseInt((Math.random() * 15 + 16) + '', 10)); }; function pushWithMerit(lnk) { var merit = -11; if (lnk.match(/^https?:\/\//i)) merit = merit + 40; if (outLinks.length == 0) merit = merit + 1; if (lnk.match(/^\//)) merit = merit + 7; if (lnk.match(/^\/\//)) merit = merit + 30; if (lnk.match(/240p([^a-z]|$)/i)) merit = merit + 1; if (lnk.match(/[^a-z]240([^a-z0-9]|$)/i)) merit = merit + 1; if (lnk.match(/360p([^a-z]|$)/i)) merit = merit + 3; if (lnk.match(/[^a-z]360([^a-z0-9]|$)/i)) merit = merit + 3; if (lnk.match(/480p([^a-z]|$)/i)) merit = merit + 5; if (lnk.match(/[^a-z]480([^a-z0-9]|$)/i)) merit = merit + 5; if (lnk.match(/720p([^a-z]|$)/i)) merit = merit + 7; if (lnk.match(/[^a-z]720([^a-z0-9]|$)/i)) merit = merit + 7; if (lnk.match(/\.mp4([^a-z]|$)/i)) merit = merit + 8; if (lnk.match(/_hd([^a-z]|$)/i)) merit = merit + 6; if (lnk.match(/\.(jpg|xml)([^a-z]|$)/i)) merit = merit - 40; if (merit > 0) outLinks.push(merit + lba + lnk); Services.console.logStringMessage('merit:' + merit + ' lnk->' + lnk); }; linkArr.push(fl); while (linkArr.length > jj && jj < 30) { var testPaths = []; testPaths = linkArr[jj].split(/(\.(?:flv|mp4|m3u8))/i); if (testPaths[testPaths.length - 1] == '') testPaths.pop(); for (k = 1; k < testPaths.length; k = k + 2) { if (testPaths[k - 1].indexOf(lba) > -1) { pref = testPaths[k - 1]; } else { var testAboutDom = testPaths[k - 1].toLowerCase().split(/(https?:\/\/)/); if (testAboutDom[testAboutDom.length - 1] == '') testAboutDom.pop(); var pTest = testAboutDom[testAboutDom.length - 1].split(/(\?[^\?]*?&)/); if (pTest.length > 2) { pTest.pop(); pTest.pop(); }; testAboutDom[testAboutDom.length - 1] = pTest.join(''); pref = testPaths[k - 1].substring(testAboutDom.join('').lastIndexOf("&") + 1); }; t2 = pref.lastIndexOf(lbb); if (t2 > -1) { pref = pref.substring(t2 + 3); } else { t2 = pref.lastIndexOf('{"'); if (t2 > -1) pref = pref.substring(t2 + 2); t2 = pref.lastIndexOf('["'); if (t2 > -1) pref = pref.substring(t2 + 2); t2 = pref.lastIndexOf(',"'); if (t2 > -1) pref = pref.substring(t2 + 2); t2 = pref.toLowerCase().lastIndexOf('"http://'); if (t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf('"https://'); if (t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf(',http://'); if (t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf(',https://'); if (t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf(';http'); if (t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf('*https://'); if (t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf(' or '); if (t2 > -1) pref = pref.substring(t2 + 4); pref = pref.substring(pref.split('/')[0].toLowerCase().split('%2f')[0].lastIndexOf('=') + 1); } if (pref.length > 0) { if (pref.split('?')[0].toLowerCase().match(/%[2-3][0-9a-f]/)) { t2 = pref.indexOf('"') if (t2 > -1) pref = pref.substring(t2 + 1); suff = testPaths[k + 1] ? testPaths[k + 1].split('&')[0].split('"')[0].split(';')[0].split(/,http/i)[0] : ''; if ((suff != testPaths[k + 1]) || (testPaths.length < k + 3)) { if (testPaths.length > k + 1) { testPaths[k + 1] = ((pref == testPaths[k - 1]) ? '' : '&') + testPaths[k + 1].substr(suff.length) }; t2 = pref.lastIndexOf(lba); if (t2 > -1) pref = pref.substring(t2 + 3) linkArr.push(decodeURL(pref + testPaths[k] + suff)); } else { testPaths[k + 1] = (pref == testPaths[k - 1] ? '' : lbb) + pref + testPaths[k] + suff } } else { suff = testPaths[k + 1] ? testPaths[k + 1].split(';')[0].split('"]')[0].split('"}')[0].split('",')[0].split(/,https?:\/\//i)[0].split('*https://')[0].split(' or ')[0] : ''; t2 = suff.indexOf('&'); if ((t2 > -1) && (pref != testPaths[k - 1])) { if (t2 == 0) suff = ''; if (suff.charAt(0) != '?') suff = suff.split(/(&[^&]+=https?:\/\/)/i)[0]; }; if ((suff != testPaths[k + 1]) || (testPaths.length < k + 3)) { if (testPaths.length > k + 1) { testPaths[k + 1] = ((pref == testPaths[k - 1]) ? '' : '&') + testPaths[k + 1].substr(suff.length) }; t2 = pref.lastIndexOf(lba); if (t2 > -1) pref = pref.substring(t2 + 3); pushWithMerit(pref + testPaths[k] + suff); } else { testPaths[k + 1] = lba + (pref == testPaths[k - 1] ? '' : lbb) + pref + testPaths[k] + suff } } } }; jj = jj + 1; }; if (outLinks.length == 0) return ''; function srt(a, b) { a = parseInt(a.substr(0, a.indexOf(lba)), 10); b = parseInt(b.substr(0, b.indexOf(lba)), 10); if (a < b) return 1; if (a > b) return -1; return 0 }; outLinks.sort(srt); outLinks[0] = outLinks[0].substr(outLinks[0].indexOf(lba) + 3) if (outLinks[0].indexOf('_hq.mp4/?time=') > 0) outLinks[0] = outLinks[0].replace(/&/g, '&'); return outLinks[0]; }; if (!ol) return ''; //ol = ol.replace(/^:?\/\//, curLocation.protocol + "//"); //return restPath(ol, src); return restProtHost(ol, curLocation); }; try {handlWin(content);} finally {found || SEND();} }); var style = custombutton.buttonGetHelp(self).replace(/id/g, _id); var uri = makeURI('data:text/css,'+ encodeURIComponent(style)); var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); sss.loadAndRegisterSheet(uri, 0);
Почему только через ярлык ? D:\Загрузки\видео\youtube-dl.exe.lnk
Отредактировано ВВП (20-10-2021 16:04:31)
Отсутствует
Пожалуйста, если будет время и настроение, адаптируйте кнопку для Firefox 93.
Не, я не понимаю почему там что-то сделано именно так,
а описание не предоставленно.
Но можешь завернуть код следующим образом, и должно работать
(gBrowser => { // Здесь этот код })(document.getElementById("tabbrowser-tabpanels"));
((ovar, obs) => { this.appendChild(document.createElement("style")).append( "#tabbrowser-tabbox {background-color: black !important;}\n" + `#tabbrowser-tabpanels {opacity: var(${ovar}) !important;}` ); var pref = "CB.tabbrowser-tabpanels.opacity"; var gp = () => Services.prefs.getIntPref(pref, 100); var sp = val => Services.prefs.setIntPref(pref, val); var st = document.documentElement.style; (obs = () => st.setProperty(ovar, gp() / 100, "important"))(); Services.prefs.addObserver(pref, obs); this.onwheel = e => { var val = gp() + (e.deltaY < 0 ? 1 : -1); val < 0 || val > 100 || sp(val); } this.onauxclick = e => e.button != 1 || sp(100); addDestructor(reason => { st.removeProperty(ovar); Services.prefs.removeObserver(pref, obs); reason == "delete" && Services.prefs.clearUserPref(pref); }); })("--cb-tabbrowser-tabpanels-opacity");
Почему только через ярлык ?
Доку, видимо, стоит почитать.
For example for -o %(title)s-%(id)s.%(ext)s and an mp4 video with title youtube-dl test video and id BaW_jenozKcj,
this will result in a youtube-dl test video-BaW_jenozKcj.mp4 file created in the current directory.
Наверно можно и без ярлыка, если в коде (перед process.runwAsync) прописать
но это не то, что я могу проверить, сколько раз уже говорил.
Отредактировано Dumby (21-10-2021 15:35:16)
Отсутствует