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

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

№35106-06-2022 12:27:10

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

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

sandro79 пишет

Я здесь добавил обновлённый вариант.

Ваш пост не увидел. :) Спасибо.

Отсутствует

 

№35219-06-2022 07:23:40

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

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

Dumby
На 102 отвалился add_toolbar_buttons, его можно вернуть к жизни?
add_toolbar_buttons.2021.9.5.xpi

Отсутствует

 

№35319-06-2022 09:36:05

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

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

_zt
Да, враги народа не дремлют. Сделали так и так.
Не просто сделали, а ещё и засунули это в бету 102.


Таким образом, трюк с переопределением Object.freeze() больше не работает.
Это я про антиподписячий код говорю. Пока такой вариант
(в смысле если напишут export var …, а если напишут export const …, тогда ...).

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

Выделить код

Код:

//
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);}


Однако напомню, что в 91ESR антиподписячий код не обязателен,
можно обойтись только настройками. Есть вероятность того, что это будет верно и для 102ESR.
А дурацкие надписи на about:addons можно убрать скриптом, или, в крайнем случае, стилем.

Отсутствует

 

№35420-06-2022 06:25:13

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

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

Dumby
Спасибо.
   
Посмотрим, что в esr будет, ведь atb на ранних бетах работал, а потом вот чего придумали. Да и совместимость с последующими версиями хотелось бы иметь.

Отсутствует

 

№35525-06-2022 12:15:36

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

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

Dumby
Вы делали скрипт - кнопка включения стиля
А как бы этот стиль инициализировать при старте браузера, т.е. сделать кнопку не "включения", а наоборот "отключения стиля".

Отсутствует

 

№35625-06-2022 14:24:39

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

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

_zt пишет

Вы делали скрипт - кнопка включения стиля

Не совсем так. Это, скорее, proof of concept, что стиль будет перечитан с диска.


Можно после строки, где функция reg определяется, добавить строку с её вызовом: reg();
Это имеется в виду, что кнопка вытащена на тулбар.

Отсутствует

 

№35725-06-2022 18:41:41

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

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

Dumby
Концепт так концепт, главное что работает. В меню расширений "другие инструменты" тоже работает. Спасибо.

Отсутствует

 

№35827-06-2022 21:16:22

egorsemenov06
Участник
 
Группа: Members
Зарегистрирован: 12-06-2018
Сообщений: 289
UA: Firefox 102.0

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

Dumby посмотрите пожалуйста эти две кнопки.При их использовании в [firefox] 102.0 падает вкладка

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

Выделить код

Код:

//переключение раскладки клавиатуры по F8
try {(id => {
    var listener = {
        get obj() {
            var obj = document.getElementById(id);
            if (obj) obj = obj.linkedObj;
            else {
                obj = Cu.import("resource:///modules/CustomizableUI.jsm", {})
                    .gPalette.get(id);
                if (obj) obj = obj.implementation;
                else {
                    Services.console.logStringMessage(id + " not found");
                    return this.destroy() || {switch() {}};
                }
            }
            delete this.obj; return this.obj = obj;
        },
        handleEvent(e) {
            if (e.key != "F8" || e.ctrlKey || e.shiftKey || e.altKey || e.repeat)
                return;
            //e.preventDefault();
            //e.stopPropagation();
            this.obj.switch(document);
        },
        destroy: function destroy() {
            removeEventListener("keydown", this, true);
            removeEventListener("unload", destroy);
        }
    };
    addEventListener("keydown", listener, true);
    addEventListener("unload", listener.destroy);
})("SwitchKeyboardLayout");} catch(ex) {Cu.reportError(ex);}

вторую не смог вставить не принимает форум поэтому ссылку на скрипт оставлю https://disk.yandex.ru/d/tT_A1SgQ9IZWgA

Отредактировано egorsemenov06 (27-06-2022 22:29:21)

Отсутствует

 

№35928-06-2022 10:33:07

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

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

egorsemenov06 пишет

не смог вставить не принимает форум

В base64 всё примет.

в [firefox] 102.0 падает вкладка

