kokoss
Спасибо, двоение вылечилось.
Viatcheslav
Может, подойдёт очистка поля прокруткой колёсика мышки?
Отсутствует
Может, подойдёт очистка поля прокруткой колёсика мышки?
Спасибо, но там много лишнего...
На форуме
Спасибо, но там много лишнего...
Достаточно этого:
// Очистить панель адреса или поиска прокруткой колёсиком мыши на панели // https://forum.mozilla-russia.org/viewtopic.php?pid=788229#p788229 (this.clearsearchurlbar = { init(that) { for (let el of (this.urlsearcbar = document.querySelectorAll("#urlbar,#searchbar"))) el.addEventListener("wheel", this); that.unloadlisteners.push("clearsearchurlbar"); }, handleEvent(e) { e.target.value = ""; }, destructor() { for (let el of this.urlsearcbar) el.removeEventListener("wheel", this); }, }).init(this);
Win7
Отсутствует
Достаточно этого:
скрытый текстВыделить кодКод:
// Очистить панель адреса или поиска прокруткой колёсиком мыши на панели // https://forum.mozilla-russia.org/viewtopic.php?pid=788229#p788229 (this.clearsearchurlbar = { init(that) { for (let el of (this.urlsearcbar = document.querySelectorAll("#urlbar,#searchbar"))) el.addEventListener("wheel", this); that.unloadlisteners.push("clearsearchurlbar"); }, handleEvent(e) { e.target.value = ""; }, destructor() { for (let el of this.urlsearcbar) el.removeEventListener("wheel", this); }, }).init(this);
Не знаю, в чём дело, но не работает
Добавлено 04-08-2023 19:58:52
Ну тогда как вариант с помощью кнопки из Add Toolbar Buttons!
https://www.upload.ee/image/15536116/2023-08-04_113956.png
Слава Богу, хоть это сработало
Отредактировано Viatcheslav (04-08-2023 19:58:52)
На форуме
Не знаю, в чём дело, но не работает
У меня при добавлении в custom_script_win.js тоже не работает в строке поиска, только в адресной строке, поэтому предложил ATB.
Win7
Отсутствует
По ссылке на баг, прочитал такое "IOUtils and PathUtils offers async alternatives", но дуб дубом в этом. Это что-то вроде замены FileUtils.getFile()?
Здесь, наверно, упор скорее на «async»,
и, «alternatives» — это скорее «alternatives» для них, а не для нас,
им-то "UChrm" нафик не сдался.
Вобщем, как-то так
(async parts => Services.obs.addObserver(function quit(s, topic, data) { Services.obs.removeObserver(quit, topic); //if (data == "restart") return; var file = Services.dirsvc.get("UChrm", Ci.nsIFile); parts.forEach(file.append); file.launch(); }, "quit-application"))(["user_chrome_files", "_", "sqlite[Fx].vbs"]);
Переделал обработчик нажатий клавиш, проверь, так лучше?
Да, так чуть лучше.
Плюс, три три дебаг-строки рядом, удобно закомментировать, если что.
Зачем return при не 'javascript.enabled' понять не смог.
Dumby — посмотри, как с этим вариантом переделать keydown_win = e => ……
Digit1() { console.log("Digit1 Page+Input Only Apple");}, true, -1, "macosx"
Четыре сущности разделённые запятой. Функция и три примитива.
Синтаксис функции такой, какой возможен, вроде как, только в объектах и в классах.
Так что неясно, где бы такая запись могла бы быть расположена.
У меня при добавлении в custom_script_win.js тоже не работает в строке поиска, только в адресной строке
Если под «при добавлении» имеется в виду добавление в конец,
то ничего удивительного что работает лишь частично,
ведь custom_script_win.js исполняется по событию "DOMContentLoaded"
а к этому моменту #searchbar'а ещё нет.
Код предназначен быть добавленным после строки
«// Здесь может быть ваш код который сработает по событию "load"»
Об этом как-бы намекает констукция вида (this.something = {…}).init(this);
Если в терминах встроенного в CustomStylesScripts.jsm загрузчика,
это — scriptschrome: { …, load: [ …, { path: "…", ucfobj: true, }, ] },
Отсутствует
Есть скрипт который нормально работает на странице about:addons с консоли
Как сделать чтобы он автоматом запускался при открытии about:addons?
пробовал создать .js но что-то оно селекторы не считывает и походу не задаёт( может есть нюанс какой-то?
Отсутствует
Как сделать чтобы он автоматом запускался при открытии about:addons?
Допустим, создаём в папке custom_scripts
файл about_addons_test.js в котором прописываем своё js-добро.
Тогда, в CustomStylesScriptsChild.jsm
в массив UcfStylesScripts.scriptscontent.pageshow
добавляем
{ path: "about_addons_test.js", urlregxp: /about:addons/ },
Теперь, убеждаемся, что в настройках UCF проставлена галка
[✔] Включить стили и скрипты для контента [about:, chrome:, moz-extension:]
Всё. Рестарт с очисткой кэша, и должно работать.
Если не работает, то на Firefox, древнее чем 115,
следует удалить папку startupCache вручную.
пробовал создать .js но что-то оно
Это предложение угадать его содержимое?
Отредактировано Dumby (05-08-2023 10:33:15)
Отсутствует
Код предназначен быть добавленным после строки
«// Здесь может быть ваш код который сработает по событию "load"»
Туда и добавлял, сейчас проверил -> работает, дааааа
Win7
Отсутствует
Для временного отключения кода перехвата клавиш - для отладки
Почему тогда именно эта настройка,
а не какая-нибудь другая, или вообще своя.
или если в системе такие же есть
Это какая-то разновидность дискриминации?
Типа: «
Запретил исполняться контентским скриптам?
Ну тогда и с этого скрипта получишь шиш.
».
Или просто связывание несвязанных вещей?
Отсутствует
OmTatSat пишетКак сделать чтобы он автоматом запускался при открытии about:addons?
Допустим, создаём в папке custom_scripts
файл about_addons_test.js в котором прописываем своё js-добро.Тогда, в CustomStylesScriptsChild.jsm
в массив UcfStylesScripts.scriptscontent.pageshow
добавляем
{ path: "about_addons_test.js", urlregxp: /about:addons/ },Теперь, убеждаемся, что в настройках UCF проставлена галка
[✔] Включить стили и скрипты для контента [about:, chrome:, moz-extension:]Всё. Рестарт с очисткой кэша, и должно работать.
Если не работает, то на Firefox, древнее чем 115,
следует удалить папку startupCache вручную.пробовал создать .js но что-то оно
Это предложение угадать его содержимое?
Спасибо огромное!) Голову сломал, никак не получалось)
Правда пришлось перейти на новый загрузчик, и пока восстановить работу всего зверинца не удаётся, зато поиск-фильтр уже есть в about:addons как давным давно было по дефолту !)
Например у меня работал CustomButtons, после смены загрузчика кнопка в сайдбаре дополнений пропала, хотя само приложение есть, странно( может из-за отвалившегося disable-add-on-signing.js ? хотя я и пробовал его аж в двух местах прописать
Потом был удобные менеджер включенных отключенных скриптов https://github.com/xiaoxiaoflood/firefox-scripts#instructions ссылка utils → I'm interested in both scripts and extensions https://raw.githubusercontent.com/xiaoxiaoflood/firefox-scripts/master/utils.zip
и styloaix.uc.js тоже не ясно куда его прописать, в какой подпункт?
может есть мануал, как определять какой скрипт и стиль куда прописывать?
Отсутствует
Почему тогда именно эта настройка, а не какая-нибудь другая, или вообще своя.
3 уже добавлял, но в итоге в UCF только одну оставил. К javascript.enabled привязал просто как пример, кому надо, уберут!
или если в системе такие же есть
Да, на макос с Meta+Shift+Буква много системных сочетаний, поэтому и просил постфикс операционки добавить в перехват нажатий клавиш.
Отсутствует
OmTatSat
Тут не все так просто, из-за этого и не получится такой удобный менеджер скриптов прикрутить, наверно придется всю ucf тогда переделывать. Мне тоже у него понравился тот менеджер, очень удобный. Но, возможно, многое не прикрутишь, как в ucf. Потому и остановился на ucf. Здесь к тому же что-то подскажут, что-то обновляется. У каждого свой плюсы и минусы, и свой особенности.
Отсутствует
Правда пришлось перейти на новый загрузчик
работал CustomButtons
из-за отвалившегося
был удобные менеджер
Не понял. Что значит «пришлось» ?
UCF либо развёрнут, либо нет.
Если развёрнут, значит и загрузчик есть, на него не надо «переходить».
Ты либо используешь его, либо нет.
Остальное, иные uc-экосистемы, или CB, могут и должны
работать независимо и параллельно, и, если есть положительный опыт взаимодействия с ними,
то, без особой необходимости, и уверености в том, что «я могу перейти», ничего с ними делать не следует.
extensions.user_chrome_files.debug
Другое дело.
Отредактировано Dumby (05-08-2023 19:24:55)
Отсутствует
OmTatSat
Тут не все так просто, из-за этого и не получится такой удобный менеджер скриптов прикрутить, наверно придется всю ucf тогда переделывать. Мне тоже у него понравился тот менеджер, очень удобный. Но, возможно, многое не прикрутишь, как в ucf. Потому и остановился на ucf. Здесь к тому же что-то подскажут, что-то обновляется. У каждого свой плюсы и минусы, и свой особенности.
кстати оказалось, они оба вместе живут себе)) просто конфиг config.js который в папке Firefox я сначала заменил на UCF а потом решил попробовать объединить, и волшебным образом завелось)
// UserChromeFiles Vitaliy V. http://forum.mozilla-russia.org/viewtopic.php?id=76642 lockPref('xpinstall.signatures.required', false); lockPref('extensions.install_origins.enabled', false); try { let cmanifest = Cc['@mozilla.org/file/directory_service;1'].getService(Ci.nsIProperties).get('UChrm', Ci.nsIFile); cmanifest.append('utils'); cmanifest.append('chrome.manifest'); Components.manager.QueryInterface(Ci.nsIComponentRegistrar).autoRegister(cmanifest); Cu.import('chrome://userchromejs/content/BootstrapLoader.jsm'); } catch (ex) {}; try { Cu.import('chrome://userchromejs/content/userChrome.jsm'); } catch (ex) {}; (async () => { Cu.evalInSandbox(` var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm"), user_chrome_files_sandbox = { init() { Services.obs.addObserver(this, "domwindowopened"); Services.obs.addObserver(this, "profile-after-change"); }, observe(aWindow, aTopic, aData) { Services.obs.removeObserver(this, "profile-after-change"); this.observe = (window, topic, data) => { if (!(window instanceof Ci.nsIDOMChromeWindow)) return; var docElementInserted = e => { var win = e.target.defaultView; if (win instanceof Ci.nsIDOMChromeWindow) user_chrome.initWindow(win); }; window.windowRoot.addEventListener("DOMDocElementInserted", docElementInserted, true); window.addEventListener("load", e => { window.addEventListener("unload", e => { window.windowRoot.removeEventListener("DOMDocElementInserted", docElementInserted, true); }, { once: true }); }, { once: true }); }; var file = Services.dirsvc.get("UChrm", Ci.nsIFile); file.append("user_chrome_files"); file.append("user_chrome.manifest"); if (!file.exists() || !file.isFile()) { this.removeObs(); return; } try { Components.manager.QueryInterface(Ci.nsIComponentRegistrar).autoRegister(file); Services.scriptloader.loadSubScript("chrome://user_chrome_files/content/user_chrome.js", globalThis, "UTF-8"); } catch(ex) { this.removeObs(); return; } if (aTopic === "domwindowopened") this.observe(aWindow, aTopic, aData); }, removeObs() { Services.obs.removeObserver(this, "domwindowopened"); }, }; user_chrome_files_sandbox.init();`, Cu.Sandbox(Cc["@mozilla.org/systemprincipal;1"].createInstance(Ci.nsIPrincipal), { wantComponents: true, sandboxName: "UserChromeFiles", wantGlobalProperties: ["ChromeUtils"],})); })();
Добавлено 05-08-2023 21:43:17
OmTatSat пишетПравда пришлось перейти на новый загрузчик
работал CustomButtons
из-за отвалившегося
был удобные менеджерНе понял. Что значит «пришлось» ?
UCF либо развёрнут, либо нет.
Если развёрнут, значит и загрузчик есть, на него не надо «переходить».
Ты либо используешь его, либо нет.Остальное, иные uc-экосистемы, или CB, могут и должны
работать независимо и параллельно, и, если есть положительный опыт взаимодействия с ними,
то, без особой необходимости, и уверености в том, что «я могу перейти», ничего с ними делать не следует.
Я скриптами разбираюсь на аматорском уровне, может и не правильно термин применил)
Пришлось, значит, чтобы получить желаемое, пришлось рискнуть своим налаженным пространством
Но конечно с бекапами всё это дело с легкостью на душе происходит.
Тем более что удалось их оба задействовать.
Спасибо за помощь.
Добавлено 05-08-2023 22:00:24
Вот как сам поиск - фильтр в about:addons получился
не идеально, но дело делает, может кто-то ещё допилит, буду благодарен)
https://i.ibb.co/DQbztvq/Mozilla-Firefo … -49-20.png
https://i.ibb.co/nP9wSH5/Mozilla-Firefo … -49-12.png
https://i.ibb.co/D1fsk5T/Mozilla-Firefo … -49-00.png
// Создание элементов const input = document.createElement('input'); input.id = 'search'; input.type = 'text'; const button = document.createElement('button'); button.id = 'filter'; button.innerText = 'Найти'; const search = document.querySelector('.main-search > search-addons:nth-child(2)'); // Прикрепление к нужному элементу search.appendChild(input); search.appendChild(button); // Обработчики событий button.addEventListener('click', () => { const searchTerm = input.value; filterElements(""); filterElements(searchTerm); }); input.style.position = 'relative'; input.style.zIndex = '999'; input.style.left = '300px'; input.style.top = '-37px'; input.style.maxheight = '13px'; input.style.height = '15px'; button.style.position = 'relative'; button.style.zIndex = '999'; button.style.left = '300px'; button.style.top = '-35px'; button.style.height = '20px'; function filterElements(searchTerm) { const names = document.querySelectorAll('h3.addon-name a.addon-name-link'); const descs = document.querySelectorAll('.addon-description'); descs.forEach((desc, i) => { console.log('Проверяем элемент', desc); const textElem = desc.firstChild; if (!textElem) { const text = "emp"; foundDesc = false; } else { text = textElem.textContent; foundDesc = text.includes(searchTerm); ;console.log('описание:', text , 'foundDesc' , foundDesc); } const name = names[i]; if (!name ) { return } const nametext = name.textContent; let foundName = name.textContent.toLowerCase().includes(searchTerm); ; console.log('название:', nametext , 'foundName' , foundName , 'описание:', text , 'foundDesc' , foundDesc); if (!foundName && !foundDesc) { name.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.style.display = 'none'; console.log('Скрываем название:', nametext , 'foundName' , foundName , 'описание:', text , 'foundDesc' , foundDesc); } else { name.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.style.display = 'unset'; console.log('Показываем название:', nametext , 'foundName' , foundName , 'описание:', text , 'foundDesc' , foundDesc); } }); }
Отредактировано OmTatSat (05-08-2023 22:00:24)
Отсутствует
OmTatSat
Мне кажется, или у вас скриншоты странные?) А так, да, CB тоже работает вместе с ucf, а вот про xiaoxiaoflood, не знал.
Мне казалось, что это как иметь 4 антивируса, или как tampermonkey и greasemonkey, главное, чтобы не конфликтовало и не потеряться во всем этом. А так, почему нет.
add: Маленькие какие-то, ничего не видно. Или только у меня так? Те которые в ссылках, в спойлере нормально отображается.
Отредактировано b0ttle (06-08-2023 10:41:48)
Отсутствует
OmTatSat
Мне кажется, или у вас скриншоты странные?) А так, да, CB тоже работает вместе с ucf, а вот про xiaoxiaoflood, не знал.
Мне казалось, что это как иметь 4 антивируса, или как tampermonkey и greasemonkey, главное, чтобы не конфликтовало и не потеряться во всем этом. А так, почему нет.
Хз) смотря что вы считаете странностью
Согласен, как минимум просмотреть чтобы дублей не было
Отсутствует
А где это надо менять?
Win7
Отсутствует
@Dumby
Большая просьба исправить скрипт разделителей special_widgets.js, чтобы загружался вне ucf старым методом от Aris-t2 или Endor8.
Что значит «исправить»?
Исправить можно баг или поломку,
а «чтобы загружался …» — это не называется «исправить».
Вобщем, меняем первую и последнюю (не пустую) строку на такие
(async url => location != url || await delayedStartupPromise || ({
}).init("customizationready"))("chrome://browser/content/browser.xhtml");
И, вместо методов init() и destructor() один только init(), такой:
// init(type) { window.addEventListener(type, this); window.addEventListener("unload", () => window.removeEventListener(type, this) , {once: true}); },
Отсутствует