egorsemenov06
Наверняка где то ошибку синтаксиса допустили, все там должно работать
СПАСИБО ЕЩЕ РАЗ!!!!!!!мой косяк дело в пути к скриптк было
Отсутствует
Vitaliy V. раз тут завал просьб, добавлю свои 3 копейки:
Просьба улучшить ucf_contextmenuopenwith для нормальной работы с yt-dlp:
1) в режиме "Открыть страницу в …" если в Clipboard только одна строка и текст заканчивается на .m3u8, то передавать его вместо %OpenURI
2) есть выделенный текст ? передать его вместо %OpenURI. Чтобы работало на moz-extension://, где Video DownloadHelper открывает «Детали» со ссылками.
(this.contextmenuopenwith = { _eventlisteners: [], menupage: {}, menulink: {}, init(that) { var attrimage = true; // true или false Добавить иконки (атрибут "image") или нет var submenu = false; // true или false Добавить подменю для пунктов или нет var prelabpage = false; // Добавить вначале "Открыть страницу в "; var prelablink = false; // Добавить вначале "Открыть ссылку в "; // [true или false Показывать пункт на странице или нет, true или false Показывать пункт на ссылках или нет, 'ID пункта', 'имя приложения', 'путь к приложению', 'аргументы через пробел (то что в двойных кавычках считается за один аргумент)', 'иконка (для Windows необязательно)'], var arrayWindows = [ // [true, true, 'edge', 'Microsoft Edge', 'C:\\Windows\\explorer.exe', '"microsoft-edge:%OpenURI "', 'moz-icon://file://C:\\ndows\\SystemApps\\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\\MicrosoftEdge.exe?size=16'], [true, true, 'videodownloader', '4K Downloader', 'C:\\Program Files (x86)\\4KDownload\\4kvideodownloader\\4kvideodownloader.exe', '%OpenURI'], // [true, true, 'potplayer', 'DAUM PotPlayer', 'C:\\Program Files\\PotPlayer\\PotPlayerMini64.exe', '%OpenURI'], // [true, true, 'vlc', 'VLC', 'C:\\Program Files\\VideoLAN\\VLC\\vlc.exe', '%OpenURI'], ]; var arrayLinux = [ // для Linux // [true, true, 'vlc', 'VLC', '/usr/bin/vlc', '%OpenURI', 'moz-icon://stock/vlc?size=menu'], // [false, true, 'thunderbird', 'Thunderbird', '/usr/bin/thunderbird', '-compose "to=%OpenURI"', 'moz-icon://stock/thunderbird?size=menu'], [true, true, 'yt-dlp', 'Скачать видео в yt-dlp', '/usr/bin/xterm', '-e "yt-dlp \'%OpenURI\'; beep; sleep 3"', 'moz-icon://stock/go-down?size=menu'], // терминал вашей Рабочей среды, в ~/.config/yt-dlp.conf указан каталог загрузки [false, true, 'mpv', 'Смотреть в MPV плеер', '/usr/bin/mpv', '--ytdl-format=bestvideo[height<=?720][fps<=?30]+bestaudio/best[height<=?720][fps<=?30] "%OpenURI"', 'moz-icon://stock/mpv?size=menu'], ]; var arrayMacos = [ // для MacOS // [true, true, 'downie', 'Скачать видео в Downie 4', '/usr/bin/open', '-b com.charliemonroe.Downie-4 %OpenURI', 'moz-icon://file:///Applications/Downie 4.app?size=16'], [true, true, 'yt-dlp', 'Найти/скачать видео: yt-dlp', '/usr/bin/osascript', `-e "tell app %quotTerminal%quot to activate do script %quotyt-dlp '%OpenURI' && say 'download complete'; exit%quot"`, 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAACNJREFUCNdjYH/AgBX9/89Q/4/B/g+D/A8G/g8gEeYDDIwNAIB7EDCcKCcMAAAAAElFTkSuQmCC'], // 'moz-icon://file:///System/Library/Image Capture/Support/Application/AutoImporter.app?size=16' [true, true, 'mpv', 'Смотреть в MPV плеер', '/usr/bin/open', '-n -a mpv --args --ytdl-format=bestvideo[height<=?720][fps<=?30]+bestaudio/best[height<=?720][fps<=?30] %OpenURI', 'moz-icon://file:///Applications/mpv.app?size=16'], [true, true, 'Safari', 'Обзор страницы в Safari', '/usr/bin/open', '-b com.apple.Safari %OpenURI', 'chrome://branding/content/icon32.png'], ]; var arrayOS, platform = AppConstants.platform, length; if (platform == "win") arrayOS = arrayWindows; else if (platform == "linux") arrayOS = arrayLinux; else if (platform == "macosx") arrayOS = arrayMacos; else return; if (!(length = arrayOS.length)) return; var addEventListener = this.addEventListener.bind(this); var popup = document.querySelector("#contentAreaContextMenu"); var create = evt => { if (evt.target != popup || gContextMenu.webExtBrowserType === "popup") return; popup.removeEventListener("popupshowing", create); var seppage = popup.querySelector("#context-sep-selectall") || popup.querySelector("#frame-sep") || popup.lastElementChild; var seplink = popup.querySelector("#context-sep-copylink") || popup.querySelector("#context-sep-open") || popup.firstElementChild; var fragpage = document.createDocumentFragment(), fraglink = document.createDocumentFragment(), _prelabpage = "", _prelablink = ""; if (length == 1) submenu = false; if (!submenu) _prelabpage = prelabpage ? "Открыть страницу в " : "", _prelablink = prelablink ? "Открыть ссылку в " : ""; arrayOS.forEach(item => { var id = item[2], name = item[3], path = item[4], arg = !item[5] ? "" : item[5]; if (!id || !name || !path) return; var iconpath = !item[6] ? (`moz-icon://file://${path}?size=16`) : item[6]; if (item[0]) { let menuitem_0 = document.createXULElement("menuitem"); menuitem_0.id = `open-current-page-with-${id}`; menuitem_0.className = "menuitem-iconic open-current-page-with-application"; menuitem_0.setAttribute("label", `${_prelabpage}${name}`); menuitem_0.applicationpath = path; menuitem_0.applicationarg = arg; if (attrimage) menuitem_0.setAttribute("image", iconpath); fragpage.append(menuitem_0); addEventListener(menuitem_0, "command", function page(event) { try { var target = event.currentTarget, arg = target.applicationarg, file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); file.initWithPath(target.applicationpath); if (!file.exists() || !file.isExecutable()) return; arg = (arg !== "") ? arg.split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/g).map(sp => { if (/%OpenURI/g.test(sp)) { let uri = gBrowser.selectedBrowser.currentURI.displaySpec; try { let _uri = ReaderMode.getOriginalUrl(uri); if (_uri) uri = Services.io.newURI(_uri).displaySpec; } catch(e) {} try { uri = decodeURIComponent(uri); } catch(e) {} return sp.replace(/^"|"$/g, "").replace(/%quot/g, '"').replace(/%OpenURI/g, uri); } return sp.replace(/^"|"$/g, "").replace(/%quot/g, '"'); }) : []; var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(file); process.runwAsync(arg, arg.length); } catch(e) {} }); } if (item[1]) { let menuitem_1 = document.createXULElement("menuitem"); menuitem_1.id = `open-link-with-${id}`; menuitem_1.className = "menuitem-iconic open-link-with-application"; menuitem_1.setAttribute("label", `${_prelablink}${name}`); menuitem_1.applicationpath = path; menuitem_1.applicationarg = arg; if (attrimage) menuitem_1.setAttribute("image", iconpath); fraglink.append(menuitem_1); addEventListener(menuitem_1, "command", function link(event) { try { var target = event.currentTarget, arg = target.applicationarg, file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); file.initWithPath(target.applicationpath); if (!file.exists() || !file.isExecutable() || !window.gContextMenu?.linkURI?.displaySpec) return; arg = (arg !== "") ? arg.split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/g).map(sp => { if (/%OpenURI/g.test(sp)) { let uri = gContextMenu.linkURI.displaySpec; try { let _uri = ReaderMode.getOriginalUrl(uri); if (_uri) uri = Services.io.newURI(_uri).displaySpec; } catch(e) {} try { uri = decodeURIComponent(uri); } catch(e) {} return sp.replace(/^"|"$/g, "").replace(/%quot/g, '"').replace(/%OpenURI/g, uri); } return sp.replace(/^"|"$/g, "").replace(/%quot/g, '"'); }) : []; var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(file); process.runwAsync(arg, arg.length); } catch(e) {} }); } }); that.unloadlisteners.push("contextmenuopenwith"); var funcpopupshowing, funcpopuphiding; if (!submenu) { seppage.after(fragpage); seplink.before(fraglink); funcpopupshowing = () => { var link = gContextMenu.onLink || gContextMenu.onMailtoLink; for(let arr of this._eventlisteners) { if (arr[2].name === "page") arr[0].hidden = link; else if (arr[2].name === "link") arr[0].hidden = !link; } }; funcpopuphiding = () => { for(let arr of this._eventlisteners) { if (arr[1] === "command") arr[0].hidden = true; } }; } else { if (fragpage.children.length) { let menu = this.menupage = document.createXULElement("menu"); menu.id = "open-current-page-with-submenu"; menu.className = "menu-iconic open-current-page-with-application"; menu.setAttribute("label", "Открыть страницу в..."); let menupopup = document.createXULElement("menupopup"); menupopup.append(fragpage); menu.append(menupopup); seppage.after(menu); } if (fraglink.children.length) { let menu = this.menulink = document.createXULElement("menu"); menu.id = "open-link-with-submenu"; menu.className = "menu-iconic open-link-with-application"; menu.setAttribute("label", "Открыть ссылку в..."); let menupopup = document.createXULElement("menupopup"); menupopup.append(fraglink); menu.append(menupopup); seplink.before(menu); } funcpopupshowing = () => { var link = gContextMenu.onLink || gContextMenu.onMailtoLink; this.menupage.hidden = link; this.menulink.hidden = !link; }; funcpopuphiding = () => { this.menupage.hidden = true; this.menulink.hidden = true; }; } funcpopupshowing(); addEventListener(popup, "popupshowing", e => { if (e.target != popup || gContextMenu.webExtBrowserType === "popup") return; funcpopupshowing(); }); addEventListener(popup, "popuphiding", e => { if (e.target != popup) return; funcpopuphiding(); }); }; popup.addEventListener("popupshowing", create); }, addEventListener(...arr) { var elm = arr[0]; if (!elm) return; elm.addEventListener(...arr.slice(1)); this._eventlisteners.push(arr); }, destructor() { for(let arr of this._eventlisteners) arr.shift().removeEventListener(...arr); delete this._eventlisteners; } }).init(this);
Отсутствует
если в Clipboard только одна строка и текст заканчивается на .m3u8
Ссылки с m3u не всегда так заканчиваются, может быть так .m3u8?бла-бла-бла, и почему только плейлисты m3u а просто медиа файлы и т.д.
Кстати для прямых ссылок на медиа и m3u не нужен yt-dlp, см. ниже пример копирования потока с FFmpeg, можно сразу конвертировать с заданным кодеком.
Короче сделал так, при зажатой клавише Shift ссылка берется из буфера, и ещё добавил аргумент %OpenClipboardURI можно добавить пункт для работы с буфером обмена, кстати на этом пункте зажатие клавиши Shift наоборот вызывает ссылку со страницы или выделенный текст.
Чтобы работало на moz-extension://, где Video DownloadHelper
А разве не работает на moz-extension:// там вроде только в popup отключено, короче не знаю проверь сам на Video DownloadHelper
Код упростил теперь один и тот же пункт для ссылок, страницы, выделенного, буфера
(this.contextmenuopenwith = { _eventListeners: [], init(that) { var attrimage = true; // true или false Добавить иконки (атрибут "image") или нет var submenu = true; // true или false Добавить подменю для пунктов или нет var selector = "#context-sep-open"; // селектор в контекстном меню перед которым добавлять пункты /* name: 'Название приложения', path: 'путь к приложению', * Необязательные параметры: args: `аргументы через пробел (то что в двойных кавычках считается за один аргумент)`, iconpath: 'иконка', */ var Linux = [ { name: 'VLC', path: '/usr/bin/vlc', iconpath: 'moz-icon://stock/vlc?size=menu', }, { name: 'Yt-dlp', path: '/usr/bin/konsole', // yt-dlp скачать видео предпочтительно .mp4 с кодеком hevc|h265|avc|h264 с разрешением <=1080 args: `--hold --workdir ~/Загрузки -e "yt-dlp -f %quotbv[height<=1080][ext=mp4][vcodec~='^(hevc|h265|avc|h264)']+ba[ext~='(aac|m4a)']/best[height<=1080][ext=mp4]/best[height<=1080]/best%quot %OpenURI"`, iconpath: 'moz-icon://stock/youtube-dl?size=menu', }, { name: 'FFmpeg', path: '/usr/bin/konsole', // ffmpeg копировать поток видео аудио в контейнер mp4 args: `--hold --workdir ~/Загрузки -e "ffmpeg -i %OpenClipboardURI -c copy -f mp4 video.mp4"`, iconpath: 'moz-icon://stock/utilities-terminal?size=menu', }, ]; var Windows = [ ]; var Macos = [ ]; var arrOS, platform = AppConstants.platform, length; if (platform === "linux") arrOS = Linux; else if (platform === "win") arrOS = Windows; else if (platform === "macosx") arrOS = Macos; else return; if (!(length = arrOS.length)) return; var addListener = (...arr) => { var elm = arr[0]; if (!elm) return; elm.addEventListener(...arr.slice(1)); this._eventListeners.push(arr); }; var readFromClipboard = () => { var url = ""; try { let trans = Cc["@mozilla.org/widget/transferable;1"].createInstance(Ci.nsITransferable); trans.init(docShell.QueryInterface(Ci.nsILoadContext)); trans.addDataFlavor("text/plain"); let {clipboard} = Services; clipboard.getData(trans, clipboard.kGlobalClipboard); let data = {}; trans.getTransferData("text/plain", data); if (data.value) url = data.value.QueryInterface(Ci.nsISupportsString).data; } catch (ex) {} return url; }; var getCurrentURL = () => { var url = gBrowser.selectedBrowser.currentURI.displaySpec; try { let _url = ReaderMode.getOriginalUrl(url); if (_url) url = Services.io.newURI(_url).displaySpec; } catch(e) {} return url; }; var getURL = key => { return !key ? gContextMenu?.linkURI?.displaySpec || getCurrentURL() : readFromClipboard(); }; var popup = document.querySelector("#contentAreaContextMenu"); var create = e => { if (e.target != popup || gContextMenu.webExtBrowserType === "popup" || (gContextMenu.isContentSelected || gContextMenu.onTextInput) && !gContextMenu.linkURL) return; popup.removeEventListener("popupshowing", create); this._eventListeners.shift(); var contextsel = popup.querySelector(`:scope > ${selector}`) || popup.querySelector(":scope > menuseparator:last-of-type"); var fragment = document.createDocumentFragment(), preitem = ""; if (length == 1) submenu = false; if (!submenu) preitem = "Открыть в "; var itemId = 0; arrOS.forEach(item => { var name = item.name, path = item.path, args = item.args || ""; if (!name || !path) return; var iconpath = item.iconpath || `moz-icon://file://${path}?size=16`; let mitem = document.createXULElement("menuitem"); mitem.id = `ucf-menu-open-with-${++itemId}`; mitem.className = "menuitem-iconic ucf-menu-open-with"; mitem.setAttribute("label", `${preitem}${name}`); mitem.apppath = path; mitem.appargs = args; if (attrimage) mitem.setAttribute("image", iconpath); fragment.append(mitem); addListener(mitem, "command", function command(e) { try { let target = e.currentTarget, args = target.appargs, file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); file.initWithPath(target.apppath); if (!file.exists()) return; if (file.isExecutable()) { let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(file); if (args) { let openuri = false; args = args.split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/).map(sp => { if (/%OpenURI/.test(sp)) { openuri = true; return sp.replace(/^["']+|["']+$/g, "").replace(/%quot/g, '"').replace("%OpenURI", getURL(e.shiftKey)); } if (/%OpenClipboardURI/.test(sp)) { openuri = true; return sp.replace(/^["']+|["']+$/g, "").replace(/%quot/g, '"').replace("%OpenClipboardURI", getURL(!e.shiftKey)); } return sp.replace(/^["']+|["']+$/g, "").replace(/%quot/g, '"'); }); if (!openuri) args.push(getURL(e.shiftKey)); } else args = [getURL(e.shiftKey)]; process.runwAsync(args, args.length); } else file.launch(); } catch(e) {} }); }); var funcpopupshowing, funcpopuphiding; if (submenu) { let rootmenu = {}; if (fragment.children.length) { rootmenu = document.createXULElement("menu"); rootmenu.id = "ucf-menu-open-with-submenu"; rootmenu.className = "menu-iconic ucf-menu-open-with"; rootmenu.setAttribute("label", "Открыть в..."); let mpopup = document.createXULElement("menupopup"); mpopup.append(fragment); rootmenu.append(mpopup); contextsel.before(rootmenu); } funcpopupshowing = () => { rootmenu.hidden = false; }; funcpopuphiding = () => { rootmenu.hidden = true; }; } else { contextsel.before(fragment); funcpopupshowing = () => { for(let arr of this._eventListeners) { if (arr[2].name === "command") arr[0].hidden = false; } }; funcpopuphiding = () => { for(let arr of this._eventListeners) { if (arr[2].name === "command") arr[0].hidden = true; } }; } addListener(popup, "popupshowing", function popupshowing(e) { if (e.target != popup || gContextMenu.webExtBrowserType === "popup" || (gContextMenu.isContentSelected || gContextMenu.onTextInput) && !gContextMenu.linkURL) return; funcpopupshowing(); }); addListener(popup, "popuphiding", function popuphiding(e) { if (e.target != popup) return; funcpopuphiding(); }); }; addListener(popup, "popupshowing", create); that.unloadlisteners.push("contextmenuopenwith"); }, destructor() { for(let arr of this._eventListeners) arr.shift().removeEventListener(...arr); } }).init(this);
Отредактировано Vitaliy V. (01-05-2024 01:07:32)
Отсутствует
Vitaliy V. – спасибо!
Вопрос: делаю общие функции в MJS-скрипте через scriptsbackground: [ // In background [System Principal]:
Почему напрямую не работает globalThis[Symbol.for('Dobrov')] = Dobrov; и можно ли сделать проще, без
ChromeUtils.domProcessChild.childID || ({
………
}).init("browser-delayed-startup-finished");
var {Services} = globalThis || ChromeUtils.import("resource://gre/modules/Services.jsm"); var win = wm.getMostRecentWindow("navigator:browser") || globalThis; var name = "Dobrov", EXPORTED_SYMBOLS = [`${name}Child`]; // так не работает: globalThis[Symbol.for('Dobrov')] = Dobrov; ChromeUtils.domProcessChild.childID || ({ init(topic) { globalThis[Symbol.for('Dobrov')] = Dobrov; //общие функции } }).init("browser-delayed-startup-finished"); var Dobrov = { toTab(url = 'about:serviceworkers', go){ //открыть вкладку | закрыть её | выбрать for(var tab of win.gBrowser.visibleTabs) if(tab.linkedBrowser.currentURI.spec == url) {go ? win.gBrowser.selectedTab = tab : win.gBrowser.removeTab(tab); return;} win.gBrowser.addTrustedTab(url); win.gBrowser.selectedTab = win.gBrowser.visibleTabs[win.gBrowser.visibleTabs.length -1]; }, async Status(text,time){ var StatusPanel = win.StatusPanel; if(StatusPanel.update.tid) win.clearTimeout(StatusPanel.update.tid) else { var {update} = StatusPanel; StatusPanel.update = () => {}; StatusPanel.update.ret = () => { StatusPanel.update = update,StatusPanel.update(); } } StatusPanel.update.tid = win.setTimeout(StatusPanel.update.ret,time || 5e3); StatusPanel._label = text; }, };
Отсутствует
Почему напрямую не работает globalThis[Symbol.for('Dobrov')] = Dobrov;
Так а как она заработает если на тот момент переменная var Dobrov = ещё не определена. Тогда пиши ниже или сразу так
globalThis[Symbol.for('Dobrov')] = {
toTab(url = 'about:serviceworkers', go){ и т.д.
И вообще почему нормально не использовать export var Dobrov = {
потом где надо импортировать модуль
var {Dobrov} = ChromeUtils.importESModule(...
Или если это для JSWindowActorChild то должно быть что то вроде
export class DobrovChild extends JSWindowActorChild {
Вообще конечно странный код, зачем например это нужно
var {Services} = globalThis || ChromeUtils.import("resource://gre/modules/Services.jsm");
при том что импорт после || ни при каких условиях не будет выполнено даже если Services отсутствует в globalThis
Отредактировано Vitaliy V. (01-05-2024 17:35:02)
Отсутствует
Bug 1892965 - Rename Sidebar launcher and SidebarUI
Vitaliy V.
Затрагивает две сайдбарские кнопки в составе UCF.
Кстати, ещё, из-за этого бага,
если у тулбара отсутствует атрибут "key", то
в Главное меню —> Вид —> Панели инструментов
(аналогично и в customize-режиме «Настройка панели инструментов…»)
onViewToolbarsPopupShowing()
проставляет на тулбарский менюитем атрибут "key" как "null".
В результате, в консоли появляется запись типа
«Key null of menuitem Панель меню could not be found».
Так вот, это относится и к тулбарам UCF.
Может задать им пустой атрибут "key" (ну, как для "accesskey").
Или подождать, вдруг сами исправят.
Отсутствует
Vitaliy V.
Dumby
Я помню что по dom вы не любите, но на и начало задалбывать копирование адреса источника вместе с копируемым текстом, есть решение, или может скрипт придумаете? Если это вообще dom.
Отредактировано _zt (04-05-2024 08:45:59)
Отсутствует
Vitaliy V. спасибо за новый ucf_contextmenu_openwith !
Вопрос - как получить stdout при выполнении команд (терминала) ?
Скрипт создаёт строку в контекст-меню даже при отсутствии yt-dlp, поэтому нужна ещё проверка.
Например, берём последнюю строку из stdout, если «0», значит всё ОК:
which yt-dlp; echo $?
Отсутствует
В результате, в консоли появляется запись типа
«Key null of menuitem Панель меню could not be found»
Может задать им пустой атрибут "key" (ну, как для "accesskey").
Хорошо, буду иметь ввиду если не исправят, пока это ничего не ломает, останова кода нигде не вызывает,
это всего лишь мусорит в консоли console.error(msg); в menu.js -> _computeAccelTextFromKeyIfNeeded() {
по dom вы не любите
Смотря какой, DOM есть не только на сайтах, а где есть HTML XHTML XML, интерфейс браузера в том числе.
на и начало задалбывать копирование адреса источника вместе с копируемым текстом, есть решение, или может скрипт придумаете?
А подробнее как воспроизвести это, может как раз какой-нибудь скрипт у вас это и делает.
Скрипт создаёт строку в контекст-меню даже при отсутствии yt-dlp, поэтому нужна ещё проверка.
Такие проверки дорого стоят, может быть задержка появления меню или пунктов, лучше сделать например так: при клике на пункт если приложение отсутствует, то выводится уведомление типа такое то приложение по данному пути не найдено, установите, или скрыть пункт меню
Отредактировано Vitaliy V. (04-05-2024 15:24:00)
Отсутствует
А где можно достать UserChromeFiles для Firefox 88? Тот, который для последних версий, в нем не работает.
Отсутствует
А где можно достать UserChromeFiles для Firefox 88?
Win7
Отсутствует
Добавил поддержку Гром-птицы, но без панелей и кнопок, CustomizableUI там урезанный поэтому кнопки таким способом не добавить.
Для доступа к настройкам UserChromeFiles добавленны пункты в меню.
Для версии 115-116 нужно также заменить файлы из архива UserChromeFiles_Fix_115_ESR.zip
Отредактировано Vitaliy V. (07-05-2024 15:15:54)
Отсутствует
В [firefox]125 Add Toolbar Buttons отвалился, само расширение есть, а кнопок нет... в 117, вроде, было подобное. Можно ли как-то вылечить..?
Пока откатился на 124.0.2.
Отсутствует
LGS
У меня какая версия firefox ?! Если работает на 126 думаете на 125 не будет.
Короче у вас либо старая версия Add Toolbar Buttons, либо слетел код для отключения подписи.
P.S. если старая версия от 2021 сначала её нужно удалить, потом ставить новую, а то будет два расширения установленно, т.к. в новой изменился ID
Отредактировано Vitaliy V. (08-05-2024 13:41:33)
Отсутствует
А подробнее как воспроизвести это, может как раз какой-нибудь скрипт у вас это и делает.
Да нет, нет такого и никогда не ставил, даже в обезьяну, просто такое не интересует.
Вот например - https://vyborok.com
Попробуйте скопировать что угодно (текст). И таких сайтов сейчас все больше и больше.
Конечно это от версии не зависит, а то я выше так написал, что можно подумать, что это только в 126+ так.
Отредактировано _zt (08-05-2024 14:50:12)
Отсутствует
_zt
dom.event.clipboardevents.enabled = false
Отсутствует
У меня какая версия firefox ?! Если работает на 126 думаете на 125 не будет
Я немного по другому думаю - почему у вас и других работает, а у меня нет..?
у вас либо старая версия Add Toolbar Buttons, либо слетел код для отключения подписи
Ни 2021, ни 2024 версии не работают. АТВ устанавливается, в списке установленных отображается, но кнопок нет. В ФФ124 все нормально.
Антиподписной код у меня этот:
https://forum.mozilla-russia.org/viewto … 59#p800159
Вроде бы не менялся, хотя, может, я что-то и пропустил...
Отредактировано LGS (08-05-2024 19:25:02)
Отсутствует
Антиподписной код у меня этот:
https://forum.mozilla-russia.org/viewto … 59#p800159
Вроде бы не менялся, хотя, может, я что-то и пропустил...
Попробуйте этот: https://forum.mozilla-russia.org/viewto … 53#p808453
«The Truth Is Out There»
Отсутствует
Добавил поддержку Гром-птицы, но без панелей и кнопок
Скрипты в Thunderbird всё же редко необходимы…
Вот бы UCF ещё в Palemoon добавить!, его свежие сборки ещё актуальны, т.к. Firefox слишком тормозной.
Отсутствует
Вот бы UCF ещё в Palemoon добавить!
В текущую сборку UCF добавить поддержку Palemoon нереально, там код древний. Разве что как отдельную сборку, но абсолютно весь код UCF переписывать на древний такое себе... Да и зачем там же xul расширения можно установить или свои написать.
Отсутствует
Добавил поддержку Гром-птицы, но без панелей и кнопок
А какая минимальная поддерживаемая версия Гром-птицы? На 78 или 91 будет работать?
Отредактировано unter_officer (09-05-2024 13:55:09)
«The Truth Is Out There»
Отсутствует
unter_officer
Нет как и с версии 115 (с заменой css файлов из архива), ES модули и др. компоненты не подерживаются указанными версиями.
Отредактировано Vitaliy V. (09-05-2024 14:16:46)
Отсутствует
dom.event.clipboardevents.enabled = false
Не подходит, ломает работу расширений. Например этого Link Text and Location Copier
Так что вопрос со скриптом остается открытым.
Отсутствует