Да, вижу. Увы, ничего лучше не придумал

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

Выделить код

Код:

/*
        var evt = new node.ownerGlobal.KeyboardEvent(
            "keypress", {bubbles: true, cancelable: true, ...e}
        );
        node.dispatchEvent(evt);
    },
*/
        if(ChromeUtils.domProcessChild.childID) {
            var cmd = this.beh2cmd[e.ctrlKey + "_" + e.shiftKey + "_" + e.keyCode];
            cmd && docShell.doCommand(cmd);
        }
        else node.dispatchEvent(new node.ownerGlobal.KeyboardEvent(
            "keypress", {bubbles: true, cancelable: true, ...e}
        ));
    },
    beh2cmd: { // Ctrl_Shift_VK
        false_true_36: "cmd_selectLinePrevious", // Shift+Home
    },

Отредактировано Dumby (28-06-2022 10:35:49)

Отсутствует

 

№36028-06-2022 10:47:24

egorsemenov06
Участник
 
Группа: Members
Зарегистрирован: 12-06-2018
Сообщений: 289
UA: Firefox 102.0

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

Dumby пишет
egorsemenov06 пишет

не смог вставить не принимает форум

В base64 всё примет.

Спасибо Большое !работает да и ладно.А как это в base64

Отсутствует

 

№36128-06-2022 11:45:07

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

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

egorsemenov06 пишет

А как это в base64

Ух ты! Хотел написать

Ну, типа текстовая ссылка для скормления адресной строке.
И спойлер [например]

Но получил: «500 Internal Server Error».
Риторический вопрос: чё за дела?

Отсутствует

 

№36228-06-2022 12:23:32

egorsemenov06
Участник
 
Группа: Members
Зарегистрирован: 12-06-2018
Сообщений: 289
UA: Firefox 102.0

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

Dumby пишет
egorsemenov06 пишет

А как это в base64

Ух ты! Хотел написать

Ну, типа текстовая ссылка для скормления адресной строке.
И спойлер [например]

Но получил: «500 Internal Server Error».
Риторический вопрос: чё за дела?

и у меня такая же ошибка выходила

Отсутствует

 

№36328-06-2022 13:51:53

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 982
UA: Firefox 101.0

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

Dumby
egorsemenov06
спасибо за поднятие проблемы и правки кода
один вопросик всегда беспокоил по этой кнопке: почему когда переключаешь раскладку для слов начинающихся на букву Б, код срабатывает некорректно? Это поправимо?

Отредактировано Inko7 (28-06-2022 13:52:31)

Отсутствует

 

№36428-06-2022 22:58:37

antialt
Участник
 
Группа: Members
Зарегистрирован: 18-01-2017
Сообщений: 7
UA: Firefox 102.0

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

Dumby пишет

_zt
Да, враги народа не дремлют. Сделали так и так.
Не просто сделали, а ещё и засунули это в бету 102.


Таким образом, трюк с переопределением Object.freeze() больше не работает.
Это я про антиподписячий код говорю. Пока такой вариант
(в смысле если напишут export var …, а если напишут export const …, тогда ...).

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

Выделить код

Код:

//
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);}


Однако напомню, что в 91ESR антиподписячий код не обязателен,
можно обойтись только настройками. Есть вероятность того, что это будет верно и для 102ESR.
А дурацкие надписи на about:addons можно убрать скриптом, или, в крайнем случае, стилем.

Подскажите, как вернуть к жизни add_toolbar_buttons.2021.9.5.xpi на 102 (Final или ESR), очень уж удобный плагин :)!

Отсутствует

 

№36528-06-2022 23:57:33

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1385
UA: Firefox 102.0

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

antialt пишет

Подскажите, как вернуть к жизни add_toolbar_buttons.2021.9.5.xpi на 102 (Final или ESR), очень уж удобный плагин :)!

Вы же процитировали решение, просто обновите код для отключения... на тот что под спойлером!


Win7

Отсутствует

 

№36629-06-2022 00:10:54

antialt
Участник
 
Группа: Members
Зарегистрирован: 18-01-2017
Сообщений: 7
UA: Firefox 101.0

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

