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

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

№60120-01-2023 20:34:28

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

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

Это тоже не сработало.

Отсутствует

 

№60220-01-2023 21:08:28

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

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

LGS пишет

а вы не можете придумать способ, который позволял бы открывать закладки и историю в новой вкладке, когда открыта одна вкладка about:newtab..?  Т.е, если поподробнее, то сейчас, когда запускаю фокс, то открыта только вкладка about:newtab, и , если жмякнуть по закладке, например, в боковой панели, то она откроется в текущей вкладке, а не в новой. То же самое и с историей. Меня почему-то это сильно напрягает...

Этот -> https://forum.mozilla-russia.org/viewto … 05#p797605 скрипт так и работает, открывает( кроме дилов, в хотелке  про открытие дилов в новой вкладке нет) закладки и историю в новой вкладке + user_pref("browser.tabs.loadBookmarksInTabs", true);

Добавлено 20-01-2023 21:32:15

LGS пишет

у меня не работает. Именно после запуска ФФ, когда еще ни одна закладка не открывалась и ничего не посещалось. В этом случае закладка или история откроются в текущей about:newtab вкладке.

есть такое, тоже напрягает...

Отредактировано kokoss (20-01-2023 21:32:15)


Win7

Отсутствует

 

№60320-01-2023 21:39:18

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

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

kokoss пишет

Эти скрипты так и работают, открывают закладки и историю в новой вкладке + user_pref("browser.tabs.loadBookmarksInTabs", true);

