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

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№87627-05-2023 22:22:51

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

Re: UCF - ваши кнопки, скрипты…

Dumby
Есть ваш код для переключения стиля https://forum.mozilla-russia.org/viewto … 42#p795542, я его использую для переключения стиля скрытия панели вкладок.
Использую с reg();, т.е. с инициализацией при старте браузера.
При открытии некоторых дополнительных окон, скрипт самопроизвольно переключает стиль. Открылось новое окно, например, "новое приватное" или окно NoScript (NoScript запросы в окнах открывает) и стиль переключился - вкладки появились, открыл еще одно окно и стиль переключился - вкладки пропали (причем во всех окнах имеющих панель табов). На другие окна, например, менеджера кук или информации о странице, скрипт так не реагирует.
Если стиль использовать не из скрипта, то он себя так не ведет.
Можете это поправить?

Отсутствует

 

№87728-05-2023 13:18:43

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

Re: UCF - ваши кнопки, скрипты…

_zt пишет

Использую с reg();, т.е. с инициализацией при старте браузера.

Мне предлагается угадать,
куда именно вызов reg() был вписан?


Угадатель из меня никакой.
Хотелось бы думать, что сразу после var reg = …;
но, видимо, это не так.

Отсутствует

 

№87828-05-2023 13:23:49

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

Re: UCF - ваши кнопки, скрипты…

Dumby
Не, после btn._handleClick = reg;
   
Спасибо, теперь нормально.

Отредактировано _zt (28-05-2023 13:25:54)

Отсутствует

 

№87902-06-2023 15:24:08

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

Re: UCF - ваши кнопки, скрипты…

egorsemenov06
Что-то я не представляю как такое сделать.


Если бы иметь уверенность, что exe'шник будет
запускаться только этим кодом, тогда ещё можно попробовать.


Но ведь он может быть запущен в любой момент иным способом,
и, наверно, получается, что это бесполезная писанина для custom_script.js

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

Выделить код

Код:

(async url => {

	var path = ".......\\opera-proxy.windows-386.exe";

	var icons = [
		'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg"><rect fill="limegreen" x="0" y="0" width="16" height="16"/></svg>',
		'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg"><rect fill="red" x="0" y="0" width="16" height="16"/></svg>'
	];
	var labels = [
		"Active",
		"Not Active"
	];
	var tooltips = [
		"Active",
		"Not Active"
	];

	var type = "network.proxy.type";
	try {var exp = ChromeUtils.importESModule(url + "sys.mjs");}
	catch {exp = ChromeUtils.import(url + "jsm");}

	exp.PageActions.addAction(new exp.PageActions.Action({
		title: labels[1],
		iconURL: icons[1],
		pinnedToUrlbar: true,
		id: "ucf-opera-proxy",
		onPlacedInUrlbar(node) {
			var pref = Services.prefs.getIntPref(type) == 1, proc, active;
			var upd = () => {
				var state = pref && Boolean(proc);
				if (state == active) return;

				var ind = +!(active = state);
				this.setIconURL(icons[ind]);
				this.setTitle(labels[ind]);
				this.setTooltip(tooltips[ind]);
			}
			this["nsPref:changed"] = () => upd(
				pref = Services.prefs.getIntPref(type) == 1
			);
			this["process-finished"] = this["process-failed"] = () => upd(proc = null);

			this["quit-application-granted"] = t => {
				Services.obs.removeObserver(this, t);
				Services.prefs.removeObserver(type, this);
				proc?.kill();
			}
			this.observe = (s, topic) => this[topic](topic);
			Services.prefs.addObserver(type, this);
			Services.obs.addObserver(this, "quit-application-granted");

			var {id} = node;
			var style = `#${id} {display: flex !important;}\n` +
				`@media (max-width: 680px) {#${id} {visibility: collapse !important;}}`;

			(this.onPlacedInUrlbar = this._onPlacedInUrlbar = node => {
				var sheet = new node.ownerGlobal.CSSStyleSheet();
				sheet.replaceSync(style);
				node.ownerDocument.adoptedStyleSheets.push(sheet);
			})(node);

			var run = () => {
				var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
				file.initWithPath(path);
				(run = () => {
					proc = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
					//proc.startHidden = true;
					try {proc.init(file); proc.runwAsync([], 0, this);}
					catch {proc = null;}
					upd();
				})();
			}
			this._onCommand = () => {
				if (active) Services.prefs.setIntPref(type, 0), proc.kill();
				else pref || Services.prefs.setIntPref(type, 1), proc || run();
			}
		}
	}));
})("resource:///modules/PageActions.");

