Слева отжата, звук включен, справа нажата, звук выключен
Звук в(ы)ключен где?
будет визуально видно положение кнопки отжата\нажата
То есть будет видно, нажата кнопка чётное количество раз, или нечётное.
Это понятно, но причём здесь звук? И причём здесь «активность кнопки»,
у кнопки нет никакой активности, она просто переключает по клику некий
на тот момент расклад, вот и всё.
Отсутствует
Это понятно, но причём здесь звук?
Кнопка управляет звуком активной вкладки, если несколько вкладок, то для каждой вкладки кнопку можно применить индивидуально, в одной вкладке звук включен (белая иконка), в другой можно выключить (перечеркнутая или красная иконка).
Отсутствует
Кнопка управляет звуком активной вкладки
Управляет, но не монопольно же. Звук может быть переключён как угодно,
от через контекстное меню вкладки, и до любым другим сторонним кодом.
То есть звук и кнопка не имеют жёсткой связи.
Ладно, вместо «добавить в этот скрипт индикацию активности кнопки»,
сформулируем так: вывести на кнопку индикацию muted-состояния активной вкладки,
если muted, то иконка перечёркнутая, иначе неперечёркнутая. Это можно попробовать.
(async self => CustomizableUI.createWidget(self = { label: "Переключить звук", tooltiptext: "ЛКМ: Переключить звук в выделенных вкладках\n" + //"СКМ: Закрыть другие вкладки с источником звука\n" + "СКМ: Закрыть другие вкладки «ВОСПРОИЗВОДИТСЯ» и «БЕЗ ЗВУКА»\n" + "ПКМ: Переключить звук во всех вкладках", imgs: [ "url(chrome://global/skin/media/audio.svg)", "url(chrome://global/skin/media/audio-muted.svg)" ], id: "b-sound-muted-all-tabs", defaultArea: CustomizableUI.AREA_NAVBAR, localized: false, onCreated(btn) { btn.onclick = this.click; btn.toggleAttribute("context"); var win = btn.ownerGlobal, gb = win.gBrowser; btn.muted = gb.selectedTab.muted; this.setImg(btn); var tc = gb.tabContainer; var args = ["TabAttrModified", e => this.tam(e, btn)]; tc.addEventListener(...args); win.addEventListener("unload", () => tc.removeEventListener(...args) , {once: true}); }, setImg: btn => btn.style.setProperty( "list-style-image", self.imgs[+btn.muted], "important" ), tam(e, btn) { if (e.target.selected) { var arr = e.detail.changed; if (arr.includes("selected") || arr.includes("muted")) btn.muted ^ (btn.muted = e.target.muted) && this.setImg(btn); } }, click(e) { var gb = this.ownerGlobal.gBrowser; if (e.button == 0) gb.toggleMuteAudioOnMultiSelectedTabs(gb.selectedTab); else if (e.button == 1) gb.visibleTabs.filter(self.f1).forEach(gb.removeTab, gb); else if (e.button == 2) for(var tab of gb.selectedTab.activeMediaBlocked ? gb.visibleTabs.filter(self.f2) : gb.visibleTabs.filter(self.f3, gb.selectedTab.linkedBrowser.audioMuted) ) tab.toggleMuteAudio(); }, f1: tab => !tab.selected && (tab.muted || tab.soundPlaying), f2: tab => tab.activeMediaBlocked || tab.linkedBrowser.audioMuted, f3(tab) { return tab.linkedBrowser.audioMuted == this && !tab.activeMediaBlocked || tab.activeMediaBlocked && this } }))();
Отсутствует
Как в скрипте Контекстный поиск переместить меню «Искать в…» выше? (например перед строкой «Добавить в Заладки»)
Даже просто наличие этого загрузчика в custom_script_win.js, с закомментированным импортом, как минимум ломает стили окна.
Как это происходит? Мне не удалось воспроизвести: «как минимум ломает стили окна», но всё-же поправил код в своём сообщении.
Отсутствует
переместить меню «Искать в…» выше? (например перед строкой «Добавить в Заладки»)
… //searchSelect.before(menu); document.getElementById("context-bookmarklink").before(menu);
Как это происходит? всё-же поправил код
Уж не знаю что поправил, но запятая в конце первой части кода всё ещё торчит.
А происходит это так: парсер видит, что после этой запятой идёт совсем не то,
что ожидалось, выдаёт «SyntaxError: missing variable name», и весь код встаёт враскоряку.
Отсутствует
сформулируем так: вывести на кнопку индикацию muted-состояния активной вкладки,
если muted, то иконка перечёркнутая, иначе неперечёркнутая. Это можно попробовать.
Спасибо, самое оно!
Отсутствует
Как это происходит?
Будет явно заметно с VitaliyVstyle full_theme + Windows 7, но уверен, что и на 10-11 имеется смещение рамки окна. Что приведет к ошибкам при правке стилей.
"Поправка" ничего не исправила.
Отредактировано _zt (16-01-2022 10:30:25)
Отсутствует
Dumby - спасибо за помощь с меню поиска!
_zt - не знаю, на каком custom_script_win.js вы проверяете, но я брал загрузчик от Виталия, где фрагмент кода var loadscript также завершался запятой!
// Загрузчик для custom_script_win.js https://forum.mozilla-russia.org/viewtopic.php?pid=788301#p788301 var loadscript = (js, win = this, init) => { try { if (/\.jsm$/i.test(js)) { // скрипт js или jsm [инициализация] var obj = ChromeUtils.import('chrome://user_chrome_files/content/custom_scripts/'+ js, win); init && obj[init](); } else Services.scriptloader.loadSubScript('chrome://user_chrome_files/content/custom_scripts/'+ js, win); return true; } catch(e) {} return false; }, load_scripts_by_url = { browser: win => { //>>>>>>>>>>| Этот блок требуется для боковой панели и др., очистите строку ниже если он нужен |>>>>>>>>>> /* var box = document.querySelector("#browser") || window; var listener = e => { var doc = e.target || ({}); load_scripts_by_url[doc.documentURI]?.(doc.defaultView); }; box.addEventListener("pageshow", listener); this.loadscriptswinandsidebar = { destructor() { box.removeEventListener("pageshow", listener); } }; this.unloadlisteners.push("loadscriptswinandsidebar"); /* <<<<<<<<<<<<<<<<<<<< */ setTimeout(() => { //>>>>>>>>>>| Загрузка скриптов для browser.xhtml |>>>>>>>>>> // подключить внешние скрипты - сначала глобальные функции var jscripts = [["ucf_global_win.js", globalThis], ["ucf_win_contextmenuopenwith.js"], ["ucf_mousedrag.js"], ["ucf_QuickToggle.js"], ["ucf_BookmarkDir.js"], ["ucf_hookClicks.js"], ["ucf_autohidetabstoolbar.js"], ["ucf_LocationBarEnhancer.js"], ["ucf_contextsearch.js"], ["ucf_findbarclose.js"], ["ucf_tab-update.js"], ["ucf_cooks-pass.js"], ["ClickPicSave.jsm"], ["UCFTitleChangedChild.jsm", this, "registerUCFTitleChanged"]]; // auto_hide_sidebar.js for (i = 0; i < jscripts.length; i++) loadscript(jscripts[i][0], jscripts[i][1], jscripts[i][2]); //<<<<<<<<<<<<<<<<<<<< }, 0); }, //>>>>>>>>>>| Загрузка скриптов для др. документов |>>>>>>>>>> "chrome://browser/content/places/bookmarksSidebar.xhtml": win => { // боковая панель закладок }, "chrome://browser/content/places/historySidebar.xhtml": win => { // боковая панель истории }, //<<<<<<<<<<<<<<<<<<<< }; load_scripts_by_url.browser(window); // END Загрузчик для custom_script_win.js
Отсутствует
Dobrov
не знаю, на каком custom_script_win.js вы проверяете
На актуальном.
завершался запятой!
Я ничего не говорил про запятые.
брал загрузчик от Виталия
Однако его загрузчик работает без подобных ошибок. Хотя, у меня давно уже весь импорт в CustomStylesScripts.jsm и CustomStylesScriptsChild.jsm, но его загрузчик до сих пор в custom_script_win.js присутствовал.
ps^ Теперь нормально. Правда проверил только на одном скрипте.
ps2^ Нефига не нормально, точки ошибку вызывают. Зачем вы их туда добавили? И запятая, если ее вернуть, тоже окно перекашивает.
Отредактировано _zt (16-01-2022 16:16:33)
Отсутствует
фрагмент кода var loadscript также завершался запятой!
Нет. Фрагмент кода начинается инструкцией var, которая завершается точкой с запятой;
А фрагмент loadscript завершается скобкой } которой заканчивается стрелочная функция.
И уже только затем идёт запятая, которая означает, что далее будет определена ещё одна переменная,
в данном случае load_scripts_by_url
точки ошибку вызывают. Зачем вы их туда добавили?
Это не точки, а троеточия ("\u2026", HORIZONTAL ELLIPSIS).
И если, например, увидеть, что запятая в код попала по недоразумению,
вполне себе может представляться затруднительным, то
то, что последовательность троеточий не является частью кода,
а, видимо, просто служит визуальным разделителем его частей,
представляется очевидным.
Отсутствует
Есть кнопка для СВ, отображающая расход оперативной памяти, индикатор расположен в адресной строке (код во вкладке "Инициализация")
(async id => ({ delay: 2e3, val: "", init(topic, mm) { Services.obs.addObserver(mm = this, topic); Services.obs.addObserver(function quit(s, t) { this.timer?.cancel(); Services.obs.removeObserver(mm, topic); Services.obs.removeObserver(quit, t); }, "quit-application-granted"); }, observe(win) { var df = win.MozXULElement.parseXULToFragment( `<hbox id="${id}" align="center"><label id="${id += "-label"}"/></hbox>` ); this.timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); // Bug 1665318 - In about:processes refresh, ResidentUniqueDistinguishedAmount is slow (Firefox 94+) // https://bugzilla.mozilla.org/show_bug.cgi?id=1665318 parseInt(Services.appinfo.platformVersion) < 94 && Object.assign(this, eval( `({${this.notify}})`.replace("memory", "residentSetSize").replace("memory", "residentUniqueSize") )); (this.observe = async win => { this.timer.cancel(); await new Promise(ChromeUtils.idleDispatch); var ind = win.document.importNode(df, true); win.document.getElementById("star-button-box").after(ind); this.notify(); })(win); }, async notify() { var info = await ChromeUtils.requestProcInfo(); var bytes = info.memory; for(var child of info.children) bytes += child.memory; this.timer.initWithCallback(this, this.delay, this.timer.TYPE_ONE_SHOT); var prev = this.val; if ((this.val = this.mgb(bytes)) != prev) for(var win of CustomizableUI.windows) { var lab = win.document.getElementById(id); if (lab) lab.value = this.val; } }, mgb: bytes => bytes < 1073741824 ? Math.round(bytes / 1048576) + "MB" : (bytes / 1073741824).toFixed(2) + "GB" }).init("browser-delayed-startup-finished"))("ucf-mem-indicator");
Отсутствует
Помогите, пожалуйста, сделать пункты «открыть ссылку в {другой программе}».
Скачал user_chrome_files.
Распаковал, что и куда там сказано.
Нашёл contextmenuopenwith.js, но нашёл только здесь, я не знаю, правильно ли. Но других вариантов не нашёл.
В общем, тот код вставил в contextmenuopenwith.js, кинул файл в профиль\chrome\user_chrome_files\custom_scripts.
В CustomStylesScripts.jsm добавил { path: "contextmenuopenwith.js", ucfobj, true, }, в секцию scriptschrome: { load: [
Зашёл в настройки about:user-chrome-files, включил там стили и скрипты, проставил все галочки в стилях-скриптах.
Перезапустил лиса с очисткой startup cache.
Сами UCF работают, например, есть три ненужных мне панели, да и в about:user-chrome-files иначе было бы не зайти. Но меню открытия в других программах нету.
Отсутствует
Wave
Я вам все расписал уже.
Если не работает, значит что-то сделали не правильно.
Скрипт вы нашли правильный.
Отредактировано _zt (17-01-2022 13:57:18)
Отсутствует
Wave
UCF для тех кто хотя бы может правильно отредактировать JavaScript и CSS,
а не с ошибками синтаксиса как у вас
В CustomStylesScripts.jsm добавил { path: "contextmenuopenwith.js",
ucfobj, true, },
ucfobj: true
Отсутствует
Vitaliy V., спасибо, заработало.
UCF для тех кто хотя бы может правильно отредактировать JavaScript и CSS
В теме, в которой мне посоветовали UCF, я писал:
Окей, по поводу UCF перехожу в ту тему. К слову, мне не надо «очень много полезного», я ищу одну конкретную функцию открытия ссылок в других браузерах или видеоплеере. В XUL-фоксе это можно было сделать одним аддоном, в первых WE-лисах двумя или тремя файликами, брошенными в /chrome, но тогда я не выдержал и откатился на XUL, а сейчас то решение не работает, не знаю почему. Может, что-то потерял. А вот это вот UCF-решение, оно громоздкое, избыточное (распаковывать файлы не только в chrome, но и в firefox, редактировать их и так далее), — так ещё и пока что не получилось заставить его работать.
Либо ставить расширение, ставить питон, ставить питоновский скрипт. Тоже избыточно, блин.
Я же не виноват, что простейшее и конкретное действие в квантуме можно организовать только будучи изрядно красноглазым. Дайте мне простой аддон, который можно поставить, залезть в его настройки и всё — и я не буду пользоваться UCF.
Отсутствует
А вот это вот UCF-решение, оно громоздкое, избыточное
Я не согласен с этим, что там такого громоздкого, а то что лишнее отключается в настройках и на работу браузера никак не влияет.
Отсутствует
Распаковывать файлы по разным местам, редактировать конфиги вручную, вручную добавлять скрипты, которые или где-то находить, или писать самому, чистить startup cache, что там ещё. Вы сами сказали — это не для всех.
И вот я всё это худо-бедно сделал. Окей. Через год, когда придёт пора обновлять esr, надо будет либо вспоминать, что это я делал, либо искать (опять) все эти инструкции. Хорошо, если в бэкапе оно всё будет и легко на него наткнусь. Но ведь несколько лет назад, когда только вышел квантум, я попробовал на него перейти, неудачно — откатился, тогда тоже нашлось простенькое решение из двух или трёх файлов, которое надо было распаковать в каталог chrome, и оно работало — я ж это решение тоже тогда закатал в бэкап. Ну так с тех пор у меня ноут сменился, и то решение больше не работает, а я не знаю, почему, то ли потому, что девяностый огнелис этого уже не позволяет, то ли я что-то пропустил, потерял где-то. А сами те файлики в сети уже тю-тю, 404.
Я очень люблю программы-комбайны, которые можно как угодно настраивать, но очень не люблю для какой-то простейшей функции ставить комбайн, у которого ничего кроме этой функции не использовать.
Отсутствует
но очень не люблю для какой-то простейшей функции ставить комбайн
Ну так это не такая уж простейшая функция вызов внешних приложений, в расширениях этого теперь точно не будет
без ещё куда более громоздкого и не универсального решения в виде установки приложения для ОС и оно ещё должно в фоне постоянно работать.
Отредактировано Vitaliy V. (17-01-2022 16:49:54)
Отсутствует
Wave пишетно очень не люблю для какой-то простейшей функции ставить комбайнНу так это не такая уж простейшая функция вызов внешних приложений, в расширениях этого теперь точно не будет без ещё куда более громоздкого и не универсального решения в виде установки приложения для ОС и оно ещё должно в фоне постоянно работать.
async_run_applications.2021.9.7.xpi умеет вызывать внешние программы и передавать им текущий адрес или адрес из буфера обмена. Правда, тоже требует некоторых телодвижений в каталоге установленного фаерфокса.
https://addons.mozilla.org/ru/firefox/addon/potplayer-youtube-shortcut/ — вот это, почему-то, вызывает внешнее приложение, правда, всего одно — PotPlayer. Не требует установки в систему чего-то типа питона. Находится на AMO. Работает в 91 esr. Не требует даже отключать проверку подписей расширений.
Как так?
.
К слову, примерно на втором месте после скрапбука мне из xul-расширений жаль It'sAllText, которое передавало содержимое textarea во внешний редактор, а по сохранению файла обновляло содержимое textarea. WE-аналоги нынче требуют сервер, оформленный в виде плагина для вима, саблайма или любого другого редактора, и чтобы точно так же он был запущен. Почему нельзя сделать по аналогии с potplayer-youtube-shortcut? Или хотя бы как скрипт к UCF (но это надо чтобы кто-то сделал, сам я вряд ли смогу)?
Отсутствует
async_run_applications.2021.9.7.xpi умеет вызывать внешние программы и передавать им текущий адрес или адрес из буфера обмена
Ну да мое расширение может но оно WebExtensions Experiments, для ознакомления https://firefox-source-docs.mozilla.org … xperiments
И его нельзя подписать или выложить на АМО и конечно такое апи не добавят в
https://addons.mozilla.org/ru/firefox/addon/potplayer-youtube-shortcut/ — вот это, почему-то, вызывает внешнее приложение, правда, всего одно — PotPlayer
Не пользуюсь и PotPlayer, но судя по коду расширения оно добавляет ссылку в виде
potplayer://ссылка, т.е. видимо сам PotPlayer регистрирует новый протокол potplayer: в
Короче опять же не универсальное решение.
Отредактировано Vitaliy V. (17-01-2022 17:53:28)
Отсутствует
Wave
"Открыть страницу в..." у меня заработало без дополнительных правок, на предыдущей странице я спрашивал, как его убрать https://forum.mozilla-russia.org/viewto … 68#p797568
Отсутствует
Очевидно, что ты скачал где-то в другом месте набор, в котором этот скрипт уже был и был подключен. Я же сначала нагуглил скрипт, потом по цепочке выяснил, что подключить его можно через UCF, потом сам пакет UCF, потом выяснил, где и как в нём этот скрипт включить. И шёл я от темы про userChrome.css, потому что несколько лет назад было выяснил, что данную функцию можно задействовать через chrome. И что такое UCF вообще, не сразу выяснил.
Отсутствует
Wave
Любезно поделился https://forum.mozilla-russia.org/viewto … 31#p797431 уважаемый мастер sandro79
Отсутствует