Работают, если открыта хотя-бы одна вкладка. Если открыта только about:newtab (сразу после запуска фокса), то закладка или история откроются в текущей вкладке (в моем случае это about:newtab).
Вообщем, если не лень, то можно  воспроизвести:
1. Устанавливаем скрипт.
2. Запускаем ФФ.
3. Устанавливаем домашней страницей about:newtab.
4. Убираем (если включено) галку «Открыть предыдущие окна и вкладки» (или, в более старых версиях, «Восстанавливать предыдущую сессию».
5. Закрываем ФФ, запускаем снова. Фокс откроется с одной вкладкой (about:newtab).
6. Жмем, к примеру, закладку в боковой панели - она откроется в текущей вкладке, а не в новой.

Добавлено 20-01-2023 21:41:56

kokoss пишет

есть такое, тоже напрягает...

Ага, значит кое-как смог объяснить, что мне нужно...

Отредактировано LGS (21-01-2023 14:28:05)

Отсутствует

 

№60421-01-2023 09:17:32

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

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

LGS пишет

когда запускаю фокс, то открыта только вкладка about:newtab

То есть, ты хочешь забрать эту вкладку себе,
чтобы в неё places-добро не грузилось?


Можно так попробовать, вроде не должно грузиться
пока в эту вкладку не будет загружено что-то другим образом.
Код для custom_script_win.js

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

Выделить код

Код:

(async place => {
	await gBrowserInit.idleTasksFinishedPromise;

	var tabs = gBrowser.visibleTabs;
	if (tabs.length > 1) return;

	var re = /^about:(?:newtab|home)$/;
	var [tab] = tabs, br = tab.linkedBrowser;

	if (re.test(br.currentURI.spec)) br.loadURI = function(url, params) {
		if (
			re.test(this.currentURI.spec) &&
			gBrowser.selectedBrowser == this &&
			Components.stack.formattedStack.includes(place)
		) {
			var e = window.event ||
				Services.focus.focusedWindow.event ||
				Services.wm.getMostRecentWindow("Places:Organizer")?.event;

			if (e) {
				var node, trg = e.target;

				if (trg.nodeName == "treechildren") node = trg.parentNode.selectedNode;
				else if (trg.id == "placesCmd_open") {
					var popup = trg.ownerDocument.getElementById("placesContext");
					node = popup._view.selectedNode || popup.triggerNode._placesNode;
				}
				else node = trg._placesNode;

				if (node) {
					PlacesUIUtils._openNodeIn(node, "tab", window);
					//gBrowser.selectedTab = tab; // force in background
					return;
				}
			}
		}
		delete this.loadURI;
		this.loadURI(url, params);
	}
})("_openNodeIn@resource:///modules/PlacesUIUtils.");

можно  воспроизвести

Не написано про галку «Открыть предыдущие окна и вкладки»
(или, в более старых версиях, «Восстанавливать предыдущую сессию»).


Кстати, можно прицепить что-нибудь к адресу, типа about:newtab#
тогда, вкладка с таким адресом, наверно, не будет рассматриваться как c «blank page url».
Не то же самое, что скрипт, но, при определённом раскладе, может представлять интерес.

Отсутствует

 

№60521-01-2023 11:57:55

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

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

Dumby пишет

Кстати, можно прицепить что-нибудь к адресу, типа about:newtab#
тогда, вкладка с таким адресом, наверно, не будет рассматриваться как c «blank page url».
Не то же самое, что скрипт, но, при определённом раскладе, может представлять интерес.

Скрипт почему-то не зашел, а вот ваша мысль про about:newtab# пришлась очень кстати. Назначил домашней about:newtab# - теперь открывает как мне надо в новой вкладке. Единственное, пришлось стили подправить, которые завязаны были на about:newtab, но это мелочи.
Большое спасибо!

Скрипт заработал... из custom_script_all_win.js.

Отредактировано LGS (21-01-2023 16:30:51)

Отсутствует

 

№60630-01-2023 10:10:13

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

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

Dumby
Возможно ли сделать кнопочку - удалить (очистить) сессию.


«The Truth Is Out There»

Отсутствует

 

№60730-01-2023 21:08:05

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

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

unter_officer

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

Выделить код

Код:

(async ss => {
	ss = ChromeUtils.importESModule(ss).SessionStore;
	await ss.promiseAllWindowsRestored;
	CustomizableUI.createWidget({
		id: "803529",
		localized: false,
		onCreated(btn) {
			var vals, keys = [, "label", "tooltiptext"];
			var disable = () => {
				keys[0] = "disabled";
				vals = [true, "No Last Session", "No last session, nothing to clear"];
			}
			var setState = btn => {
				for(var ind in keys) btn.setAttribute(keys[ind], vals[ind]);
			}
			if (ss.canRestoreLastSession) {
				keys[0] = "oncommand";
				var cmd = `SessionStore.canRestoreLastSession = false;`;
				vals = [cmd, "Clear Last Session", "Clear last session"];

				var qt = "quit-application-granted";
				var ct = "sessionstore-last-session-cleared";

				var destroy = () => {
					Services.obs.removeObserver(obs, ct);
					Services.obs.removeObserver(destroy, qt);
				}
				var obs = () => {
					destroy();
					disable();
					var widget = CustomizableUI.getWidget(this.id);
					for(var win of CustomizableUI.windows) {
						var {node} = widget.forWindow(win);
						setState(node);
						node.removeAttribute("oncommand");
					}
				}
				Services.obs.addObserver(obs, ct);
				Services.obs.addObserver(destroy, qt);
			}
			else disable();

			(this.onCreated = btn => {
				setState(btn);
				btn.setAttribute("image", "chrome://global/skin/icons/close-fill.svg");
			})(btn);
		}
	});
})("resource:///modules/sessionstore/SessionStore.sys.mjs");

Отсутствует

 

№60830-01-2023 23:34:59

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

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

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


«The Truth Is Out There»

Отсутствует

 

№60908-02-2023 03:56:25

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

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

Dumby
Подскажите пожалуйста.


Понадобился мне [firefox] 78 ESR. Стал подключать UCF-кнопки и столкнулся с такой проблемкой.
Не получается подключить кнопки, которые сделаны в виде JSM'ок.
Пытаюсь подключать так:

Выделить код

Код:

scriptsbackground: [ // В фоне [System Principal]
	{ func: 'ChromeUtils.import("chrome://user_chrome_files/content/custom_scripts/Script.jsm");' },
],

Версия UCF крайняя (2021-9-23).
Консоль ничего не говорит.
Это особенность 78 версии или у меня лыжи не едут?


«The Truth Is Out There»

Отсутствует

 

№61008-02-2023 09:10:21

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

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

unter_officer пишет

Не получается подключить кнопки, которые сделаны в виде JSM'ок

У меня тоже лыжи не смазанные... правда, версия UCF старая 2021-2-14 и подключал в custom_script.js, как здесь (спойлеры внизу).
Консоль что-то говорит про:
ChromeUtils.domProcessChild.childID || ({
Это на 78esr. На 91esr, 102esr и последней релизной 109 нормально подхватывается.

Отредактировано LGS (08-02-2023 09:36:41)

Отсутствует

 

№61108-02-2023 10:00:28

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

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

unter_officer пишет

Не получается подключить кнопки, которые сделаны в виде JSM'ок.

Испёк портабл 78.15.0esr + UCF 2021-9-23
Проставил галку «Включить скрипты:»
[✔] В фоне [System Principal]


Создал в папке custom_scripts файл Script.jsm

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

Выделить код

Код:

var EXPORTED_SYMBOLS = [];
ChromeUtils.import("resource:///modules/CustomizableUI.jsm").CustomizableUI.createWidget({
	id: "is_78esr_special_test",
	label: "TEST: is 78ESR Special?",
	tooltiptext: "TEST: is 78ESR Special?",
	localized: false,
	onCreated(btn) {
		btn._handleClick = function() {
			this.ownerGlobal.Services.prompt.alert(null, null, "Success!");
		}
		btn.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==");
	}
});


Подключил как у тебя написано.
Результат: кнопка создалась и кликается.


Таким образом, ответ на вопрос «Это особенность 78 версии или у меня лыжи не едут?»
будет такой: нет, 78-я версия ничем здесь не особенная.


LGS пишет

Консоль что-то говорит про:
ChromeUtils.domProcessChild.childID

Правильно говорит, в 78 у ChromeUtils нет свойства domProcessChild
Наверно, можно заменить ChromeUtils.domProcessChild.childID
на ChromeUtils.contentChild

Отсутствует

 

№61208-02-2023 11:36:15

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

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

Dumby пишет

Таким образом, ответ на вопрос «Это особенность 78 версии или у меня лыжи не едут?»
будет такой: нет, 78-я версия ничем здесь не особенная.

Оказалось, что дело в самих кнопках.
По вашему совету заменил ChromeUtils.domProcessChild.childID на ChromeUtils.contentChild.
Кнопка LongLeftClick заработала без ошибок.
Кнопка Reload user{Chrome, Content}.css работает, но при нажатии ПКМ все же выдает в консоль TypeError: ChromeUtils.getAllDOMProcesses is not a function.
Кнопка Сохранить страницу или выбранное как HTML появилась, но не работает. Консоль пишет TypeError: cwg.domProcess is undefined.
В Старом about:config я ничего не редактировал. Просто не работает. Консоль пишет: TypeError: L10nRegistry.registerSources is not a function.

Отредактировано unter_officer (08-02-2023 11:39:08)


«The Truth Is Out There»

Отсутствует

 

№61308-02-2023 11:37:06

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

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

Dumby пишет

Наверно, можно заменить ChromeUtils.domProcessChild.childID
на ChromeUtils.contentChild

Подхватился и работает... лыжи едут. Спасибо!

Отсутствует

 

№61410-02-2023 09:07:21

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

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

unter_officer пишет

Кнопка Reload user{Chrome, Content}.css работает, но при нажатии ПКМ все же выдает в консоль TypeError: ChromeUtils.getAllDOMProcesses is not a function.

Да, метод добавлен только c Firefox 80+
Без него, разве что process script'ом пытаться пнуть.

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

Выделить код

Код:

var name = "UCFUserCReloader", EXPORTED_SYMBOLS = [name + "Parent", name + "Child"];

var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");

var find = function(sheet) {
	return sheet.href == this;
}
var getSheet = (doc, href) =>
	InspectorUtils.getAllStyleSheets(doc).find(find, href);

if (!ChromeUtils.contentChild) {
	var data, url;
	var noop = () => {};

	var getURI = sub => {
		var file = Services.dirsvc.get("UChrm", Ci.nsIFile);
		file.append(`userC${sub}.css`);
		return Services.io.newFileURI(file).QueryInterface(Ci.nsIFileURL);
	}
	var oncontextmenu = e => e.ctrlKey || e.shiftKey || e.detail != 1 || contextmenu(e);

	var contextmenu = e => {
		var {file, spec} = getURI("ontent");
		var wb = Services.appShell.createWindowlessBrowser();
		var contentSheet = getSheet(wb.document, spec);
		wb.close();

		if (!contentSheet) return oncontextmenu = contextmenu = noop;

		url = spec;
		var child = {moduleURI: __URI__};
		ChromeUtils.registerProcessActor(name, {child, parent: child});
		var ps = `data:,ChromeUtils.contentChild?.getActor("${name}").query()`;

		(contextmenu = async e => {
			if (!file.exists()) return;
			e.preventDefault();
			data = await reload(contentSheet, Object.create(null));
			if (data) for(var p in data) {
				Services.ppmm.loadProcessScript(ps, false);
				return e.view.setTimeout(restyle, 150);
			}
		})(e);
	}
	ChromeUtils.import("resource:///modules/CustomizableUI.jsm").CustomizableUI.createWidget({
		label: "Reload user{Chrome, Content}.css",
		tooltiptext: "L: Reload userChrome.css\nR: Reload userContent.css",

		id: "798278",
		localized: false,
		onCreated(btn) {
			btn._handleClick = this.click;
			btn.oncontextmenu = oncontextmenu;
			btn.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAIpwAACKcBMsYCAwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMwSURBVEiJ5dbNb5RVFMfxz3mmrYgYE0IN4IaKb4n4UqOwMCYu2JCoQVDiwoUrQ4j0xao7ExITQxRoodEFK1cmRkSE8AeYYKpEFF0YY4SiUSMRQW0sLe0818U8nekwHe3U7vhtnnNOzj3f89znPvderjVFK8npaSWrPSjpElahQzhvyrF4y++t1GqbF7DHOvQLj6Ozrt2EDutYRHAasMK0vXgWWZO0SX/7DlJf6Skp3UWcFeVRV4zG235tCZx6rDPtKLqqAN4XPhROm3DJEiG3LA6aKkZ14jUSKaOd1Gsco6Qz8vRiDDvTFJz63S13AjdVAg7JvBxDzs2RfrE2MP9ijolZijvJXo/h8pmmb5z6LZf7qICWJQNxwP5mM1OnzNdy03V1U0oi2x77y+/Wp16t3CDWgvDKvKGIQZepfO+iWBIpKG9s7HGW0k7dKgsJjsSQffOF1or4srAuS04U9jOp14amYGGgiF2Re6llaEWnMSbPNyl5DtNFQzvnBKdd2oRNhXt4ZvW1rCwfkbInY9jHMeiscBiEJ9Lz2mfSaovgovXC8sI7siAoYsgnMy8JkmPYhhtdbwOV6a9NdVhT69qphYIblPl0FuO2WrimVVVrcu7dZkFqd75q525uBCelqj0tXzRwvSYbwWZ1doOVi4Yad0vVDj81gjPfV+2y9YsGLnlgFrj6p9TA405irPAemwmn/raNqc/D/wO9uXj+bMhXDeDihDledLYt9VmTektb5flxebYgcOpx+yzw0aic3vXgSqY9hdUuOUx6T+WWcX/LUELYh3ZMyqq1G8FxwCl8ULjdVFd6d6tgPQbMfLIwHIPONgVXWs1OFm3Mjt6Rdlg2X2bq0yfsLtzP/OHVq3PqzuPUm/Vj9xz9ZDrcg5F/Bb6gS8mbkq1F6EdlW+IdE03Baae1pEeJb1SuO0vrMvPsPvKRArDaChf8qWRal/BQccBsxnXFiBFTtjS7czW93qYdVurQJZW6SLeK+DaGyofSLh0uGUNHk6F/SfZI3ojh2k41b3DThnrdS+1/nAnjcxzR5mDsdeG/6szrXl2nJX4w4RFJJ3LhF7lzMey3lmtdU/oHaoj4Y/PDRWgAAAAASUVORK5CYII=");
		},
		get click() {
			var {file, spec} = getURI("hrome");
			var chromeSheet = getSheet(Services.wm.getMostRecentWindow(null).document, spec);
			delete this.click;
			return this.click = !chromeSheet ? noop : function() {
				var win = this.ownerGlobal;
				if (win.event?.detail < 2 && file.exists())
					reload(chromeSheet),
					win.setTimeout(restyle, 50);
			}
		}
	});

	var restyle = () => {
		var subst = "u_css_reloader_restyle_substitution";
		var rph = Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler);
		rph.setSubstitution(subst, Services.io.newURI("data:text/css,:root{}"));

		var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
		var args = [Services.io.newURI(`resource://${subst}/`), sss.USER_SHEET];
		(restyle = () => {
			sss.loadAndRegisterSheet(...args);
			sss.unregisterSheet(...args);
		})();
	}
	var reload = async (sheet, obj) => {
		try {var style = await (await fetch(sheet.href)).text();}
		catch {return obj;}

		InspectorUtils.parseStyleSheet(sheet, style);
		if (obj) obj[sheet.href] = style;
		for(var ind = 0, len = sheet.cssRules.length; ind < len; ind++) {
			var rule = sheet.cssRules.item(ind);

			rule.type == rule.IMPORT_RULE
			&& rule.styleSheet.href.startsWith("file:///")
			&& await reload(rule.styleSheet, obj);
		}
		return obj;
	}
	var UCFUserCReloaderParent = class extends JSProcessActorParent {
		receiveMessage(msg) {
			return msg.name ? url : data;
		}
	}
}
else var UCFUserCReloaderChild = class extends JSProcessActorChild {
	async query() {
		var {sheet} = this;
		if (!sheet) {
			var en = Services.ww.getWindowEnumerator(null);
			if (en.hasMoreElements()) sheet =
				this.sheet = getSheet(en.getNext().document, await this.sendQuery("u"));
		}
		sheet && this.parse(sheet, await this.sendQuery(""));
	}
	parse(sheet, data) {
		var style = data[sheet.href];
		if (!style) return;

		InspectorUtils.parseStyleSheet(sheet, style);
		for(var ind = 0, len = sheet.cssRules.length; ind < len; ind++) {
			var rule = sheet.cssRules.item(ind);

			rule.type == rule.IMPORT_RULE
			&& rule.styleSheet.href.startsWith("file:///")
			&& this.parse(rule.styleSheet, data);
		}
	}
}

Кнопка Сохранить страницу или выбранное как HTML появилась, но не работает. Консоль пишет TypeError: cwg.domProcess is undefined.

Если бы только это.
Ещё нет nsIFocusManager.focusedContentBrowsingContext
и напрочь отсутствует IOUtils как таковой.


Ладно, можно попробовать что-нибудь подпаять.
Вот первая часть. Остальное, var snap = mainWin => {…} такое же.

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

Выделить код

Код:

var name = "UCFSaveSnapshotToHTML", EXPORTED_SYMBOLS = [name + "Child"];

var fw = win => {
	var gfe = Cc["@mozilla.org/focus-manager;1"]
		.getService(Ci.nsIFocusManager).getFocusedElementForWindow;
	return (fw = win => {
		var res = {};
		var fe = gfe(win, true, res);
		return [res.value, fe];
	})(win);
}

if (!ChromeUtils.contentChild) {
	var click = async function() {
		var win = this.ownerGlobal;

		var bc = win.gBrowser.selectedBrowser.browsingContext, cwg = bc.currentWindowGlobal;
		var fp = picker(win, "", Ci.nsIFilePicker.modeSave);

		if (cwg.isInProcess) {
			var [fwin, fe] = fw(bc.window);
			if (fe?.matches("browser[remote=true]"))
				cwg = fe.browsingContext.currentWindowGlobal;
		}
		var [fileContent, fileName] = cwg.isInProcess
			? snap(fwin)
			: await cwg.contentParent.getActor(name).sendQuery("", cwg.innerWindowId);

		fp.defaultString = fileName;
		fp.appendFilters(fp.filterHTML);
		fp.appendFilters(fp.filterAll);

		await new Promise(fp.open) != fp.returnCancel &&
			win.OS.File.writeAtomic(fp.file.path, new win.TextEncoder().encode(fileContent));	
	}
	ChromeUtils.import("resource:///modules/CustomizableUI.jsm").CustomizableUI.createWidget({
		label: "796961",
		tooltiptext: "796961",

		id: "796961",
		localized: false,
		onCreated(btn) {
			btn._handleClick = click;
			btn.setAttribute("image", "chrome://devtools/skin/images/tool-application.svg");
		}
	});

	var picker = (...args) => {
		ChromeUtils.registerProcessActor(name, {child: {moduleURI: __URI__}});
		return (picker = Components.Constructor(
			"@mozilla.org/filepicker;1", "nsIFilePicker", "init"
		))(...args);
	}
}
else var UCFSaveSnapshotToHTMLChild = class extends JSProcessActorChild {
	receiveMessage(msg) {
		return snap(fw(WindowGlobalChild.getByInnerWindowId(msg.data).browsingContext.window)[0]);
	}
}

В Старом about:config я ничего не редактировал. Просто не работает. Консоль пишет: TypeError: L10nRegistry.registerSources is not a function.

Странно, там же есть старый about:config.
chrome://global/content/config.xhtml


Но если, зачем-то, надо, то можно после строки, содержащей
.import("resource://gre/modules/L10nRegistry.jsm"); дописать

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

Выделить код

Код:

//
		if (!L10nRegistry.registerSources) L10nRegistry = Object.assign(
			Object.create(L10nRegistry),
			{registerSources([s]) {this.registerSource(s);}, removeSources([s]) {this.removeSource(s);}}
		);

Отредактировано Dumby (10-02-2023 09:10:56)

Отсутствует

 

№61510-02-2023 12:51:30

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

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

Dumby
Кнопочки "Reload user{Chrome, Content}.css" и "Сохранить страницу или выбранное как HTML" теперь отлично работают.
Про то, что в [firefox] 78 в старый about:config можно попасть по адресу chrome://global/content/config.xhtml, я за давностью забыл напрочь.


Огромное спасибо за помощь!


«The Truth Is Out There»

Отсутствует

 

№61610-02-2023 19:07:14

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

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

Dumby
Если не сложно, переделайте под [firefox] 78 вот этот скриптик:

HTTP Request Logger

Выделить код

Код:

//
// HTTP Request Logger ..........
// https://forum.mozilla-russia.org/viewtopic.php?pid=794053#p794053 .....
//
(async self => CustomizableUI.createWidget(({
  label: "HTTP Request Logger",
  tooltiptext: "HTTP Request Logger",
  fileName: "http-request-log.txt",
  images: {
    true: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/AAAA/wAAAP/AwMD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/AAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/wAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/AAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/wAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/AAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/wAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/AAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/AwMD/AAAA/wAAAP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==",
    false: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/AAAA/wAAAP/AwMD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/AwMD/AAAA/wAAAP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AACsQQAArEEAAKxBH/isQR/4rEEf+KxBH/isQR/4rEEf+KxBH/isQR/4rEEf+KxBH/isQQAArEEAAKxBAACsQQ=="
  },
  id: "ucf-httpRequestLogger",
  localized: false,
  init(pref) {
    var topic = "http-on-modify-request";
    this.toggle = () => Services.prefs.setBoolPref(pref, !this.active);
    var prefObs = () => {
      var val = Services.prefs.getBoolPref(pref, false);
      if (this.active ^ (this.active = val))
        Services.obs[`${val ? "add" : "remove"}Observer`](this, topic);
      this.setBtnsState();
    }
    prefObs();
    Services.prefs.addObserver(pref, prefObs);
    Services.obs.addObserver(function quit(s, t) {
      Services.obs.removeObserver(quit, t);
      Services.prefs.removeObserver(pref, prefObs);
      self.active && Services.obs.removeObserver(self, topic);
    }, "quit-application-granted");
    return self = this;
  },
  onCreated(btn) {
    btn._handleClick = this.toggle;
    btn.setAttribute("image", this.images[this.active]);
  },
  setBtnsState() {this.setBtnsState = () => {
    var img = this.images[this.active];
    var widget = CustomizableUI.getWidget(this.id);
    for(var win of CustomizableUI.windows)
      widget.forWindow(win).node?.setAttribute("image", img);
  }},
  log: "",
  observe(channel) {
    if (!(channel instanceof Ci.nsIHttpChannel)) return;
    this.log += `${
      channel.referrerInfo?.originalReferrer?.spec || "(none)"
    } ${
      channel.requestMethod
    } ${
      channel.URI.spec
    }\r\n`;

    this.busy || this.write();
  },
  write() {
    var file = Services.dirsvc.get("UChrm", Ci.nsIFile);
    file.append(this.fileName);
    var {path} = file;

    var {IOUtils} = Cu.getGlobalForObject(Cu);
    var modes = [{mode: "create"}, {mode: "append"}];
    var unbusy = () => {
      this.busy = false;
      this.log && this.write();
    }
    (this.write = () => {
      this.busy = true;
      var {log} = this;
      this.log = "";
      IOUtils.writeUTF8(path, log, modes[+file.exists()])
        .finally(unbusy);
    })();
  }
}).init("ucf.httpRequestLogger.enabled")))();


«The Truth Is Out There»

Отсутствует

 

№61712-02-2023 09:44:39

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

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

unter_officer
Попробуй такой write()

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

Выделить код

Код:

//
  write() {
    var file = Services.dirsvc.get("UChrm", Ci.nsIFile);
    file.append(this.fileName);

    var flags = 0x02 | 0x08 | 0x10; // MODE_WRONLY | MODE_CREATE | MODE_APPEND
    var args = ["@mozilla.org/network/file-output-stream;1", "nsIFileOutputStream", "init"];
    var fos = Components.Constructor(...args).bind(null, file, flags, 0o644, 0);

    var sis = Cc["@mozilla.org/io/string-input-stream;1"].createInstance(Ci.nsIStringInputStream);
    var copier = Cc["@mozilla.org/network/async-stream-copier;1"].createInstance(Ci.nsIAsyncStreamCopier2);

    var ro = {onStartRequest() {}};
    ro.onStopRequest = () => {
      this.busy = false;
      this.log ? this.write() : sis.setData("", 0);
    };
    (this.write = () => {
      this.busy = true;
      sis.setUTF8Data(this.log);
      this.log = "";
      try {
        copier.init(sis, fos(), null, 0, true, true);
        copier.asyncCopy(ro, null);
      } catch(ex) {
        this.toggle();
        ro.onStopRequest();
        Services.prompt.alert(null, this.label, ex.message);
      }
    })();
  }

Отсутствует

 

№61812-02-2023 12:20:16

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

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

Dumby
Большое спасибо! Всё отлично работает.


«The Truth Is Out There»

Отсутствует

 

№61916-02-2023 06:44:28

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

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

egorsemenov06
Можно сменить протокол svg'шки.
Создать, например, cookie-toggle.svg
допустим, в папке user_chrome_files\custom_scripts\imgs


Содержимое файла взять из data-адреса от «<svg» и до «/svg>» включительно.
Тогда в коде меняем

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

Выделить код

Код:

/*
    img = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='32'><path style='fill:none;stroke:context-fill;stroke-opacity:context-fill-opacity;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round;' d='M12.5 10.5v-1h-1v1h1m-4-4h1v1h-1v-1m0 7h1v-1h-1v1m-6-7h1v1h-1v-1m4 4v-1h-1v1h1m-3 3v-1h-1m3-9h1v1h-1v-1M8 .6C8 5 11 8 15.4 8c0 4-3.4 7.4-7.4 7.4S.6 12 .6 8 4 .6 8 .6M12.5 26.5v-1h-1v1h1m-4-4h1v1h-1v-1m0 7h1v-1h-1v1m-6-7h1v1h-1v-1m4 4v-1h-1v1h1m-3 3v-1h-1m3-9h1v1m2-3.5v.5h1V17m2 2.5v1h1v-1h-1m3.5 3h-.5v1h.5m-8.5-3h-1v-1M8 16.6c4 0 7.4 3.4 7.4 7.4S12 31.4 8 31.4.6 28 .6 24 4 16.6 8 16.6'/></svg>";
*/
    img = "chrome://user_chrome_files/content/custom_scripts/imgs/cookie-toggle.svg";


Можно и динамическую хром-регистрацию в код вписать, если очень надо.
Смотрю, и как resource-адрес тоже работает
скрытый текст

Выделить код

Код:

/*
    img = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='32'><path style='fill:none;stroke:context-fill;stroke-opacity:context-fill-opacity;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round;' d='M12.5 10.5v-1h-1v1h1m-4-4h1v1h-1v-1m0 7h1v-1h-1v1m-6-7h1v1h-1v-1m4 4v-1h-1v1h1m-3 3v-1h-1m3-9h1v1h-1v-1M8 .6C8 5 11 8 15.4 8c0 4-3.4 7.4-7.4 7.4S.6 12 .6 8 4 .6 8 .6M12.5 26.5v-1h-1v1h1m-4-4h1v1h-1v-1m0 7h1v-1h-1v1m-6-7h1v1h-1v-1m4 4v-1h-1v1h1m-3 3v-1h-1m3-9h1v1m2-3.5v.5h1V17m2 2.5v1h1v-1h-1m3.5 3h-.5v1h.5m-8.5-3h-1v-1M8 16.6c4 0 7.4 3.4 7.4 7.4S12 31.4 8 31.4.6 28 .6 24 4 16.6 8 16.6'/></svg>";
*/
    img = (rph => {
        var subst = "ucf-cookie-toggle-btn-img";
        rph.setSubstitution(subst, Services.io.newURI(
            "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='32'><path style='fill:none;stroke:context-fill;stroke-opacity:context-fill-opacity;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round;' d='M12.5 10.5v-1h-1v1h1m-4-4h1v1h-1v-1m0 7h1v-1h-1v1m-6-7h1v1h-1v-1m4 4v-1h-1v1h1m-3 3v-1h-1m3-9h1v1h-1v-1M8 .6C8 5 11 8 15.4 8c0 4-3.4 7.4-7.4 7.4S.6 12 .6 8 4 .6 8 .6M12.5 26.5v-1h-1v1h1m-4-4h1v1h-1v-1m0 7h1v-1h-1v1m-6-7h1v1h-1v-1m4 4v-1h-1v1h1m-3 3v-1h-1m3-9h1v1m2-3.5v.5h1V17m2 2.5v1h1v-1h-1m3.5 3h-.5v1h.5m-8.5-3h-1v-1M8 16.6c4 0 7.4 3.4 7.4 7.4S12 31.4 8 31.4.6 28 .6 24 4 16.6 8 16.6'/></svg>"
        ));
        return `resource://${subst}/`;
    })(Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler));


Ну, или включить настройку svg.context-properties.content.enabled
Но, я не знаю почему она дефолтно выключена,
может тому есть какие-то веские причины.

Отсутствует

 

№62017-02-2023 10:18:53

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

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

egorsemenov06
Опаньки!
Bug 1817071 - Remove -moz-image-region


Попытка наброска реплейсмента, если 16px:


1. После многочисленных trbn.setAttribute(…) — ещё один
trbn.setAttribute("image", img);


2. Правка стиля

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

Выделить код

Код:

/*
                #${id} {
                    list-style-image: url("${img}") !important;
                    -moz-image-region: rect(0px, 16px, 16px, 0px) !important;
                }
                #${id}[badge="0"] {
                    -moz-image-region: rect(16px, 16px, 32px, 0px) !important;
                }
*/
                #${id} image {
                    --h: 16px;
                    height: var(--h); !important;
                    object-fit: cover !important;
                    object-position: top !important;
                }
                #${id}[badge="0"] image {
                    object-position: 0 calc(-1 * var(--h)) !important;
                }