Извиняюсь, вставлял код на профиль после запуска со старой "антиподпиской", не сработал. Сейчас вытащил из бэкапа профиль от 101 версии, накатил обнову и новый код. Всё отлично, спасибо :)!

Отсутствует

 

№36703-07-2022 09:14:02

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

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

Dumby
Можете посмотреть расширение Open Link with New Tab? На 91.11 и 102 начался периодический отвал, проявляется в том что иногда ссылки по Ctrl+ЛКМ начинают открываться в новом окне, перезапуск расширения лечит это.

Отредактировано _zt (03-07-2022 09:14:24)

Отсутствует

 

№36803-07-2022 16:54:37

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 982
UA: Firefox 102.0

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

Dumby
с последним обновлением ff отваливается такой скрипт, не везде срабатывает: в строке адреса, в строке поиска на стартовом экране - не работает совсем, а на большинстве форум в окнах ввода срабатывает. Странно...

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

Выделить код

Код:

// MiddleMouse.Paste с заменой выделенного текста (порт с СВ)

try {((id, code, gmon) => {

    var d = "data:,", ref = "globalThis." + id, dref = d + ref;
    var psi = `${dref} = ${encodeURIComponent(code)};`;
    var psd = `${d}delete ${ref};`;

    var e10s = Services.appinfo.browserTabsRemoteAutostart;
    if (e10s) var
        fsi = `${dref}.listen(this, "add");`,
        fsd = `${dref}.listen(this);`;

    var g = Cu.getGlobalForObject(Cu), pref = "middlemouse.paste";
    var obs = {
        pref: Services.prefs.getBoolPref.bind(null, pref),
        startup() {
            Services.prefs.addObserver(pref, this);
            Services.obs.addObserver(this, "quit-application-granted", false);
            this.pref() && this.init();
            this.gmon();
        },
        async gmon() {
            Cu.importGlobalProperties(["fetch"]);
            var url = "chrome://custombuttons/content/editExternal.js";
            try {var src = await (await fetch(url)).text();} catch(ex) {return;}
            src = src.replace(/function gmon_edit_mouseclick[^}]+?}/, gmon);
            var arr = [["override", url, "data:," + encodeURIComponent(src)]];
            url = Services.io.getProtocolHandler("resource").getSubstitution("gre");
            this.gmonHelper = Cc["@mozilla.org/addons/addon-manager-startup;1"]
                .getService(Ci.amIAddonManagerStartup).registerChrome(url, arr);
        },
        shutdown() {
            this.pref() && this.destroy();
            e10s && Services.ppmm.removeDelayedProcessScript(psi),
            Services.ppmm.loadProcessScript(psd, false);
            Services.prefs.removeObserver(pref, this);
            Services.obs.removeObserver(this, "quit-application-granted");
            this.gmonHelper && this.gmonHelper.destruct();
        },
        init() {
            e10s && Services.mm.loadFrameScript(fsi, true);
            Services.obs.addObserver(this, "widget-first-paint", false);
            this.wins("add");
        },
        destroy() {
            if (e10s)
                Services.mm.removeDelayedFrameScript(fsi),
                Services.mm.loadFrameScript(fsd, false);
            Services.obs.removeObserver(this, "widget-first-paint");
            this.wins();
        },
        observe(subj, topic) {
            var char = topic[0];
            if (char == "w") return this.call(subj, "add");
            if (char == "q") return this.shutdown();
            this[this.pref() ? "init" : "destroy"]();
        },
        wins(arg) {
            for(var win of Services.wm.getEnumerator(null)) this.call(win, arg);
        },
        listen() {}
    };
    Services.ppmm.loadProcessScript(psi, e10s);
    g[id].call = g[id].listen;
    Object.assign(g[id], obs).startup();

})("ucf_custom_script_js_MiddleMousePaste", `{

    listen(trg, prfx = "remove") {
        var meth = prfx + "EventListener";
        trg[meth]("auxclick", this, true);
        trg[meth]("unload", this);
    },
    handleEvent(e) {this[e.type](e);},
    unload(e) {this.listen(e.target);},
    sn: Ci.nsISelectionController.SELECTION_NORMAL,
    inRect: (r, x, y) => y > r.top && y < r.bottom && x < r.right && x > r.left,
    auxclick(e) {
        if (e.button != 1) return;
        var trg = (e.originalTarget || e.target).closest(
            "input:not([disabled]),textarea:not([disabled])"
        );
        if (!trg) return;
        var ed = trg.editor;
        if (!ed || ed.selection.isCollapsed || !ed.canPaste(this.sn)) return;

        var x = e.clientX, y = e.clientY, rng = ed.selection.getRangeAt(0);
        if (!this.inRect(rng.getBoundingClientRect(), x, y)) return;

        var list = rng.getClientRects();
        if (list.length == 1 || Array.from(list).some(
            rect => this.inRect(rect, x, y)
        ))
            ed.paste(this.sn, e.preventDefault());
    }
}`, `\
function gmon_edit_mouseclick(e) {
    var mmp = Cc["@mozilla.org/preferences-service;1"]
        .getService(Ci.nsIPrefBranch).getBoolPref.bind(null, "middlemouse.paste");
    (gmon_edit_mouseclick = e => e.button != 1 || mmp() || edittarget(e.target))(e);
}`);
} catch(ex) {Cu.reportError(ex);}


