Полезная информация

Mozilla Россия — свежие версии программ Mozilla, а также масса полезной информации по каждому продукту.

№70121-03-2023 12:39:04

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1160
UA: Firefox 111.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

b0ttle
Там много скриптов. Себе собирал по мере чтения темы и нужности лично мне.

Отсутствует

 

№70221-03-2023 13:34:37

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 78.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

6e73epo пишет

код, который делает кнопку съемной

Не совсем так.
Вопрос был в том, чтобы переместить её в хорошее место.


Она, вроде как, задумана использоваться не только
чтобы в неё мышью тыкать, но ещё и как анкор для каких-то нотификаций.
Поэтому её и скрывают не через display: none.
Ну, это всего лишь я так предполагаю.


Вобщем, не нашёл сходу подходящего топика, поэтому "chrome-document-interactive".

скрытый текст

Выделить код

Код:

//
(async topic => {
	var id = "unified-extensions-button", qid = `"${id}"`;
	var obs = async doc => {
		var btn = doc.getElementById(id);
		if (!btn) return;
		if (!Services.prefs.getStringPref("browser.uiCustomization.state").includes(qid))
			await doc.ownerGlobal.delayedStartupPromise;
		btn.setAttribute("removable", true);
		doc.getElementById("nav-bar-customization-target").append(btn);
	}
	Services.obs.addObserver(obs, topic);
	Services.obs.addObserver(function quit(s, t) {
		Services.obs.removeObserver(quit, t);
		Services.obs.removeObserver(obs, topic);
	}, "quit-application-granted");
})("chrome-document-interactive");

Отсутствует

 

№70321-03-2023 15:11:12

6e73epo
Участник
 
Группа: Members
Зарегистрирован: 06-05-2022
Сообщений: 192
UA: Firefox 106.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby, а если бы речь шла только о том, чтобы сделать кнопку съемной, например alltabs-button, то в только что приведенном вами коде не достаточно было бы просто сменить id на "alltabs-button" и присутствует что-то лишнее? Если мне не изменяет память, то раньше эта кнопка была съемной, а по какой причине эту возможность убрали, мне не ясно

Отредактировано 6e73epo (21-03-2023 15:14:01)

Отсутствует

 

№70421-03-2023 20:45:35

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 78.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

6e73epo пишет

например alltabs-button, то в только что приведенном вами коде не достаточно было бы просто сменить id на "alltabs-button" и присутствует что-то лишнее?

Ну, почему не достаточно, достаточно.


И да, лишнее, для alltabs-button, определённо, присутствует.
Собственно даже всё, кроме установки атибута "removable".
Иначе говоря
var obs = doc => doc.getElementById("alltabs-button")?.setAttribute("removable", true);

Отсутствует

 

№70521-03-2023 23:17:12

6e73epo
Участник
 
Группа: Members
Зарегистрирован: 06-05-2022
Сообщений: 192
UA: Firefox 106.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby, благодарю, получилось. Раньше для того, чтобы сделать кнопку съемной, я в манифесте через override подсовывал измененный файл.

Отсутствует

 

№70622-03-2023 20:45:22

b0ttle
Участник
 
Группа: Members
Зарегистрирован: 22-10-2020
Сообщений: 166
UA: Firefox 111.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

6e73epo
У меня что-то не открепляет, после перезапуска возвращает на место. Создал файл, вписал в scriptschrome(не load). А он не слушает. Вы же про кнопку Расширения?

Отсутствует

 

№70722-03-2023 22:31:35

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1419
UA: Firefox 111.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby пишет

Иначе говоря
var obs = doc => doc.getElementById("alltabs-button")?.setAttribute("removable", true);

А как использовать, (async () => { ... })(); , или типа того, нужен?

Отсутствует

 

№70823-03-2023 00:15:35

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 78.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

_zt пишет

А как использовать, (async () => { ... })(); , или типа того, нужен?

Искуство быть непонятным?
Мной такая конструкция используется вместо try {…} catch(…) {…}

