рамку окна скрыть
Да вот скриптик для scriptschrome.domload чтобы скрыть совсем, у меня на 11 даже углы закругленные убрались
(async () => { if (AppConstants.platform !== "win") return; var margin = "0,0,0,0"; if (TabsInTitlebar.enabled) document.documentElement.setAttribute("chromemargin", margin); TabsInTitlebar._update = eval(`(${`${TabsInTitlebar._update}`.replace(/^(async\s)?.*?\(/, `$1function ${TabsInTitlebar._update.name}(`) .replace(/\.setAttribute\("chromemargin",\s*"0,2,2,2"\)\;/g, `.setAttribute("chromemargin", "${margin}");`)})`); })();
Отсутствует
Почему при внесении любых изменений в user_chrome.manifest браузер перестает "видеть" UserChromeFiles, как будто его нет вообще? Windows 7, Firefox 88.0.1, UserChromeFiles отсюда.
Отсутствует
Алексей У.
Вариантов несколько, возможно ваш блокнот кодировку ломает или добавляет расширение сохраняемому файлу, синтаксическая ошибка в тексте или вы добавляет свое до первой строки оригинала.
Добавлено 23-05-2024 21:20:29
Vitaliy V.
А хорошо, мне нравится. Спасибо.
Теперь можно свои рамки добавить только там где нужно и только для активного окна.
Отредактировано _zt (23-05-2024 21:20:38)
Отсутствует
В параметре module кроме Boolean можно указать массив из строк ["importSymbol"]
Спасибо! MJS работают, но как подключить mjs скрипт, который должен запускать функцию ?
export {registerUCFTitleChanged, UCFTitleChangedChild}; // Замены в именах вкладок var reg = /^Скачать |-\sПоиск\sв\sGoogle$| \| Форум Mozilla Россия$/; function registerUCFTitleChanged() { var esModuleURI = Components.stack.filename; ChromeUtils.registerWindowActor("UCFTitleChanged", { child: { esModuleURI, events: { DOMTitleChanged: { capture: true }}, }, matches: ["https://*"], messageManagerGroups: ["browsers"], }); } class UCFTitleChangedChild extends JSWindowActorChild { handleEvent(e) { if (reg.test(this.document.title)) this.document.title = this.document.title.replace(reg, ""); } }
Отсутствует
использовал методы Cu.createObjectIn и Cu.exportFunction,
что там по ним багов не завезли?
Ну, я не прям уж такой мёртвой хваткой вцепившись в багзиллу.
Просто иногда пытаюсь просматривать на предмет отвала.
Так что, более чем запросто, могу что-то пропустить, проворонить.
Поэтому, здесь на меня полагаться не следует.
А скажу так: само существование этих двух методов Cu виднелось,
но каких-то багов о них, лично мне, не попадалось. Вообще.
Кстати, было бы неплохо, если бы был какой-то репортинг
на ошибку исполнения func() добавленных в unloadMap.
А то добавишь кривой деструктор, закроешь окно,
и никакая консоль не подскажет, что деструктор кривой.
А если нет, то можно убрать «e».
То есть, просто catch {} а не catch (e) {}
Вроде, это называется «Optional catch binding».
Такой упрощённый синтаксис завезли с Firefox 58.
Отсутствует
как подключить mjs скрипт, который должен запускать функцию ?
Ну смотря откуда хочешь запускать, можешь так записать
{ ospath: "%UCFDIR%UCFTitleChangedChild.mjs", module: ["registerUCFTitleChanged"], func: "registerUCFTitleChanged();"},
или из другого background скрипта registerUCFTitleChanged();
или из оконного скрипта UcfPrefs.customSandbox.registerUCFTitleChanged();
или сделай как у Dumby типа ChromeUtils.domProcessChild.childID || ...
Кстати, было бы неплохо, если бы был какой-то репортинг
на ошибку исполнения func() добавленных в unloadMap.
Done!
Отсутствует
Вариантов несколько, возможно ваш блокнот кодировку ломает или добавляет расширение сохраняемому файлу, синтаксическая ошибка в тексте или вы добавляет свое до первой строки оригинала.
Если не трудно, можно подробнее по каждому из пунктов.
Отсутствует
Алексей У.
1. Используйте Notepad++ или другой нормальный блокнот
2. Включите отображение зарегистрированных расширений файлов в Windows
3. Не пишите в манифест ничего, кроме данных вам строк
4. Не пишите ничего до первой оригинальной строки
Все остальное можно найти в гугле.
Отсутствует
1. Используйте Notepad++ или другой нормальный блокнот
2. Включите отображение зарегистрированных расширений файлов в Windows
3. Не пишите в манифест ничего, кроме данных вам строк
4. Не пишите ничего до первой оригинальной строки
По пунктам 2-4 все в порядке. Что касается пункта 1, то обнаружил, что стандартный Блокнот предлагает при сохранении следующие варианты кодировки: ANSI, UTF-8, Юникод, Юникод Big Endian. Какую из них выбрать?
P.S. Раньше вообще не обращал внимания на такие тонкости.
Отсутствует
Доработал ucf_hookClicks.js и исправил неоткрытие менюшек в многооконом режиме.
Сделал две настраиваемых команды в Меню пользователя, которое открывается правым кликом на unified-extensions и add-ons-button.
Ещё при наведении на них мыши показывается содержимое буфера обмена.
Можно задать имена строк меню и js-код, сохраняемые при рестарте .
По правому клику на 2-х последних строках открывается опция about:config с вашими командами или строкой по-умолчанию.
Дополнил подсказки – на кнопках, строках меню и в статусе достаточно подробные подсказки.
Отсутствует
Done!
Похоже, здесь не всё так просто.
Добавил в custom_script_win.js строку
ucf_custom_script_win.setUnloadMap("bbbla", () => bbbla());
Рестарт, Ctrl+N, Alt+F4 — и получаю в консоли две записи
«can't access property "destructor", this.ucfo[key] is undefined»
и «bbbla is not defined».
Немного странно что две, но вполне приемлимо.
Больше репортинга — скорее понуждает к исправлению кривого деструктора.
Иначе говоря — две записи лучше, чем ноль.
Но, рассмотрим такой код:
((key, ucf) => { ucf[key] = { destructor() { bbbla(); } }; ucf.unloadlisteners.push(key); })("bbbla", ucf_custom_script_win);
То есть, тут получается, что кривой деструктор вызывается дважды.
А это уже нехорошо.
Dumby посиотрите пожалуйста кнопку Check for Addons Updates на работает но при прверке обновлений в консоли пишет
TypeError: Property 'handleEvent' is not callable. browser-custom-element.js:1033:13
Попробовал посмотреть на 128. Жму ПКМ — в консоли куча всяких
«addons.update-checker WARN HTTP Request failed for an unknown reason»
но, в моём случае, это совершенно нормально и ожидаемо.
А вот такой странной ошибки как у тебя — увидеть не смог.
Скажу так: если для воспроизводства нужен выход в сеть,
то тогда, увы, здесь я ничем помочь не смогу.
Отсутствует
получается, что кривой деструктор вызывается дважды.
А это уже нехорошо.
А чего такого нехорошего, ну вызвало два раза на что это повлияет, на скорость закрытия окна, вряд ли.
Кстати а зачем нужны кривые деструкторы, и потом вот эту часть в user_chrome.js
try { this.ucfo[key].destructor(); } catch (e) {Cu.reportError(e);}
можно было вообще не добавлять, но например https://forum.mozilla-russia.org/viewto … 44#p806144
destructor не существует когда добавляется unloadlisteners.push
TypeError: Property 'handleEvent' is not callable
А это похоже моя ошибка, но кроме мусора ни на что не влияет, можно добавить пока не обновил UCF
в user_chrome/StylesScriptsChild.mjs
export class UcfCustomStylesScriptsChild extends JSWindowActorChild {
actorCreated() {
this.handleEvent = () => {}
...
Отредактировано Vitaliy V. (25-05-2024 13:39:13)
Отсутствует
TypeError: Property 'handleEvent' is not callable
А это похоже моя ошибка, но кроме мусора ни на что не влияет, можно добавить пока не обновил UCF
Ещё SaveHTML.mjs при сохранении страницы about:newtab эту же ошибку выводит в консоль.
Отсутствует
А чего такого нехорошего, ну вызвало два раза на что это повлияет
Ну, например, код, который идёт до строки с ошибкой,
делает нечто такое, чего не должен делать второй раз.
Хотя да, это я себя уже слишком накручиваю.
Кстати а зачем нужны кривые деструкторы
Как зачем? В тестовых целях, посмотреть что случится.
destructor не существует когда добавляется unloadlisteners.push
Может проверять как-то так, даже не знаю
/* try { val.func.apply(val.context); } catch (e) { try { this.ucfo[key].destructor(); } catch (e) {Cu.reportError(e);} Cu.reportError(e); } */ if (val.func) try {val.func.apply(val.context);} catch(ex) {Cu.reportError(ex);} else if (this.ucfo[key]?.destructor) try {this.ucfo[key].destructor();} catch(ex) {Cu.reportError(ex);} else Cu.reportError("Missing destructor for key " + key);
Отсутствует
Ещё SaveHTML.mjs при сохранении страницы about:newtab эту же ошибку выводит в консоль
Да, если включены стили, скрипты для контента, как убрать ошибку в посте выше.
Может проверять как-то так
Или так, сообщение об ошибке, побуждает её исправить, ну и заменить на setUnloadMap
try { val.func.apply(val.context); } catch (e) { if (!val.func) try { this.ucfo[key].destructor(); } catch (e) {Cu.reportError(e);} Cu.reportError(e); }
Отредактировано Vitaliy V. (26-05-2024 00:56:37)
Отсутствует
Подскажите, пожалуйста, нет ли скрипта (или любого другого способа) вернуть системный вид скроллбаров на ВСЕХ сайтах?
Отсутствует
https://github.com/Aris-t2/CustomJSforFx/blob/master/scripts/old/custom_scrollbars_fx112.uc.js
Это нужно в custom_script_win.js добавить?
Отсутствует
Добавляю текст буфера обмена к подсказке url в строке адреса, но получается изменить только tooltip рамки. Там «aHTMLTooltip» и на http без шифрования подсказки адреса нет.
Помогите сделать правильно! (включая подсказку для http://…… сайтов)
(async id => { // добавить текст буфера обмена к подсказке url в строке адреса var listener = { // изменить aHTMLTooltip handleEvent(e){ let trg = e.target, clip = readFromClip(); // let box = document.getElementById("urlbar-input-container").childNodes[6]; //"urlbar-input-box" trg.tooltipText = gBrowser.currentURI.spec + "\n\nбуфер обмена (текст)\n" + crop(clip, 88 ,'…\n', 1); console.log(trg.tooltipText); }, } var events = ["mouseenter"], els = document.getElementById("urlbar-input"); els.addEventListener(events,listener,true); ucf_custom_script_win.unloadlisteners.push(id); ucf_custom_script_win[id] = { destructor(){ el.removeEventListener(events,listener,true); } } var addDestructor = nextDestructor => { var {destructor} = ucf_custom_script_win[id]; ucf_custom_script_win[id].destructor =()=> { try {destructor();} catch(ex){Cu.reportError(ex)} nextDestructor(); } } var readFromClip = ({clipboard} = Services, data = {}) => { try {let trans = Cc["@mozilla.org/widget/transferable;1"].createInstance(Ci.nsITransferable), flavor = `text/${parseInt(Services.appinfo.platformVersion) >= 111 ? "plain" : "unicode"}`; trans.init(docShell.QueryInterface(Ci.nsILoadContext)); trans.addDataFlavor(flavor); clipboard.getData(trans, clipboard.kGlobalClipboard); trans.getTransferData(flavor, data); if (data.value) return data.value.QueryInterface(Ci.nsISupportsString).data; } catch {return ""} }, crop = (z = "",cut = 30,ch = '…\n',g = 0) => { //обрезать/разбить текст z = z.match(new RegExp('.{1,'+ cut +'}','g')); cut = z.slice(-1); return g ? z.join(ch) : z[0] == cut ? z[0] : z[0] + ch +'…'+ cut; } })("ucf_clipboard_in_url");
Отредактировано Dobrov (26-05-2024 06:18:30)
Отсутствует
Помогите сделать правильно!
Вот уж нет!
Но, сама суть в том, что #urlbar-input — это HTML элемент,
поэтому, здесь нужен не tooltipText, а title
Кстати, к вопросу о кривых деструкторах.
Тут в деструкторе используется некий «el»,
который в коде нигде не определён.
Отсутствует
Да, попробуйте.
Добавил - ничего не изменилось.
Отсутствует
Вот уж нет!
Но ведь удобно, когда подсказка в строке адреса покажет ещё фрагмент буфера обмена.
Так проще проверять, какой буфер будем отправлять, например в yt-dlp… Не нужен hotkey Win+V, про него не все знают.
Отсутствует