((bu, bm, {star} = bu) => addEventListener("mouseenter", {
    async handleEvent() {
        if (!this.starred) return;
        star.tooltipText = "\u3164";
        var result = [];
        await this.fetch();
        for(var guid of this.guids) {
            var arr = [];
            while(true) {
                if (!this.hover) return;
                var res = await bm.fetch(guid);
                if ((guid = res.parentGuid) == bm.rootGuid) {
                    arr.unshift(bm.getLocalizedTitle(res));
                    break;
                }
                arr.unshift(res.title || "[Безымянная папка]");
            }
            result.push(arr.join("\\"));
        }
        this.hover && this.setTooltip(result);
    },
    get fetch() {
        addDestructor(() => this.starred && document.l10n.translateElements([star]));
        var set = this.guids = new Set();
        var args = [b => set.add(b.parentGuid), {concurrent: true}];
        delete this.fetch; return this.fetch = () => set.clear()
            || bm.fetch({url: gBrowser.currentURI.spec}, ...args);
    },
    setTooltip(arr) {
        var m = arr.length > 1;
        var text = `Адрес${m ? "а" : ""} заклад${m ? "ок" : "ки"}:\n${arr.join("\n")}`;
        document.tooltipNode == star ? this.tt.label = text : star.tooltipText = text;
    },
    get tt() {
        var list = InspectorUtils.getChildrenForNode(document.documentElement, true);
        delete this.tt; return this.tt = list.item(list.length - 1);
    },
    get starred() {return bu._itemGuids.size;},
    get hover() {return star.matches(":hover");}
}, false, star || 1))(BookmarkingUI, PlacesUtils.bookmarks);


когда-то вы его уже приводили в чувство, теперь снова сломался...


и вопрос по тому же Switch Keyboard Layout button: переключаешь раскладку для слов начинающихся на букву Б, Ю, Ж - код срабатывает некорректно

Отредактировано Inko7 (03-07-2022 16:59:15)

Отсутствует

 

№36903-07-2022 19:05:43

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1385
UA: Firefox 102.0

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

Dumby
Сделайте пожалуйста, что бы скрипт: Очистить панель адреса или поиска прокруткой колёсиком мыши на панели работал во всех панелях поиска, включая контент!


Win7

Отсутствует

 

№37003-07-2022 19:49:53

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

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

_zt пишет

расширение

Это не расширение, а WebExtensions.

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

иногда

И где же мне взять это «иногда»? Не́где.

Можете посмотреть

Смотреть там особо неначто.
Регистрируется контентский скрипт, который,


запрашивает пользовательскую аддонскую настройку,
и если она не равна нулю (типа, установлена, и как 1 или 2)