Отсутствует

 

№70923-03-2023 05:22:25

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1419
UA: Firefox 111.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby
Для ucf используется

Выделить код

Код:

(async () => {
код
})();

для unified-extensions-button

Выделить код

Код:

(async topic => {
код
})("chrome-document-interactive");

А для alltabs-button этого не надо? Просто строку данную выше вписываем?

Отсутствует

 

№71023-03-2023 09:55:26

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 78.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

_zt
Что-то понятнее не стало.


Была просьба перерисовать код для unified-extensions-button
с custom_script_win.js под config.js


Поэтому обсёрвер, и даже async так же используется
по прямому назначению, поскольку внутри есть await


Затем, вдогонку, вопрос, как бы это могло выглядеть уже для alltabs-button
Соответственно, даден ответ, что чуть попроще

скрытый текст

Выделить код

Код:

(async topic => {
	var obs = doc => doc.getElementById("alltabs-button")?.setAttribute("removable", true);
	Services.obs.addObserver(obs, topic);
	Services.obs.addObserver(function quit(s, t) {
		Services.obs.removeObserver(quit, t);
		Services.obs.removeObserver(obs, topic);
	}, "quit-application-granted");
})("chrome-document-interactive");


А если для alltabs-button под custom_script_win.js
то хватит и одной строки
document.getElementById("alltabs-button").setAttribute("removable", true);
Тоже "DOMContentLoaded" (не "load").

Отсутствует

 

№71123-03-2023 18:03:54

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1419
UA: Firefox 111.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby
Я config.js имел ввиду. Спасибо за ответ, исчерпывающе.

Отсутствует

 

№71224-03-2023 03:11:15

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 537
UA: Firefox 112.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby
В [firefox] 112 такой код отказался работать:

скрытый текст

Выделить код

Код:

try {
(this.ucf_DblclickTabUpPage = {
	init(that) {
		gBrowser.tabContainer.addEventListener("dblclick", this);
	},
	handleEvent(e) {
		if ( e.button == 0 && e.target.matches("tab :scope:not(.tab-close-button):not(.tab-icon-sound), tab") ) {
			e.preventDefault();
			var vert = `javascript:(function(d,scrT){scrT=d.documentElement.scrollTop||d.body.scrollTop;if(scrT>window.innerHeight){localStorage['bmk_'+d.location.href]=scrT;scrollTo(0,0)}else{scrollTo(0,localStorage['bmk_'+d.location.href]||0)}})(document)`;
			gBrowser.loadURI(vert, { triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() });
		}
	},
}).init(this);
} catch(e) {}

В консоли пишет: Uncaught TypeError: 'uri' member of CancelContentJSOptions is not an object.
Не поможете реанимировать.


«The Truth Is Out There»

Отсутствует

 

№71324-03-2023 10:16:57

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 78.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

unter_officer пишет

'uri' member of CancelContentJSOptions is not an object.

Это Bug 1810141 - Loading URIs should be done with URI objects by default, rather than strings, to help avoid unnecessary parsing / fixup / allocations