Отсутствует

 

№62117-02-2023 16:42:29

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

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

Dumby пишет

1. После многочисленных trbn.setAttribute(…) — ещё один
trbn.setAttribute("image", img);


2. Правка стиля

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

Выделить код

Код:

/*
                #${id} {
                    list-style-image: url("${img}") !important;
                    -moz-image-region: rect(0px, 16px, 16px, 0px) !important;
                }
                #${id}[badge="0"] {
                    -moz-image-region: rect(16px, 16px, 32px, 0px) !important;
                }
*/
                #${id} image {
                    --h: 16px;
                    height: var(--h); !important;
                    object-fit: cover !important;
                    object-position: top !important;
                }
                #${id}[badge="0"] image {
                    object-position: 0 calc(-1 * var(--h)) !important;
                }

У меня в этой кнопке иконка не пропадала. Видимо из-за включенного svg.context-properties.content.enabled. Но на всякий случай фикс все же накатил.
После применения фикса все ОК. Спасибо.


«The Truth Is Out There»

Отсутствует

 

№62221-02-2023 15:06:43

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

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

Dumby, скажите, пожалуйста, а нельзя ли с помощью скрипта вернуть пункт в контекстном меню адресной строки "Вставить и перейти" в версиях 91 и выше..?
Как было в старых версиях:
PastGo.1676980660.png
Без него как-то не совсем комфортно... чего-то удобного из функционала не хватает.
Что интересно, в новых версиях ФФ в строке поиска (не адреса) пункт "Вставить и искать" оставили, а адресную почему-то обделили...

Отсутствует

 

№62321-02-2023 15:33:54

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

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

LGS пишет

нельзя ли с помощью скрипта вернуть пункт в контекстном меню адресной строки "Вставить и перейти"

Нет. Нельзя «вернуть» то, что не пропадало.

Отсутствует

 

№62421-02-2023 16:36:10

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

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

Dumby пишет

Нельзя «вернуть» то, что не пропадало.

Понятно.

Отсутствует

 

№62528-02-2023 11:15:21

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

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

Dumby, вы, вроде как, .uc.js машинерию не особо жалуете, но, может посмотрите этот скрипт, чтобы на 110 заработал.
Он показывает закладки(папки) из кнопки избранного, меню, гамбургера в боковой панели. На 102esr еще срабатывал, на 110 уже нет.
Консоль пишет ошибку Uncaught TypeError: PlacesUtils.bookmarks.getFolderIdForItem is not a function в строке  let aFolderItemId = PlacesUtils.bookmarks.getFolderIdForItem(node.itemId);.

Отсутствует

 

Board footer

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