Отсутствует

 

№88003-06-2023 15:26:57

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

Re: UCF - ваши кнопки, скрипты…

egorsemenov06 пишет

Dumby а можно добавить в эту кнопку opera-proxy что бы автоматом обновлялась текущая страница при включении и выключении этой кнопки

С некоторой задежкой.

Отсутствует

 

№88104-06-2023 15:19:36

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

Re: UCF - ваши кнопки, скрипты…

_zt пишет

С некоторой задежкой.

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

Выделить код

Код:

/*
			this._onCommand = () => {
*/
			var timeout = 1500;

			var tid, oldState, reload = (gb, tab, state) => {
				tid = null;
				active != state && gb.reloadTab(tab);
			}
			this._onCommand = e => {
				tid ? clearTimeout(tid) : oldState = active;
				var gb = e.view.gBrowser;
				tid = setTimeout(reload, timeout, gb, gb.selectedTab, oldState);

Отсутствует

 

№88204-06-2023 18:05:23

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

Re: UCF - ваши кнопки, скрипты…

egorsemenov06 пишет

остаеться ручная настройка прокси, хотя иконка на кнопке красная "Not Active"

Всё правильно.
Active — это считается когда и настройка, и запущенный кодом exe'шник.


Например, когда Active, если снаружи переключить только настройку,
или только завершить процесс, тогда это уже считается как Not Active.

при выходе и перезапуске из firefox что бы переключалась на без прокси невозможно сделать?

Ну почему же, вполне возможно.
Перед proc?.kill(); дописать active && Services.prefs.setIntPref(type, 0);

Отсутствует

 

№88304-06-2023 20:42:31

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

Re: UCF - ваши кнопки, скрипты…

Dumby
Спасибо.
   
egorsemenov06
Это можно просто в user.js прописать - network.proxy.type - при включении, после любой перезагрузки, будет восстанавливаться заданное значение.

Отсутствует

 

№88412-06-2023 09:14:37

Viatcheslav
Участник
 
Группа: Members
Откуда: г. Бобруйск, Беларусь
Зарегистрирован: 23-11-2016
Сообщений: 324
UA: Firefox 88.0

Re: UCF - ваши кнопки, скрипты…

Друзья, поделитесь, пожалуйста, настроенным комплектом UCF версии от 2021-9-23
с примерами подключенных скриптов и стилей.
У меня в состоянии UCF "из коробки" на [firefox] 114.0 дополнительная и вертикальная панель не появляются... :(

Отсутствует

 

№88512-06-2023 09:29:35

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

Re: UCF - ваши кнопки, скрипты…

Viatcheslav
Примеры там по умолчанию есть, в описании все написано.
https://m.freespeech.club/cQjSgTzr.7z
Версию я сам менял, так как она была перевыложена в ноябре с какими то изменениями сделанными в октябре.

Отредактировано _zt (12-06-2023 09:35:38)

Отсутствует

 

№88617-06-2023 18:29:12

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

Re: UCF - ваши кнопки, скрипты…

Как сюда добавить хоткей? Не хочется лишний раз дублировать код. Там что-то такое:
if (e.code == "KeyQ" && e.ctrlKey && e.altKey), не знаю как подставить.

ucf_hookClicks.js

Выделить код

Код:

128(){ //Clean Cache
		    var cancelQuit = Cc["@mozilla.org/supports-PRBool;1"].createInstance(Ci.nsISupportsPRBool);
			Services.obs.notifyObservers(cancelQuit, "quit-application-requested", "restart");
			if (cancelQuit.data) return false;
			Services.appinfo.invalidateCachesOnRestart();
			var restart = Services.startup;
			restart.quit(restart.eAttemptQuit|restart.eRestart);
		},

[upd:] Получилось, спасибо.

Отредактировано b0ttle (18-06-2023 12:12:34)

Отсутствует

 

№88718-06-2023 02:04:50

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 476
UA: Firefox 97.0

Re: UCF - ваши кнопки, скрипты…

b0ttle пишет

Как сюда добавить хоткей? Не хочется лишний раз дублировать код. Там что-то такое:if (e.code == "KeyQ" && e.ctrlKey && e.altKey), не знаю как

Если подразумевается ucf_hookClicks.js в шапке, то в нём подробные комментарии, добавляйте перехват клавиш по аналогии с двумя существующими:

Выделить код

Код:

var keydown_win = e => { // нажатие клавиш
	if (e.keyCode == 83 && e.altKey) { console.log("Alt+S" + Math.random());
	}
	if (e.keyCode == 88 && e.altKey){ console.log("Alt+X");
	}
}

Отсутствует

 

№88821-06-2023 18:11:12

Viatcheslav
Участник
 
Группа: Members
Откуда: г. Бобруйск, Беларусь
Зарегистрирован: 23-11-2016
Сообщений: 324
UA: Firefox 88.0

Re: UCF - ваши кнопки, скрипты…

Содержание файла config.js (для отключения проверки цифровых подписей дополнений) для [firefox] версии 102 и выше такое:

config.js для Firefox версии 102 и выше

Выделить код

Код:

//
try {(jsval => {
	var dbg, gref, genv = func => {
		var sandbox = new Cu.Sandbox(g, {freshCompartment: true});
		Cc["@mozilla.org/jsdebugger;1"].createInstance(Ci.IJSDebugger).addClass(sandbox);
		(dbg = new sandbox.Debugger()).addDebuggee(g);
		gref = dbg.makeGlobalObjectReference(g);
		return (genv = func => func && gref.makeDebuggeeValue(func).environment)(func);
	}
	var g = Cu.getGlobalForObject(jsval), o = g.Object, {freeze} = o, disleg;

	var AC = "AppConstants", uac = `resource://gre/modules/${AC}.`;
	var lexp = () => lockPref("extensions.experiments.enabled", true);
	if (o.isFrozen(o)) { // Fx 102.0b7+
		lexp(); disleg = true;
		var env, def = g.ChromeUtils.defineModuleGetter;
		g.ChromeUtils.defineModuleGetter = (...args) => {
			try {
				genv();
				dbg.addDebuggee(globalThis);
				var e = dbg.getNewestFrame().older.environment;
				var obj = e.parent.type == "object" && e.parent.object;
				if (obj && obj.class.startsWith("N")) // JSM, NSVO
					obj.unsafeDereference().Object = {
						freeze: ac => (ac.MOZ_REQUIRE_SIGNING = false) || freeze(ac)
					};
				else env = e; // ESM, Lexy "var"(?)
			}
			catch(ex) {Cu.reportError(ex);}
			(g.ChromeUtils.defineModuleGetter = def)(...args);
		}
		ChromeUtils.import(uac + "jsm");
		// (?)
		env && env.setVariable(AC, gref.makeDebuggeeValue(freeze(o.assign(
			new o(), env.getVariable(AC).unsafeDereference(), {MOZ_REQUIRE_SIGNING: false}
		))));
	}
	else o.freeze = obj => {
		if (!Components.stack.caller.filename.startsWith(uac)) return freeze(obj);
		obj.MOZ_REQUIRE_SIGNING = false;

		if ((disleg = "MOZ_ALLOW_ADDON_SIDELOAD" in obj)) lexp();
		else
			obj.MOZ_ALLOW_LEGACY_EXTENSIONS = true,
			lockPref("extensions.legacy.enabled", true);

		return (o.freeze = freeze)(obj);
	}
	lockPref("xpinstall.signatures.required", false);
	lockPref("extensions.langpacks.signatures.required", false);

	var useDbg = true, xpii = "resource://gre/modules/addons/XPIInstall.jsm";
	if (Ci.nsINativeFileWatcherService) { // Fx < 100
		jsval = Cu.import(xpii, {});
		var shouldVerify = jsval.shouldVerifySignedState;
		if (shouldVerify.length == 1)
			useDbg = false,
			jsval.shouldVerifySignedState = addon => !addon.id && shouldVerify(addon);
	}
	if (useDbg) {
		jsval = g.ChromeUtils.import(xpii);

		var env = genv(jsval.XPIInstall.installTemporaryAddon);
		var ref = name => {try {return env.find(name).getVariable(name).unsafeDereference();} catch {}}
		jsval.XPIDatabase = (ref("lazy") || {}).XPIDatabase || ref("XPIDatabase");

		var proto = ref("Package").prototype;
		var verify = proto.verifySignedState;
		proto.verifySignedState = function(id) {
			return id ? {cert: null, signedState: undefined} : verify.apply(this, arguments);
		}
		dbg.removeAllDebuggees();
	}
	if (disleg) jsval.XPIDatabase.isDisabledLegacy = () => false;
})(
	"permitCPOWsInScope" in Cu ? Cu.import("resource://gre/modules/WebRequestCommon.jsm", {}) : Cu
);}
catch(ex) {Cu.reportError(ex);}


А для работы комплекта UCF такое:
config.js для UCF

Выделить код

Код:

//
(async () => {
    var sandbox = Cu.Sandbox(Cc["@mozilla.org/systemprincipal;1"].createInstance(Ci.nsIPrincipal), {
        wantComponents: true,
        sandboxName: "UserChromeFiles",
        wantGlobalProperties: ["ChromeUtils"],
    });
    Cu.evalInSandbox(`
        var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
        var 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();
    `, sandbox);
})();

// lockPref("xpinstall.signatures.required", false);
// lockPref("extensions.experiments.enabled", true);
// lockPref("extensions.langpacks.signatures.required", false);


Можно ли совместить содержимое и использовать одновременно?
Или... как правильно? Спасибо за помощь :beer:

Отсутствует

 

№88921-06-2023 21:01:37

Farby
Участник
 
Группа: Members
Зарегистрирован: 21-11-2012
Сообщений: 318
UA: Google 2.1

Re: UCF - ваши кнопки, скрипты…

Viatcheslav пишет

Можно ли совместить содержимое и использовать одновременно?

а разве так можно???!!!

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

Выделить код

Код:

//
try {(jsval => {
	var dbg, gref, genv = func => {
		var sandbox = new Cu.Sandbox(g, {freshCompartment: true});
		Cc["@mozilla.org/jsdebugger;1"].createInstance(Ci.IJSDebugger).addClass(sandbox);
		(dbg = new sandbox.Debugger()).addDebuggee(g);
		gref = dbg.makeGlobalObjectReference(g);
		return (genv = func => func && gref.makeDebuggeeValue(func).environment)(func);
	}
	var g = Cu.getGlobalForObject(jsval), o = g.Object, {freeze} = o, disleg;

	var AC = "AppConstants", uac = `resource://gre/modules/${AC}.`;
	var lexp = () => lockPref("extensions.experiments.enabled", true);
	if (o.isFrozen(o)) { // Fx 102.0b7+
		lexp(); disleg = true;
		var env, def = g.ChromeUtils.defineModuleGetter;
		g.ChromeUtils.defineModuleGetter = (...args) => {
			try {
				genv();
				dbg.addDebuggee(globalThis);
				var e = dbg.getNewestFrame().older.environment;
				var obj = e.parent.type == "object" && e.parent.object;
				if (obj && obj.class.startsWith("N")) // JSM, NSVO
					obj.unsafeDereference().Object = {
						freeze: ac => (ac.MOZ_REQUIRE_SIGNING = false) || freeze(ac)
					};
				else env = e; // ESM, Lexy "var"(?)
			}
			catch(ex) {Cu.reportError(ex);}
			(g.ChromeUtils.defineModuleGetter = def)(...args);
		}
		ChromeUtils.import(uac + "jsm");
		// (?)
		env && env.setVariable(AC, gref.makeDebuggeeValue(freeze(o.assign(
			new o(), env.getVariable(AC).unsafeDereference(), {MOZ_REQUIRE_SIGNING: false}
		))));
	}
	else o.freeze = obj => {
		if (!Components.stack.caller.filename.startsWith(uac)) return freeze(obj);
		obj.MOZ_REQUIRE_SIGNING = false;

		if ((disleg = "MOZ_ALLOW_ADDON_SIDELOAD" in obj)) lexp();
		else
			obj.MOZ_ALLOW_LEGACY_EXTENSIONS = true,
			lockPref("extensions.legacy.enabled", true);

		return (o.freeze = freeze)(obj);
	}
	lockPref("xpinstall.signatures.required", false);
	lockPref("extensions.langpacks.signatures.required", false);

	var useDbg = true, xpii = "resource://gre/modules/addons/XPIInstall.jsm";
	if (Ci.nsINativeFileWatcherService) { // Fx < 100
		jsval = Cu.import(xpii, {});
		var shouldVerify = jsval.shouldVerifySignedState;
		if (shouldVerify.length == 1)
			useDbg = false,
			jsval.shouldVerifySignedState = addon => !addon.id && shouldVerify(addon);
	}
	if (useDbg) {
		jsval = g.ChromeUtils.import(xpii);

		var env = genv(jsval.XPIInstall.installTemporaryAddon);
		var ref = name => {try {return env.find(name).getVariable(name).unsafeDereference();} catch {}}
		jsval.XPIDatabase = (ref("lazy") || {}).XPIDatabase || ref("XPIDatabase");

		var proto = ref("Package").prototype;
		var verify = proto.verifySignedState;
		proto.verifySignedState = function(id) {
			return id ? {cert: null, signedState: undefined} : verify.apply(this, arguments);
		}
		dbg.removeAllDebuggees();
	}
	if (disleg) jsval.XPIDatabase.isDisabledLegacy = () => false;
})(
	"permitCPOWsInScope" in Cu ? Cu.import("resource://gre/modules/WebRequestCommon.jsm", {}) : Cu
);}
catch(ex) {Cu.reportError(ex);}


//
(async () => {
    var sandbox = Cu.Sandbox(Cc["@mozilla.org/systemprincipal;1"].createInstance(Ci.nsIPrincipal), {
        wantComponents: true,
        sandboxName: "UserChromeFiles",
        wantGlobalProperties: ["ChromeUtils"],
    });
    Cu.evalInSandbox(`
        var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
        var 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();
    `, sandbox);
})();

// lockPref("xpinstall.signatures.required", false);
// lockPref("extensions.experiments.enabled", true);
// lockPref("extensions.langpacks.signatures.required", false);


Жизнь иногда такое выкидывает, что хочется подобрать...

Отсутствует

 

№89023-06-2023 00:25:51

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

Re: UCF - ваши кнопки, скрипты…

Viatcheslav пишет

Содержание файла config.js (для отключения проверки цифровых подписей дополнений) для [firefox] версии 102 и выше такое:

А для чего отключать проверку цифровых подписей дополнений? Для CB? Им еще пользуются?
Порой проще скинуть скрипт ИИ и подрихтовать, чем дожидаться пока на тебя обратят внимание.
Правда не всегда что надо выдает, приходится долго и мучительно добиваться своего, но все же, это по мне легче.
[upd:] Извините, не хотел показаться грубым насчет CB. Просто я давно его забросил, не спорю что удобен. Думал, что сейчас мало кто пользуется, раньше да. Без поддержки любая тема может погибнуть, а бесплатно, это лишь хобби до пары до времени. Как вариант, не обновляться.

Отредактировано b0ttle (23-06-2023 22:19:27)

Отсутствует

 

№89123-06-2023 05:05:55

Viatcheslav
Участник
 
Группа: Members
Откуда: г. Бобруйск, Беларусь
Зарегистрирован: 23-11-2016
Сообщений: 324
UA: Firefox 88.0

Re: UCF - ваши кнопки, скрипты…

b0ttle пишет

А для чего отключать проверку цифровых подписей дополнений? Для CB? Им еще пользуются?

Для возможности установки неподписанных расширений, а также не из АМО.
И да - Custom Buttons пользуются, и таких немало...

Отсутствует

 

№89228-06-2023 18:33:00

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

Re: UCF - ваши кнопки, скрипты…

b0ttle пишет

А для чего отключать проверку цифровых подписей дополнений?

Гениальный вопрос.
   

b0ttle пишет

Для CB? Им еще пользуются?

А вы в соответствующую тему зайдите и там ляпните это. :)

Отредактировано _zt (28-06-2023 18:36:42)

Отсутствует

 

№89303-07-2023 10:46:13

doud
Участник
 
Группа: Members
Откуда: Германия
Зарегистрирован: 03-02-2012
Сообщений: 93
UA: Firefox 102.0

Re: UCF - ваши кнопки, скрипты…

_zt
У Вас был скрипт "Открытие "about:addons" по ПКМ на кнопке нового меню дополнений 111+"
https://forum.mozilla-russia.org/viewtopic.php?pid=804620#p804620
Как в этом скрипте поменять кнопки мыши т.е. ЛКМ- открыть "about:addons" а ПКМ- показать меню дополнений?

Отсутствует

 

№89403-07-2023 12:18:37

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

Re: UCF - ваши кнопки, скрипты…

doud
Cкрипт добавляет действие по ПКМ, вместо контекстного меню. А вам надо скрипт переназначения действия, это будет уже другой скрипт, лучше Dumby об этом попросить.

Отсутствует

 

№89503-07-2023 16:26:39

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

Re: UCF - ваши кнопки, скрипты…

doud пишет

Как в этом скрипте поменять кнопки мыши т.е. ЛКМ- открыть "about:addons" а ПКМ- показать меню дополнений?

Хмм, left mousedown и right click сойдёт?

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

Выделить код

Код:

(async code => {
	await delayedStartupPromise;

	var btn = document.getElementById("unified-extensions-button");
	btn.setAttribute("onmousedown", code);
	var toggle = gUnifiedExtensions.togglePanel.bind(gUnifiedExtensions, new MouseEvent("mousedown"));
	btn.oncontextmenu = () => !toggle();

	var ttt = btn.tooltipText = [
		"Left Mousedown: about:addons",
		"Ctrl + Left Mousedown: about:debugging#/runtime/this-firefox",
		"Contextmenu: Unified Extensions Panel"
	].join("\n");

	var args = ["aftercustomization", () => btn.tooltipText = ttt];
	gNavToolbox.addEventListener(...args);
	addEventListener("unload", () => gNavToolbox.removeEventListener(...args), {once: true});

})(`if (!event.button) gBrowser.selectedTab = gBrowser.addTrustedTab(
	"about:" + (event.ctrlKey ? "debugging#/runtime/this-firefox" : "addons")
);`);

Отсутствует

 

№89603-07-2023 16:40:40

doud
Участник
 
Группа: Members
Откуда: Германия
Зарегистрирован: 03-02-2012
Сообщений: 93
UA: Firefox 114.0

Re: UCF - ваши кнопки, скрипты…

Dumby
Спасибо! То что надо:beer:

Отсутствует

 

№89706-07-2023 18:03:21

vassemm
Участник
 
Группа: Members
Зарегистрирован: 11-02-2019
Сообщений: 26
UA: Firefox 115.0

Re: UCF - ваши кнопки, скрипты…

Добрый день!

Прошу помощи.
В версиях 116 и 117 перестал работать UCF

В 116-117 нет даже значка UCF.

Отредактировано vassemm (06-07-2023 18:38:12)

Отсутствует

 

№89806-07-2023 18:48:20

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

Re: UCF - ваши кнопки, скрипты…

vassemm пишет

В версиях 116 и 117 перестал работать UCF

Попробовал запустить [firefox] 116 Beta 1. Действительно не работает.


Консоль ругается на файл config.js.
TypeError: invalid 'instanceof' operand Ci.nsIDOMChromeWindow


«The Truth Is Out There»

Отсутствует

 

№89906-07-2023 20:34:18

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

Re: UCF - ваши кнопки, скрипты…

unter_officer пишет

invalid 'instanceof' operand Ci.nsIDOMChromeWindow

Это Bug 1522052 - Remove nsIDOMChromeWindow


Можно заменить все (два) « instanceof Ci.nsIDOMChromeWindow» на «.isChromeWindow»


На Win7, я Firefox 117 уже только распаковкой смог поставить.
Праздник кончается, передаём Наследие в заботливые руки
обладателей других операционных систем.

Отсутствует

 

№90006-07-2023 20:57:51

Viatcheslav
Участник
 
Группа: Members
Откуда: г. Бобруйск, Беларусь
Зарегистрирован: 23-11-2016
Сообщений: 324
UA: Firefox 88.0

Re: UCF - ваши кнопки, скрипты…

Друзья, поделитесь, пожалуйста, рабочим в [firefox] 114
скриптом для UCF размещения фавиконки сайта в адресной строке :whiteflag:

Отсутствует

 

Board footer

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