На старых версиях работать не будет
Vitaliy V.
Очень рады вас видеть! Огромное спасибо за новую версию.
Вопрос. Какая минимальная версия будет работать с новой сборкой?
Отредактировано unter_officer (03-03-2024 15:25:21)
«The Truth Is Out There»
Отсутствует
-
Отредактировано Vitaliy V. (08-08-2024 15:03:19)
Отсутствует
Полноценно с 117, но можно в 115 запустить, не будут работать некоторые стили (в том числе настройках)
Спасибо за ответ. Я уже успел интереса ради немного потестировать на 115 ESR.
В целом работает нормально, но проблемки со стилями, как вы и сказали, присутствуют.
Глубже копать не стал. Откатился на старую версию UCF.
«The Truth Is Out There»
Отсутствует
-
Отредактировано Vitaliy V. (08-08-2024 15:03:06)
Отсутствует
Хорошо т. к. 128 ESR выйдет в июле судя по графику, сделал патч для 115 ESR,
заменить файлы css из этого архива https://github.com/VitaliyVstyle/Vitali … 15_ESR.zip
Vitaliy V., большое спасибо за патч. Теперь на 115 ESR всё нормально.
Что касается 128 ESR, то для этого надо переходить на Win10+, а я пока этого не планирую.
«The Truth Is Out There»
Отсутствует
вот эта кнопка отвалиться когда выпилят jsm?
В этом смысле — вроде не должна.
Vitaliy V.
Насчёт UcfPrefs.mjs. Сперва по Fluent'у.
Лис 124 ru. Поставил langpack'и uk и de.
STR: Включаю de, рестарт. Открываю «Настройки UserChromeFiles»,
окно локализировано как ru, это нормально, сборка ведь ru, а de отсутствует.
Теперь переключаюсь на uk.
ER: Локализация в окне меняется на uk, ведь uk есть.
AR: Ничего не происходит, локализация остаётся ru.
Да, я понимаю, что STR довольно экзотичен.
Но, может быть, заменить appLocalesAsBCP47 на availableLocales
И по коду.
Первая строка var global = Cu.getGlobalForObject({}); Разве это не globalThis?
И, UcfPrefs.global да, полезно пробросить, но почему геттер, а не просто значение?
UcfPrefs.defineGlobalGetters есть, но в само́м UCF нигде не используется.
UcfPrefs.defineLazyGlobalGetters есть, но нужно ли это?
Вот, добавил в config.js, в самое начало, ещё до антиподписячего (мне можно),
чтобы не было никаких сомнений, что там что-то появится только когда-то позже.
// (globalProperties => { var result = []; var global = Cu.getGlobalForObject(Cu); var max = Math.max(...globalProperties.map(prop => prop.length)) + 2; for(var name of globalProperties) { var desc = global.Object.getOwnPropertyDescriptor(global, name); if (desc) { for(var key in desc) { var type = typeof desc[key]; if (type != "boolean") desc[key] = type; } } result.push(name.padEnd(max) + JSON.stringify(desc)); } Services.obs.addObserver(async function test(win, topic) { Services.obs.removeObserver(test, topic); await win.gBrowserInit.idleTasksFinishedPromise; var text = encodeURIComponent(result.join("\n")); var url = "data:text/plain;charset=utf-8," + text; var gb = win.gBrowser; gb.selectedTab = gb.addTrustedTab(url); }, "browser-delayed-startup-finished"); })([ "atob", "btoa", "Blob", "CSS", "CSSRule", "DOMParser", "Event", "File", "FileReader", "InspectorUtils", "URL", "XMLHttpRequest", "fetch", "L10nFileSource", "L10nRegistry", "Localization", // test non-existens "absent", "alert", // candidates "TextEncoder", "TextDecoder", ]);
Насколько я вижу, все свойства уже есть, и у всех сразу value (не get).
Таким образом, lazy-фикация представляется излишней,
можно просто сразу пробросить ссылки, и все дела.
Кстати, почему только эти.
Мне вот за Text{En, De}coder особенно обидно было ещё в прошлом UCF.
Отредактировано Dumby (04-03-2024 08:13:09)
Отсутствует
UserChromeFiles обнова https://github.com/VitaliyVstyle/Vitali … hromeFiles
Сделал всё по инструкции ...никаких изменений. Видимо чего-то не понимаю. 125.0a1 (2024-03-03) (64-разрядный)
Отредактировано grom17 (04-03-2024 13:01:50)
Отсутствует
Сделал всё по инструкции ...никаких изменений.
В v124.0beta6 работает. Кэш автозапуска очищал? Сразу должны быть видны три кнопки доп. тулбаров и доступны Промежуток и Разделитель. Зайди в настройки UCF и в нижней части проставь все птички, по умолчанию они все сняты. Не все скрипты, работающие в Aris-t2, работают в UCF.
Добавлено 04-03-2024 14:17:46
А вот кнопку "Open settings" button я так и не смог отыскать, она, видимо, открывает настройки UCF в сепаратном окне.
Отредактировано fuchsfan (04-03-2024 14:17:46)
Отсутствует
AR: Ничего не происходит, локализация остаётся ru.
Да, я понимаю, что STR довольно экзотичен.
Но, может быть, заменить appLocalesAsBCP47 на availableLocales
Т. е. не происходит без перезагрузки ? Так и не было цели чтобы локали изменялись без перезагрузки, на панелях и кнопках UCF вообще ничего не происходит там просто при старте браузера один раз выбирается наиболее подходящая локаль и все, DOMLocalization не следит за ними.
А appLocalesAsBCP47 вполне достаточно для этого
Первая строка var global = Cu.getGlobalForObject({}); Разве это не globalThis?
И, UcfPrefs.global да, полезно пробросить, но почему геттер, а не просто значение?
В XPCOMUtils.sys.mjs так и записано
и да Cu.getGlobalForObject({}) == globalThis
В чем проблемма геттера?
UcfPrefs.defineGlobalGetters есть, но в само́м UCF нигде не используется.
Это я хотел использовать но потом не потребовалось, но оставил может пригодится для использования в пользовательском коде
Таким образом, lazy-фикация представляется излишней,
можно просто сразу пробросить ссылки, и все дела.
Возможно излишняя но мне нравится lazy, не используешь не загружается лишнее
Кстати, почему только эти.
Мне вот за Text{En, De}coder особенно обидно было ещё в прошлом UCF.
Хм что-то не вижу где в прошлом UCF это было? Но ок добавлю
Добавлено 04-03-2024 19:28:26
А вот кнопку "Open settings" button я так и не смог отыскать
Значек шестеренка, в зависимости от локали может отличаться, например для en-US так
label кнопки:
Settings UserChromeFiles
tooltip:
Left-click: Open UserChromeFiles settings in window
Midle-click: Open about:config
Right-click: Open UserChromeFiles settings in the tab
И вообще она по умолчанию находится на дополнительной панели
Отредактировано Vitaliy V. (04-03-2024 19:28:26)
Отсутствует
Vitaliy V.
Мне кажется лишним код с разными переводами. Может оставить просто английский, кому надо, сами переведут в коде, вручную. Пытался выпилить не нужное, как обычно:
"ucf-open-about-config-button", - пользуюсь через ucf_hookClicks.js
"ucf-additional-vertical-spring", - special_widgets(из-за space, separator)
"ucf-additional-top-spring",
"ucf-additional-bottom-spring",
"ucf-restart-app", - через ucf_hookClicks.js + hotkey
"ucf-view-history-sidebar-button", - через ucf_hookClicks.js + hotkey
"ucf-view-bookmarks-sidebar-button", - тоже самое
"ucf-open-directories-button", - через ucf_hookClicks.js + hotkey
И их в переводе не выпилишь(плохо разбираюсь как), мне по сути нужно только вертикальная, изредка верхняя. А тут какие-то переводы еще добавились) Итак путаюсь в коде, наверняка выпиливая костыльно и не все. Многие пользуются, тем же Aris-t2, на соседнем форуме. Так он без переводов, как и многие другие альтернативы. Лишние переводы, как по мне, лишнее. На костыль похоже)
Это лишь мой каприз, может другим нужны переводы. Мне и одного вполне хватает, если код от этого будет меньше и выпиливать будет легче. Да, можно просто под коврик спрятать все эти потроха, но они и там в глаза бросаются. Вместо одного spring, висят аж 4) Можно не прятать, оставляя на местах. Но все равно, не то. Зачем их именовать по-разному, чтобы не путаться? В коде, их тоже так и хочется выпиливать, возможно это лишь мой причуды и не критично.
(В общем, пытался их убрать в "async formatMessages(){}", файл UcfPrefs.mjs, и у меня пропали пункты выбора, раскрыть-спрятать вертикальную панель и другие. Пришлось их вернуть, а так, вроде везде выпилил).
Отредактировано b0ttle (04-03-2024 20:09:34)
Отсутствует
не было цели чтобы локали изменялись без перезагрузки
OK, принято.
В XPCOMUtils.sys.mjs так и записано
Точно. Запись довольно старая, старше чем globalThis.
В чем проблемма геттера?
Проблем нет никаких.
Геттер это функция. Обратился к свойству — считай вызвал функцию.
А функция всегда возвращает одно и то же.
оставил может пригодится для использования в пользовательском коде
OK, принято.
Возможно излишняя но мне нравится lazy, не используешь не загружается лишнее
Наоборот.
В цикле всё равно идёт перебор свойств, где для каждого из них
низачем создаётся своя отдельная функция и назначается как геттер.
Когда случится обращение к этому свойству,
геттер-функция низачем проверит, есть ли такое свойство в SystemGlobal,
ведь оно есть и было, перезапишет как свойство сандбокса, и вернёт значение.
Создание множества этих функций, которые проверяют уже заранее известное,
и возвращающих нечто заведомо существующее — это и есть «лишнее».
Хм что-то не вижу где в прошлом UCF это было?
Да-да, не было. Именно поэтому мне и было странно чем они впали в немилость.
Вообще-то да, это проблема, как выбрать то, что следует пробросить.
В смысле как определить наиболее популярное.
Гобальные свойства проброшены не все, но их хотя бы немного,
а если брать и что-то вроде L10nRegistry, то это и вовсе не гобальное свойство,
но нечто DOM-idl'ское, а такого добра в SystemGlobal целый вагон.
Например, IOUtils и PathUtils кажутся вполне достойными кандидатами.
Отсутствует
Мне кажется лишним код с разными переводами. Может оставить просто английский, кому надо, сами переведут в коде
Предлагаете переводить юзерам в коде потому что вам сложно разобраться с кодом а им типа легко.
Не не вариант с локалью проще добавить новый язык просто создать в папке locales папку с названием идентификатора нужного языка и в ней файлы .ftl с переводом.
Мне и одного вполне хватает, если код от этого будет меньше и выпиливать будет легче. Да, можно просто под коврик спрятать все эти потроха, но они и там в глаза бросаются. Вместо одного spring, висят аж 4
Первое пробовали отключить в настройках ненужные панели? Вместе с панелями отключаются и соответствующие кнопки, интервалы
И в коде лучше не выпиливать если не ориентируетесь, можно добавить данный код в custom_script.js или в другой подключенный в scriptsbackground
и эти кнопоки, интервалы будут удалятся до того как попасть на панели или хранилище
(ids => ({ init() { CustomizableUI.addListener(this); Services.obs.addObserver(this, "browser-delayed-startup-finished"); }, observe() { Services.obs.removeObserver(this, "browser-delayed-startup-finished"); CustomizableUI.removeListener(this); }, onWidgetCreated(aWidgetId) { if (ids.has(aWidgetId)) CustomizableUI.destroyWidget(aWidgetId); }, }).init())(new Set([ "ucf-open-about-config-button", "ucf-additional-vertical-spring", "ucf-additional-top-spring", "ucf-additional-bottom-spring", "ucf-restart-app", "ucf-view-history-sidebar-button", "ucf-view-bookmarks-sidebar-button", "ucf-open-directories-button", ]));
Отредактировано Vitaliy V. (05-03-2024 01:27:01)
Отсутствует
Наоборот.
В цикле всё равно идёт перебор свойств, где для каждого из них
низачем создаётся своя отдельная функция и назначается как геттер.Когда случится обращение к этому свойству,
геттер-функция низачем проверит, есть ли такое свойство в SystemGlobal,
ведь оно есть и было, перезапишет как свойство сандбокса, и вернёт значение.
Да это понятно но следует добавить что это происходит только один раз при первом вызове
Создание множества этих функций, которые проверяют уже заранее известное,
и возвращающих нечто заведомо существующее — это и есть «лишнее».
Так а где гарантии что это сейчас заведомо существующее не станет потом просто существующим или вообще не существующим.
А лишнее для меня то что не требуется для работы основных функций UserChromeFiles
Отредактировано Vitaliy V. (05-03-2024 02:30:41)
Отсутствует
Vitaliy V. Спасибо. До меня потом дошло, что можно просто оставить все как есть. Если не пытаться выпилить сразу, то потом может и привыкнуть можно. Про настройки, что-то не подумал. Код попробую. Чисто мой закидоны)
Отсутствует
добавить что это происходит только один раз при первом вызове
Да, разумеется. Но могло бы не происходить вовсе.
а где гарантии что это сейчас заведомо существующее не станет потом просто существующим или вообще не существующим
Ну так можно вообще обо всём сказать.
Хорошо, пусть сочтётся как осторожность.
Кстати, Console.sys.mjs же собираются выпилить,
неплохо бы что-то предусмотреть на такой случай.
Ещё, при переключении тулбаров посредством контекстного меню,
BrowserUsageTelemetry мусорит в консоль записью "widgetId is undefined".
Когда был проект встроить в UCF дебаггер,
то я просто добавлял id'шники в BROWSER_UI_CONTAINER_IDS
А теперь, наверно, надо какую-то функцию переопределять.
Ну, или ничего не делать, в консоль всё равно никто не смотрит.
Отсутствует
Кстати, Console.sys.mjs же собираются выпилить
Да уж 6 лет выпиливали Console.jsm не выпилили, выпилили jsm теперь Console.sys.mjs выпиливают
Когда был проект встроить в UCF дебаггер
Что за проект? Нашел только настройки
extensions.user_chrome_files.debug
extensions.user_chrome_files.expert
Добавлено 05-03-2024 18:32:38
BrowserUsageTelemetry мусорит
Её вообще выпиливать нужно а не id'шники в BROWSER_UI_CONTAINER_IDS добавлять
Отредактировано Vitaliy V. (05-03-2024 18:35:57)
Отсутствует
Что за проект?
Поскольку никто не мог знать, что нарисуется UCF 2024 от самого́ Автора,
а желающих обезопасить педыдущий UCF от последствий завершения JSM-геноцида
как-то не наблюдалось, то чувствовалось, что отдуваться придётся мне.
Я уже упоминал, что, увы, для некоторых задач, необходим дебаггер.
Вот когда приступил пробовать править UCF, решил, что он будет встроен.
Собственно, ничего особо сделать не успел,
пока там подформатировал всякий xml-like стафф в более человеко-читаемый вид,
пока заменил все четырёх-пробелья на благородную tab'уляцию,
случилось то, что случилось, и проект, соответственно, был мгновенно остановлен.
И это, несомненно, к лучшему.
Так вот, в config.js предполагалось оставить только самый минимум,
определение nsIFile'а с путём %профиль%/chrome/user_chrome_files/init.js
проверка, что он существует, и является файлом,
и загрузка этого init.js в объект {file: этот_файл};
А сырой набросок init.js был такой, скину какой был.
Не годен ни на что, но лишь составить представление о чём речь.
Дебаггер, собственно, это некая цитата из ранее добавленного в CB,
ну и в антиподписячем подобный есть, но без наворотов.
(url => { (file = file.parent).append("user_chrome.manifest"); if (!file.exists() || !file.isFile()) return; Components.manager.QueryInterface(Ci.nsIComponentRegistrar).autoRegister(file); var sysp = Cu.getObjectPrincipal(this), SB = opts => Cu.Sandbox(sysp, opts); var sb = SB({sandboxName: "UserChromeFiles", wantGlobalProperties: ["ChromeUtils"]}); Services.scriptloader.loadSubScript(url, sb); var unload = ["unload", e => e.target.ownerGlobal.windowRoot.removeEventListener(...ins), {once: true}]; var ins = ["DOMDocElementInserted", e => { var win = e.target.ownerGlobal; if (win.windowRoot.ownerGlobal == win) { if (win.location == "about:blank") return; win.addEventListener(...unload); } win.isChromeWindow && sb.user_chrome.initWindow(win); }]; Services.obs.addObserver(win => win.windowRoot.addEventListener(...ins), "domwindowopened"); var re = Cu.reportError; var sandbox = SB({freshCompartment: true}); Cc["@mozilla.org/jsdebugger;1"].createInstance(Ci.IJSDebugger).addClass(sandbox); var dbg = sb.dbg = new sandbox.Debugger(); var g = Cu.getGlobalForObject(Cu); var gref = dbg.gref = dbg.makeGlobalObjectReference(g); var envRef = function(name) { var val = this.find(name).getVariable(name); return val.unsafeDereference?.() || val; } dbg.ref = (arg, func, glob) => { var go = glob === undefined ? g : glob || Cu.getGlobalForObject(func); var has = dbg.hasDebuggee(go); has || dbg.addDebuggee(go); try { var ref = go == g ? gref : dbg.makeGlobalObjectReference(go); var env = ref.makeDebuggeeValue(func).environment; var cn = arg.constructor.name; if (cn == "Object") for(var name in arg) try { env.find(name).setVariable(name, ref.makeDebuggeeValue(arg[name])); } catch(err) {re(err);} else return cn == "Array" ? arg.map(envRef, env) : envRef.call(env, arg); } catch(ex) {re(ex);} finally {has || dbg.removeDebuggee(go);} } // Meds. Prevent "widgetId is undefined" console spam // from BrowserUsageTelemetry.sys.mjs when toggle ucf-toolbars. if (sb.UcfPrefs.vertical_top_bottom_bar_enable) try { var exp = ChromeUtils.importESModule("resource:///modules/BrowserUsageTelemetry.sys.mjs"); var ids = dbg.ref("BROWSER_UI_CONTAINER_IDS", exp.BrowserUsageTelemetry.init); ids && ["top", "vertical", "bottom"].forEach(pos => ids[`ucf-additional-${pos}-bar`] = ""); } catch(ex) {re(ex);} })("chrome://user_chrome_files/content/user_chrome.js");
Пока нынешний Ку.import() ещё с нами можно использовать его.
Вообще, метод, конечно, волшебный. Возвращает некий прокси,
куда проброшен весь стафф — var, let, const, function, class, всё вообще.
Это arai подогнал какую-то .cpp-магию.
Но метод сгинет вместе с JSM.
И как тогда получить ссылку? Вроде никак. Только дебаггером.
Отсутствует
Сделал всё по инструкции ...никаких изменений. Видимо чего-то не понимаю. 125.0a1 (2024-03-03) (64-разрядный)
В 123 тоже не работает ?
Add, если не работает, тогда опишите что сделали, желательно по пунктам!
Add, ладно.... user_chrome_files. С остальным надеюсь сами разберётесь.
Отредактировано kokoss (06-03-2024 19:19:57)
Win7
Отсутствует
Я уже упоминал, что, увы, для некоторых задач, необходим дебаггер
Ну именно для BrowserUsageTelemetry я бы не стал добавлять его, но если нужно для некоего кода в custom_script.js что если добавить этот модуль
он делает часть работы ?
ChromeUtils.defineESModuleGetters(scope, {
...
addDebuggerToGlobal: "resource://gre/modules/jsdebugger.sys.mjs",
addSandboxedDebuggerToGlobal: "resource://gre/modules/jsdebugger.sys.mjs",
});
Отсутствует
именно для BrowserUsageTelemetry я бы не стал добавлять его, но если нужно для некоего кода
Не-не, конечно же, в первую очередь, для пользовательского кода.
Просто когда он уже есть, возникает соблазн
воспользоваться им и для усмирения BrowserUsageTelemetry.
Мягонькое такое воздействие, никакого насилия,
добавляем id'шники как пустые строки, и это дело умолкает.
Если будет принято решение заткнуть BrowserUsageTelemetry
как-то иначе, или не делать с этим ничего, тогда дебаггер мог бы быть lazy getter'ом.
Наверно лучше как свойство UcfPrefs. Он определён как в сандбоксе, так и в окнах браузера.
В других окнах UcfPrefs можно просто импортировать, если вдруг понадобится.
Вот, поискал, нашёл, например, такой код.
Здесь TransactionsHistory не вытащишь никак, когда исчезнет Cu.import()
А с дебаггером просто пишем UcfPrefs.dbg.ref("lazy", PlacesTransactions.undo).TransactionsHistory
что если добавить этот модуль
он делает часть работы ?
Да, указанные методы этого модуля делают часть работы.
Но только совсем небольшую, только самое начало.
Плюс, они делают нечто совсем, в данном случае ненужное, вызывают initPromiseDebugging();
Таким образом, добавление этого модуля не представляется полезным.
Отредактировано Dumby (06-03-2024 18:20:20)
Отсутствует
Dumby
https://github.com/VitaliyVstyle/Vitali … fs.mjs#L46
Проверил сработало на BROWSER_UI_CONTAINER_IDS и код по ссылке
Но чтобы не мусорила BrowserUsageTelemetry просто переопределил
функцию onViewToolbarCommand https://github.com/VitaliyVstyle/Vitali … ar.js#L143
Также убрал Lazy, побавил TextEncoder TextDecoder https://github.com/VitaliyVstyle/Vitali … me.js#L179
Отредактировано Vitaliy V. (07-03-2024 00:34:54)
Отсутствует
О, спасибо!
Тогда код «Восстановить удалённое», будет, наверно, таким
(async sep => { if (!sep) return; var key = "hasRemoveTransaction"; var raws = UcfPrefs.dbg.ref("lazy", PlacesTransactions.undo).TransactionsHistory.proxifiedToRaw; raws[key] ??= entry => { for(var transaction of entry) { if (raws.get(transaction) instanceof PlacesTransactions.Remove) return true; } } var menuitem = document.createXULElement("menuitem"); for(var args of Object.entries({ closemenu: "single", class: "menuitem-iconic", id: "placesCmd_undoRemove", label: "Восстановить удалённое", oncommand: "PlacesTransactions.undo().catch(Cu.reportError);", image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAAEd0lEQVRIx53Ve2yW5RkG8N/7ft8Hxa/9CgjSSDnMA4xVTUMQWzadhzhnjSCC0y0jSjom+JdGp844ZhSjHLJsowaNZoCCHOWglXGoQbo2fBW3obDNUBfXKpsUVhxn6OHdH8+31GXGmL3/3M913ffzPNed93qeBxvmI8umCNjyPFEDSRJw40qKa9jyHSbdzY77Ar+9FTvZ+nHAb9T7P76YcwlOktlBdJia2SSthfRvaR/Mync5tp85Q2mbEHJ/X0bqRTpOBJyehog3C3j1HV9RQP91xG9T8z2SofyphMELWH4zW5s40s7kQ/T0cnYfXfPD1OgM0TlGzSN1DZkzxG1EdURjaa9HCfddEupfuSkIfHXJ5wVENA8Iw9QcRnbzXj31++g8w+WVZHMhXzaKhu2MGMtd36f5CTrn8WAJyf001KCYpA6dDBtLlOfoYuI6kgp6XuLsbhQRfw39ovDPx7/JgYS1b3NkCxcvoPgTevIULyFVTm4jyinp4uRJiirYt5BMLc15kvE0lnCsgZaE2wdx6LVCo9/ghQn4LhdFxEOonELv8ogVV9Iyjd9fx8T1FE2nq5XSQWQuJbsmrJH9JclMsldhFsW3EU0iuxsb6f9zTA3dHj1J1yPsKaPrIOtnkn6KDY2cvYF/vkfmINGuiPdnUD6Pd/7Mur/x0RCqXqTfj+m5glyO1B8ovR1pijeil6KvBw8V1QaB/QYWzNgSYu+TmMm5GVhKT47OBWR28kgnvxvKS/OjvuMGuTSr72FtBR/WctNe4l+H3GUt7DxB2TKe+CmnF5IZRzSZzFmS4wy9n2QGY2eR3Mx193DqAao+4vh04lZS2/EkQyqo7cWux4Kjwf4gKF3N5hEs+QsLlwVuVRPLP2FeTSh95hZSpSx6OOAkwWCWLSEqYWVz4JtLqd3GiuX0/oS6XKjd/BQbF6SRJynij4eJKpl7WSg8cCdzxjHjH3QuIsaorQx7NCx8QQdxCYM2kzxL423BbGN6SP+I6tmcO86hahqu4MA2To3mX+eTxbA2er6VJjcA/Yl2kOzlrutJxrDraaI1XH09j3fQVk7pcG5sCgIOttLVzejpmMPrnxJvYnIZXelwxGHTCOaX0PorsmUMOC/wpeNofg4fjg9EW3+k6CzcYJ99M7h6fSfxFFJrMZzFm0I+fzXxlTQ1EHf3eSlJyI3mlYGs/yEPx4F7/NkQ11zEymFhnDoY9RnwcHmIZ34Q1CcTkBD9FSM58gu8SmUHbmVuJbYRt2AiE/cwZT/tG3h+Gh29lH3A+VPZ+zMq1rHwcq6tY1U31ReQXPgFt3M+/9+xJRvM9f5S3NnX6btLqfqYt1p44xQrFnH0aX6zmBXIj+Hae0N95qG+ea/PJjrB7tV47csE7CzEJqKXyTcW8CquaibfwTOX0FjPLSfYk+G8XWyb+rlTUcndVUQjWXOK+FiBn/QfQen/FVBVVdhoc4FIkczqM5WBvPMWp4fQMpzFHeEN2NCFCcyNSH2b1AiSl3nhVnrnkjpNkqP9jrBvdzX8G2rIlxvMK3a7AAAAInpUWHRTb2Z0d2FyZQAAeNorLy/Xy8zLLk5OLEjVyy9KBwA22AZYEFPKXAAAAABJRU5ErkJggg==", })) menuitem.setAttribute(...args); var desc = Object.getOwnPropertyDescriptor(XULElement.prototype, "hidden"); var {set} = desc; desc.set = () => { var entry = PlacesTransactions.topUndoEntry; set.call(menuitem, !entry || !raws[key](entry)); } Object.defineProperty(menuitem, "disabled", {}); Object.defineProperty(menuitem, "hidden", desc); sep.before(menuitem); })(document.getElementById("placesContext_deleteSeparator"));
Кстати, и в геттере UcfPrefs.dbg
строка var g = Cu.getGlobalForObject(Cu); — это тоже globalThis
Это глобальный объект всех модулей.
Такой единственный, такой один на весь процесс. Он.
Но чтобы не мусорила BrowserUsageTelemetry просто переопределил
функцию onViewToolbarCommand https://github.com/VitaliyVstyle/Vitali … ar.js#L143
Да, вижу, теперь в консоли тишина.
data:image/png;base64,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
побавил TextEncoder TextDecoder https://github.com/VitaliyVstyle/Vitali … me.js#L179
Благодарю, надеюсь достойны.
И, я смотрю, console изменилась. Это тоже хорошо.
Также убрал Lazy
Ну здесь я не смог тебя убедить просто сразу скопировать
их с глобального объекта модулей, поэтому просто скажу
самому себе, что я был недостаточно убедителен.
Отредактировано Dumby (07-03-2024 10:38:53)
Отсутствует
сразу скопировать
их с глобального объекта модулей
Это типа оператором присваивания ?
scope.TextEncoder = UcfPrefs.global.TextEncoder
или же Object.assign() использовать
Можно ещё в виде прототипа все унаследовать
sandboxPrototype: UcfPrefs.global,
но тогда нужно будет опять загружать CustomizableUI и UcfPrefs
Отсутствует
Это типа оператором присваивания ?
Да-да, именно им.
Они всё равно перебираются в цикле, вот прямо там и присвоить.
Можно ещё в виде прототипа все унаследовать
sandboxPrototype: UcfPrefs.global
Ууу, мысль, несомненно, интересная.
Это был бы эпический сдвиг само́й парадигмы.
Но тогда, да, действительно, мы получим вообще всё и сразу.
тогда нужно будет опять загружать CustomizableUI и UcfPrefs
Не загружать, а сослаться. Они уже загружены.
Отсутствует