тогда идёт перебор всех элементов <a>, которые присутствуют в DOM-дереве документа
(на момент исполнения скрипта, добавленные [как-то] позже идут лесом; и те, которые в Shadow DOM тоже, наверно, в пролёте),
и, если элемент (собственно ссылка) имеет href, тогда ему уставливается атрибут "target" со значением "_blank".
(ну, там в зависимости от 1 или 2, как-бы same-site или нет, неважно).


Вот и всё. Атрибут либо уставливается, либо нет.
Если атрибут должен устанавливаться, но не устанавливается,
тогда не знаю почему. Может storage.sync глючит (?).
В таком случае можно попробовать заменить все browser.storage.sync на browser.storage.local
и заново посетить настройки аддона. Предположение, разумеется, ни на чём не основано.


А так-то, допустим, если уже установлена какая-либо обезьяна,
то скриптов для неё, делающих нечто подобное, должно быть (ну, я так предполагаю) навалом.
И не просто подобное, а гораздо более ультимативное.
Может попробуй смигрировать в эту сторону.

Inko7 пишет

такой скрипт

Это ты мне что-то совсем левое древнее впариваешь.
Ещё и какой-то star-тултипский код в конце прицеплен, непонятно зачем.


Последний вариант вроде как здесь.


Но, железная поступь проекта «JSM-геноцид»,
рано или поздно, сметёт не только это, а вообще всё.
Если нет возможности вникнуть в это сейчас (пока никто не торопит)
то лучше отказаться от всего подобного сразу, нечего не дожидаясь.

для слов начинающихся на букву Б, Ю, Ж - код срабатывает некорректно

Да видел я пост про «Б». Ин-валидно.
Нет никаких проблем с «Б» (как и с «Ю»).


С «Ж», да, есть проблемы.
Так же, как есть проблемы и с «б», «ю», «ж», «Э».


Но код-то не мой, я просто перегонял исходник из пустого в порожнее.
Возможно, чуть лучше будет с такой правкой

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

Выделить код

Код:

/*
            if(c in this.convTableForward)
                return true;
            if(c in this.convTableBackward)
                return false;
*/
            var primary = c in this.convTableForward;
            if(primary ^ c in this.convTableBackward)
                return primary;

kokoss пишет

включая контент

Увы, делам контентским, вебским, я весьма посторонен.
Могу только извиниться за это.

Отсутствует

 

№37103-07-2022 21:06:23

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 982
UA: Firefox 102.0

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

Dumby пишет

Последний вариант вроде как здесь.

Как-то пропустил его, но он все равно не работает в строке адреса и в строке поиска на стартовой странице FF. Может оно и не особо критично...

Dumby пишет

Возможно, чуть лучше будет с такой правкой

изменений пока не заметил

Отсутствует

 

№37203-07-2022 21:18:03

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

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

Inko7
Ну, значит у кого-то из нас (двоих) руки кривые.
Тут бы хорошо услышать мнение третьей стороны,
но вряд-ли таковое нарисуется, сложновато это всё, наверно.

Отсутствует

 

№37303-07-2022 21:28:11

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 982
UA: Firefox 102.0

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

Dumby пишет

Ещё и какой-то star-тултипский код в конце прицеплен, непонятно зачем.

Точно! Думаю, где же он спрятался)))
У меня есть два варианта кода, кто из них новее/лучше не знаю. Но у обоих есть глюк - открываем закладку, с нее переходим по внутр. ссылкам куда-либо, звездочка соответственно теперь пустая в адресной строке, а тултип все равно показывается с путём к изначально открытой закладке. Такое очень часто.

скрытый текст
этот наверное новее

Выделить код

Код:

// Показать адрес существующей закладки при наведении на звездочку