То есть, либо
gBrowser.loadURI(Services.io.newURI(vert),
либо
gBrowser.fixupAndLoadURIString(vert,

Отсутствует

 

№71424-03-2023 11:33:28

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 537
UA: Firefox 112.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby
Большое спасибо.


«The Truth Is Out There»

Отсутствует

 

№71525-03-2023 09:48:22

b0ttle
Участник
 
Группа: Members
Зарегистрирован: 22-10-2020
Сообщений: 166
UA: Firefox 111.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Можно реанимировать?

скрытый текст

Выделить код

Код:

// https://web.archive.org/web/20211130053336/https://forum.mozilla-russia.org/viewtopic.php?pid=785023#p785023 ...
try {(() => {
    var id = "ucf-aom-button",
    label = "Дополнения",
    tooltiptext = "ЛКМ: Меню дополнений\nСКМ: Отладка дополнений\nПКМ: Открыть менеджер дополнений",
    img="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAt0lEQVR42mP4//8/AzK269D+zxDPAMYgNro8OsYUsGf4L5IrAMYgNskGPHrzkAHmAhCbZAPAglFAA6II2w5WC/ZzGEQDDMO9gCQGUmNYr4dhKANPBgdcAyEMMgSrAWA/R0H8jdcALN5iQHYWLABJMgBbABJjACiKweFHigHwgIW6Eux1UryA1QD0QISzsQQqVi+gKEBLfeguwhqIBEM5ihQD4rEoQHaBLwEDQOGBHKggNiyl4sreAEpLK4gRQN5TAAAAAElFTkSuQmCC",
    //img = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' height='16' width='16' viewBox='0 0 48 48'><g><rect x='0' y='0' width='48' height='48' rx='3' ry='3' style='fill:rgb(0, 120, 173);'/><path style='opacity:0.25;fill:black;' d='M 24,4.5 18,12 3,23.7 12,32.7 3.9,44.1 7.8,48 H 45 C 46.7,48 48,46.7 48,45 V 26.1 L 34.8,12.9 31.8,12.3 Z'/><path style='fill:white;' d='M 19.88,3 C 16.93,3 14.55,4.662 14.55,6.701 14.63,7.474 15.11,8.438 15.37,8.762 16.59,10.41 16.59,11.44 16.29,12.06 H 6.299 C 4.476,12.06 3,13.53 3,15.35 V 23.68 C 3.625,24 4.65,24 6.299,22.77 6.625,22.52 7.587,22.02 8.363,21.94 10.4,21.94 12.06,24.35 12.06,27.29 12.06,30.24 10.4,32.65 8.363,32.65 7.725,32.63 6.774,32.07 6.299,31.82 4.65,30.59 3.625,30.59 3,30.91 V 41.71 C 3,43.53 4.476,45 6.299,45 H 19.58 C 19.88,44.38 19.88,43.35 18.65,41.71 18.4,41.38 17.91,40.42 17.82,39.65 17.82,37.6 20.23,35.94 23.18,35.94 26.14,35.94 28.55,37.6 28.55,39.65 28.53,40.28 27.97,41.23 27.71,41.71 26.47,43.35 26.47,44.38 26.79,45 H 32.65 C 34.47,45 35.96,43.53 35.96,41.71 V 32.55 C 36.56,32.23 37.59,32.23 39.23,33.47 39.72,33.73 40.68,34.29 41.29,34.29 43.35,34.29 45,31.91 45,28.94 45,25.99 43.35,23.59 41.29,23.59 40.54,23.67 39.58,24.17 39.23,24.41 37.59,25.65 36.56,25.65 35.96,25.33 V 15.35 C 35.96,13.53 34.47,12.06 32.65,12.06 H 23.49 C 23.19,11.44 23.19,10.41 24.41,8.762 24.66,8.287 25.22,7.337 25.23,6.713 25.23,4.662 22.85,3 19.88,3' /></g></svg>",
    checked = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' height='16' width='16'><path d='M 3,7 7,11 13,5' style='fill:none;stroke:white;stroke-width:1;'/></svg>",
    show_version = false,
    show_description = true,
    user_permissions = true,
    show_hidden = true,
    show_disabled = true,
    enabled_first = true,
    exceptions_listset = new Set([

    ]),
    exceptions_type_listset = new Set([

    ]);
    if (!("AddonManager" in this))
        ChromeUtils.defineModuleGetter(this, "AddonManager", "resource://gre/modules/AddonManager.jsm");
    if (!("GlobalManager" in this))
        XPCOMUtils.defineLazyGetter(this, "GlobalManager", () => {
            const { GlobalManager } = ChromeUtils.import("resource://gre/modules/Extension.jsm", null);
            return GlobalManager;
        });
    var extensionOptionsMenu = {
        get alertsService() {
            delete this.alertsService;
            return this.alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
        },
        get clipboardHelp() {
            delete this.clipboardHelp;
            return this.clipboardHelp = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper);
        },
        get exceptions_type_listarr() {
            delete this.exceptions_type_listarr;
            var arr = ["extension", "theme", "locale", "dictionary"];
            if (!exceptions_type_listset.size)
                return this.exceptions_type_listarr = arr;
            return this.exceptions_type_listarr = arr.filter(type => !exceptions_type_listset.has(type));
        },
        async populateMenu(e) {
            var popup = e.target, doc = e.view.document;
            var addons = await AddonManager.getAddonsByTypes(this.exceptions_type_listarr);
            var addonsMap = new WeakMap(),
            setAttributesMenu = (mi, addon, extension) => {
                var permissions, uuid,
                props = {
                    label: `${addon.name}${show_version ? ` ${addon.version}` : ""}`,
                    class: "menuitem-iconic",
                    tooltiptext: `${(show_description && addon.description) ? `${addon.description}\n` : ""}ID: ${addon.id}${addon.isActive && (uuid = extension?.uuid) ? `\nUUID: ${uuid}` : ""}${(user_permissions && (permissions = addon.userPermissions?.permissions)?.length) ? `\nРазрешения: ${permissions.join(", ")}` : ""}\n${addon.optionsURL ? "\nЛКМ: Настройки" : ""}\nCtrl+ЛКМ: Копировать ID${uuid ? "\nShift+ЛКМ: Копировать UUID" : ""}${addon.creator?.url ? "\nCtrl+Shift+ЛКМ: Автор" : ""}${addon.homepageURL ? "\nСКМ: Домашняя страница" : ""}${!addon.isBuiltin ? "\nCtrl+СКМ: Просмотр источника" : ""}\nShift+СКМ: Просмотр источника во вкладке\nПКМ: Включить/Отключить${(!addon.isSystem && !addon.isBuiltin) ? "\nCtrl+ПКМ: Удалить" : ""}`,
                };
                for (let p in props)
                    mi.setAttribute(p, props[p]);
                if (addon.iconURL)
                    mi.setAttribute("image", addon.iconURL);
                var cls = mi.classList;
                addon.isActive ? cls.remove("ucf-disabled") : cls.add("ucf-disabled");
                addon.optionsURL ? cls.remove("ucf-notoptions") : cls.add("ucf-notoptions");
                addon.isSystem ? cls.add("ucf-system") : cls.remove("ucf-system");
                cls.add(`ucf-type-${addon.type}`);
            };
            addons.filter(a => !(a.iconURL || "").startsWith("resource://search-extensions/")).sort((a, b) => {
                var ka = `${(enabled_first ? a.isActive ? "0" : "1" : "")}${a.type || ""}${a.name.toLowerCase()}`;
                var kb = `${(enabled_first ? b.isActive ? "0" : "1" : "")}${b.type || ""}${b.name.toLowerCase()}`;
                return (ka < kb) ? -1 : 1;
            }).forEach(addon => {
                if (!exceptions_listset.has(addon.id) &&
                    (!addon.hidden || show_hidden) &&
                    (!addon.userDisabled || show_disabled)) {
                    let extension = GlobalManager.extensionMap.get(addon.id),
                    mi = doc.createXULElement("menuitem");
                    setAttributesMenu(mi, addon, extension);
                    mi._Addon = addon;
                    mi._Extension = extension;
                    popup.append(mi);
                    addonsMap.set(addon, mi);
                }
            });
            var click = e => {
                e.preventDefault();
                e.stopPropagation();
                this.handleClick(e);
            };
            popup.addEventListener("click", click);
            var listener = {
                onEnabled: addon => {
                    var mi = addonsMap.get(addon);
                    if (mi)
                        setAttributesMenu(mi, addon, mi._Extension);
                },
                onDisabled: addon => {
                    listener.onEnabled(addon);
                },
                onInstalled: addon => {
                    var extension = GlobalManager.extensionMap.get(addon.id),
                    mi = doc.createXULElement("menuitem");
                    setAttributesMenu(mi, addon, extension);
                    mi._Addon = addon;
                    mi._Extension = extension;
                    popup.prepend(mi);
                    addonsMap.set(addon, mi);
                },
                onUninstalled: addon => {
                    var mi = addonsMap.get(addon);
                    if (mi) {
                        mi.remove();
                        addonsMap.delete(addon);
                    }
                },
            };
            AddonManager.addAddonListener(listener);
            popup.addEventListener("popuphiding", () => {
                AddonManager.removeAddonListener(listener);
                popup.removeEventListener("click", click);
                addonsMap = null;
                for (let item of popup.querySelectorAll("menuitem"))
                    item.remove();
            }, { once: true });
        },
        handleClick(e) {
            var win = e.view, mi = e.target;
            if (!("_Addon" in mi) || !("_Extension" in mi))
                return;
            var addon = mi._Addon, extension = mi._Extension;
            switch (e.button) {
                case 0:
                    if (e.ctrlKey && e.shiftKey) {
                        if (addon.creator?.url)
                            win.gBrowser.selectedTab = this.addTab(win, addon.creator.url);
                    } else if (e.ctrlKey) {
                        this.clipboardHelp.copyString(addon.id);
                        win.setTimeout(() => {
                            this.alertsService.showAlertNotification(`${img}`, "ID в буфере обмена!", addon.id, false);
                        }, 100);
                    } else if (e.shiftKey) {
                        if (extension?.uuid) {
                            this.clipboardHelp.copyString(extension.uuid);
                            win.setTimeout(() => {
                                this.alertsService.showAlertNotification(`${img}`, "UUID в буфере обмена!", extension.uuid, false);
                            }, 100);
                        }
                    } else if (addon.isActive && addon.optionsURL)
                        this.openAddonOptions(addon, win);
                    win.closeMenus(mi);
                    break;
                case 1:
                    if (e.ctrlKey) {
                        if (!addon.isBuiltin)
                            this.browseDir(addon);
                    } else if (e.shiftKey)
                        this.browseDir(addon, win);
                    else if (addon.homepageURL)
                        win.gBrowser.selectedTab = this.addTab(win, addon.homepageURL);
                    win.closeMenus(mi);
                    break;
                case 2:
                    if (!e.ctrlKey) {
                        let endis = addon.userDisabled ? "enable" : "disable";
                        if (addon.id == "screenshots@mozilla.org")
                            Services.prefs.setBoolPref("extensions.screenshots.disabled", !addon.userDisabled);
                        else if (addon.id == "webcompat-reporter@mozilla.org")
                            Services.prefs.setBoolPref("extensions.webcompat-reporter.enabled", addon.userDisabled);
                        addon[endis]({ allowSystemAddons: true });
                    } else if (!addon.isSystem && !addon.isBuiltin) {
                        win.closeMenus(mi);
                        if (Services.prompt.confirm(win, null, `Удалить ${addon.name}?`))
                            addon.uninstall();
                    }
                break;
            }
        },
        openAddonOptions(addon, win) {
            switch (addon.optionsType) {
                case 5:
                    win.BrowserOpenAddonsMgr(`addons://detail/${encodeURIComponent(addon.id)}/preferences`);
                    break;
                case 3:
                    win.switchToTabHavingURI(addon.optionsURL, true);
                    break;
            }
        },
        browseDir(addon, win) {
            try {
                if (!win) {
                    let file = Services.io.getProtocolHandler("file")
                    .QueryInterface(Ci.nsIFileProtocolHandler)
                    .getFileFromURLSpec(addon.getResourceURI().QueryInterface(Ci.nsIJARURI).JARFile.spec);
                    if (file.exists())
                        file.launch();
                } else
                    win.gBrowser.selectedTab = this.addTab(win, addon.getResourceURI().spec);
            } catch (e) {}
        },
        addTab(win, url, params = {}) {
            params.triggeringPrincipal = Services.scriptSecurityManager.getSystemPrincipal();
            params.relatedToCurrent = true;
            return win.gBrowser.addTab(url, params);
        },
    };
    CustomizableUI.createWidget({
        id: id,
        type: "custom",
        label: label,
        tooltiptext: tooltiptext,
        localized: false,
        defaultArea: CustomizableUI.AREA_NAVBAR,
        onBuild(doc) {
            var btn = doc.createXULElement("toolbarbutton"), win = doc.defaultView,
            props = {
                id: id,
                label: label,
                context: "",
                tooltiptext: tooltiptext,
                type: "menu",
                class: "toolbarbutton-1 chromeclass-toolbar-additional",
            };
            for (let p in props)
                btn.setAttribute(p, props[p]);
            btn.addEventListener("click", e => {
                if (e.button == 0)
                    e.view.switchToTabHavingURI("about:debugging#/runtime/this-firefox", true, { ignoreFragment: "whenComparing", triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(), });
                else if (e.button == 2)
                    e.view.BrowserOpenAddonsMgr("addons://list/extension");
            });
            var mp = doc.createXULElement("menupopup");
            mp.id = `${id}-popup`;
            mp.addEventListener("contextmenu", e => {
                e.preventDefault();
                e.stopPropagation();
            });
            mp.addEventListener("popupshowing", e => {
                extensionOptionsMenu.populateMenu(e);
            });
            btn.append(mp);
            var btnstyle = "data:text/css;charset=utf-8," + encodeURIComponent(`
                #${id}, #${id}-popup menuitem {
                    list-style-image: url("${img}") !important;
                }
                #${id}-popup menuitem::after {
                    display: -moz-box !important;
                    content: "" !important;
                    height: 16px !important;
                    width: 16px !important;
                    padding: 0 !important;
                    border: 1px solid rgb(0, 116, 232) !important;
                    border-radius: 0 !important;
                    background-repeat: no-repeat !important;
                    background-position: center !important;
                    background-size: 16px !important;
                    background-color: rgb(0, 116, 232) !important;
                    background-image: url("${checked}") !important;
                    opacity: 1 !important;
                }
                #${id}-popup menuitem.ucf-disabled::after {
                    border-color: currentColor !important;
                    background-color: transparent !important;
                    background-image: none !important;
                    opacity: .6 !important;
                }
                #${id}-popup menuitem.ucf-disabled > label,
                #${id}-popup menuitem.ucf-notoptions > label {
                    opacity: .6 !important;
                }
                #${id}-popup menuitem.ucf-system > label {
                    text-decoration: underline !important;
                    text-decoration-style: dotted !important;
                }
                #${id}-popup menuitem > label {
                    margin-inline-end: 0 !important;
                }
                #${id}-popup menuitem > .menu-accel-container {
                    display: -moz-box !important;
                    padding: 4px !important;
                    margin: 0 !important;
                    opacity: 1 !important;
                }
                #${id}-popup menuitem > .menu-accel-container .menu-iconic-accel {
                    display: -moz-box !important;
                    margin: 0 !important;
                    height: 8px !important;
                    width: 8px !important;
                    border-radius: 4px !important;
                    background-color: transparent !important;
                    opacity: 1 !important;
                    font-size: 0 !important;
                }
                #${id}-popup menuitem.ucf-type-dictionary > .menu-accel-container .menu-iconic-accel {
                    background-color: rgb(227, 27, 93) !important;
                }
                #${id}-popup menuitem.ucf-type-locale > .menu-accel-container .menu-iconic-accel {
                    background-color: rgb(48, 172, 55) !important;
                }
                #${id}-popup menuitem.ucf-type-theme > .menu-accel-container .menu-iconic-accel {
                    background-color: rgb(219, 106, 0) !important;
                }
            `);
            try {
                win.windowUtils.loadSheetUsingURIString(btnstyle, win.windowUtils.USER_SHEET);
            } catch (e) {}
            return btn;
        },
    });
})();} catch (e) {}

Отсутствует

 

№71625-03-2023 10:01:21

LGS
Участник
 
Группа: Members
Зарегистрирован: 17-09-2022
Сообщений: 97
UA: Firefox 111.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Отсутствует

 

№71725-03-2023 10:22:11

b0ttle
Участник
 
Группа: Members
Зарегистрирован: 22-10-2020
Сообщений: 166
UA: Firefox 111.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

LGS
Похоже не работает, у меня не подхвотил с "//В фоне [System Principal]". Отдельно в файл, как в примере в шапке. И что-то вообще глухо, даже иконка не появилась. По мне, я что-то не то делаю. Даже старый код перестал показывать иконку. Странно. У вас работает?

Отредактировано b0ttle (25-03-2023 11:06:52)

Отсутствует

 

№71825-03-2023 11:04:57

b0ttle
Участник
 
Группа: Members
Зарегистрирован: 22-10-2020
Сообщений: 166
UA: Firefox 111.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

del

Отредактировано b0ttle (25-03-2023 11:05:39)

Отсутствует

 

№71925-03-2023 11:20:19

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1160
UA: Firefox 111.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

b0ttle
В моём профиле работает и называется extension_manager_button.js.

Отсутствует

 

№72025-03-2023 12:04:27

b0ttle
Участник
 
Группа: Members
Зарегистрирован: 22-10-2020
Сообщений: 166
UA: Firefox 111.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

xrun1
Во, спасибо. Просто еще до вашего профиля не дошел. Свое еще не перебрал, много чего уже естественно не работает у меня. Давно заходил.
Ваша работает, только как бы решить проблему с этим extensions(значок который не убирается). Можно в стилях убрать, по идее. Ну ладно, с этим сам разберусь наверно. Одной проблемой меньше. Теперь одним кликом вкл/выкл дополнение.

Отредактировано b0ttle (25-03-2023 12:06:04)

Отсутствует

 

№72125-03-2023 14:16:42

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1160
UA: Firefox 111.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

b0ttle пишет

как бы решить проблему с этим extensions(значок который не убирается)

№694 и дальше (решения от ув. Dumby).
P.S. Кнопки, стили, где есть русский язык, сохраняйте обязательно в кодировке 65001 (UTF-8) без BOM. Проблема неработоспособности может быть в этом.

Отредактировано xrun1 (25-03-2023 14:20:29)

Отсутствует

 

№72231-03-2023 12:44:10

LGS
Участник
 
Группа: Members
Зарегистрирован: 17-09-2022
Сообщений: 97
UA: Firefox 111.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby, вы не могли бы кнопку about:config из Add Toolbar Buttons 2021.9.5 сделать отдельной для UCF..?

Отсутствует

 

№72331-03-2023 18:19:37

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1419
UA: Firefox 111.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Отсутствует

 

№72431-03-2023 19:04:54

LGS
Участник
 
Группа: Members
Зарегистрирован: 17-09-2022
Сообщений: 97
UA: Firefox 111.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

_zt, отлично, спасибо. В итоге, ваш вариант сейчас "причесываю".

Dumby, надеюсь, что не успел время отобрать. Уже не надо, выше подсказали.

Отсутствует

 

№72531-03-2023 20:05:09

LGS
Участник
 
Группа: Members
Зарегистрирован: 17-09-2022
Сообщений: 97
UA: Firefox 111.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

_zt, а причесать то не получается. Теперь не знаю как about:cfg заменить на chrome://user_chrome_files/content/aboutconfig/config.xhtml. Замена в строке aboutoldurl = "about:cfg" ничего не дает. Мне, в принципе, кнопка и нужна была для старого about:config.
В Add Toolbar Buttons адрес легко правится в parent.js. А здесь уперся.

Added: причесал, работает.

Отредактировано LGS (31-03-2023 22:38:17)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]