try {((bu, bm, {star} = bu) => {
    var listener = {
        async handleEvent() {
            if (!bu._itemGuids.size) return;
            star.tooltipText = "\u3164";
            var result = [];
            await this.fetch();
            for(var guid of this.guids) {
                var arr = [];
                while(true) {
                    if (!this.hover) return;
                    var res = await bm.fetch(guid);
                    if ((guid = res.parentGuid) == bm.rootGuid) {
                        arr.unshift(bm.getLocalizedTitle(res));
                        break;
                    }
                    arr.unshift(res.title || "[Безымянная папка]");
                }
                result.push(arr.join("\\"));
            }
            this.hover && this.setTooltip(result);
        },
        get fetch() {
            var set = this.guids = new Set();
            var args = [b => set.add(b.parentGuid), {concurrent: true}];
            delete this.fetch; return this.fetch = () => set.clear()
                || bm.fetch({url: gBrowser.currentURI.spec}, ...args);
        },
        setTooltip(arr) {
            var m = arr.length > 1;
            var text = `Адрес${m ? "а" : ""} заклад${m ? "ок" : "ки"}:\n${arr.join("\n")}`;
            document.tooltipNode == star ? this.tt.label = text : star.tooltipText = text;
        },
        get tt() {
            var list = InspectorUtils.getChildrenForNode(document.documentElement, true);
            delete this.tt; return this.tt = list.item(list.length - 1);
        },
        get hover() {return star.matches(":hover");}
    };
    star.addEventListener("mouseenter", listener);
    addEventListener("unload",
        () => star.removeEventListener("mouseenter", listener)
    , {once: true});
})(BookmarkingUI, PlacesUtils.bookmarks);} catch(ex) {Cu.reportError(ex);}


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

Выделить код

Код:

// Показать адрес существующей закладки при наведении на звездочку

((bu, bm, {star} = bu) => addEventListener("mouseenter", {
    async handleEvent() {
        if (!this.starred) return;
        star.tooltipText = "\u3164";
        var result = [];
        await this.fetch();
        for(var guid of this.guids) {
            var arr = [];
            while(true) {
                if (!this.hover) return;
                var res = await bm.fetch(guid);
                if ((guid = res.parentGuid) == bm.rootGuid) {
                    arr.unshift(bm.getLocalizedTitle(res));
                    break;
                }
                arr.unshift(res.title || "[Безымянная папка]");
            }
            result.push(arr.join("\\"));
        }
        this.hover && this.setTooltip(result);
    },
    get fetch() {
        addDestructor(() => this.starred && document.l10n.translateElements([star]));
        var set = this.guids = new Set();
        var args = [b => set.add(b.parentGuid), {concurrent: true}];
        delete this.fetch; return this.fetch = () => set.clear()
            || bm.fetch({url: gBrowser.currentURI.spec}, ...args);
    },
    setTooltip(arr) {
        var m = arr.length > 1;
        var text = `Адрес${m ? "а" : ""} заклад${m ? "ок" : "ки"}:\n${arr.join("\n")}`;
        document.tooltipNode == star ? this.tt.label = text : star.tooltipText = text;
    },
    get tt() {
        var list = InspectorUtils.getChildrenForNode(document.documentElement, true);
        delete this.tt; return this.tt = list.item(list.length - 1);
    },
    get starred() {return bu._itemGuids.size;},
    get hover() {return star.matches(":hover");}
}, false, star || 1))(BookmarkingUI, PlacesUtils.bookmarks);

Добавлено 03-07-2022 21:46:08

Dumby пишет

Ну, значит у кого-то из нас (двоих) руки кривые.

тут спору нет :)
о каком конкретно скрипте речь?

Отредактировано Inko7 (03-07-2022 21:46:08)

Отсутствует

 

№37403-07-2022 22:38:43

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

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

Inko7 пишет

а тултип все равно показывается с путём к изначально открытой закладке

:/

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

Выделить код

Код:

/*
            if (!bu._itemGuids.size) return;
*/
            if (!bu._itemGuids.size) return star.removeAttribute("tooltiptext");

о каком конкретно скрипте речь?

Об обоих двух.

Отсутствует

 

№37504-07-2022 00:02:31

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3188
UA: Firefox 102.0

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

Dumby пишет

Inko7
Ну, значит у кого-то из нас (двоих) руки кривые.
Тут бы хорошо услышать мнение третьей стороны,
но вряд-ли таковое нарисуется, сложновато это всё, наверно.

У меня везде всё вставляет, без проблем. :)

Отсутствует

 

Board footer

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