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

Общайтесь со знакомыми и друзьями в нашем сообществе в Facebook.

CSS-стили » Настройка внешнего вида Firefox в userChrome.css » 16-09-2023 09:25:10

xrun1 пишет

Часть 2 к этому.

Ааа, у них там --panel-shadow-margin используется в round(…, 1px);


То есть, его нужно тоже указывать в пикселях
--panel-shadow-margin: 0px !important;

CSS-стили » Настройка внешнего вида Firefox в userChrome.css » 14-09-2023 18:55:55

xrun1 пишет

Обрезка текста, скроллинг + скроллинг по непонятному принципу

Да, воспроизводится, я вижу это.
Скроллинг, правда, редко, а вот обрезка текста,
кроп текста самого длинного пункта, и общая сдвинутость
пунктов влево вверх — всегда.


В menu_background.css есть блок arrowscrollbox.menupopup-arrowscrollbox {…}
в нём, в конце, есть margin: 0 !important;


Попробуй заменить margin на --panel-shadow-margin

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 09-09-2023 15:45:21

LGS пишет

скрипт, который убирает фокус из строки поиска на страницах about:config и about:cfg..?

Хмм, убирает когда?
Если при загрузке, то, может быть, создать blur.js

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

Выделить код

Код:

location.pathname == "config"
	? document.getElementById("about-config-search").blur()
	: textbox.addEventListener("focus", e => e.target.blur(), {once: true});


И прописать в CustomStylesScriptsChild.jsm, в массив DOMContentLoaded
{ path: "blur.js", urlregxp: /^about:c(?:f|onfi)g(?:\?.+)?$/ },


Ну, и убедиться, что в настройках UCF стоит галка
[✔] Включить стили и скрипты для контента [about:, chrome:, moz-extension:]

CSS-стили » Настройка внешнего вида Firefox в userChrome.css » 08-09-2023 20:52:35

Andrey_Krropotkin пишет

есть стиль для иконок в контекстном меню

Гонишь! :)

сначала контекстное меню все как надо, но после второго клика - меню сдвигается

то же самое сдвиг

Вот скриншоты с чистого профиля.
Здесь — слева первый ПКМ, справа второй ПКМ.
[spoiler][code]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqQAAAHuCAIAAADGD4lpAABDs0lEQVR42u3de5xU5Z3n8YerXMyKmkx3goo3MM6sdAsrkzHMRpxAe0E0u5OJit0Sb4mai8PSGCc3opNRaJaoGZNMogYbNU5mZxTvDW50ZtBkNCiNMwmCqCjE7sELbJSL0LDPqeepqlNVp5rueur0Ob96Pu8/eFVXnzp1uu3v7/vUqdPtoPpHb+/au0sB8Mb+c67+6GN3EHzAH4N02a879c8TPIL9+/ebf80NIEGDMsyNpI8lRocccogue4IPGD4EP8myNyHfl7U/K+nvCXw0KGtwlqrd5Cdb9gQf6eFP8JMsexP1np6evRn6hkm+yo4DYADkVvQ650OGDBmaoW/oD3Pr/RqTbNkTfKSBb8FPsux1zvfs2fNBxu7du03yWeZjgOWW9ibtBx100PCMYcOG6eTXXuZV0mVP8JEGvgU/ybLXOd+1a9fOnTv1N/pjH/vYyJEjk/5uwHf6p/F3v/ud7h790zhixAj9k2mW+UkfV5UlW/YEH2njQ/CTLPv33ntPf4v1N/S4445L+vsA5G3cuFG/xNSx14t9Hfsay7xKuuwJPtKptoOfZNlv377997///bHHHsvSHqmiq+iVV1750Ic+pNf4w4YNM9fs1JJky57gI51qO/hJlv0777yjY

Сustom Buttons » Custom Buttons » 08-09-2023 18:25:53

Farby пишет

Что-то не так с этим

кодом

Выделить код

Код:

`
		var txt = dt.getData("text/plain");
		var url = dt.getData("text/x-moz-url-data");
		if (url)
			this.val = url, this.txt = dt.getData("text/x-moz-url").split("\n")[1];
		else if (!txt) return;
		try {
			this.val = new URL(txt.trim());
		} catch {
			this.val = txt;
			if (!this.textLinkRe.test(txt))
				this.type = this.text;

Там используется экземпляр URL как таковой,
но, по дороге, прицепили на него вызов строкового метода includes()
поэтому следует привести его к строке, например, new URL(txt.trim()).href


Dobrov пишет

на сайте vk.com

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


Andrey_Krropotkin пишет

у тебя на эту версию есть рабочий вариант?

У меня такой.

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 01-09-2023 09:47:40

Dobrov пишет

А как jsm в mjs переделывать?

Ооо, следуй за ними.

Например скрипт сохранения страницы SingleSaveHTML.jsm ?

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

Выделить код

Код:

export class SingleHTMLChild extends JSWindowActorChild { //класс = name + Child
	receiveMessage() { return htmlAndName(this.contentWindow);}
}
ChromeUtils.domProcessChild.childID || ({
	init(topic) {
		ChromeUtils.registerWindowActor(name, {
			allFrames: true,
			child: {esModuleURI: Components.stack.filename},

Чём модуль ES mjs и скрипт jsm отличаются? Нашёл только эту справку.

Ну, ES типа вебский модуль, только без top-level await'а.

Скрипт mjs в FireFox 97 будет работать?

Конечно нет. Даже рядом не ст

Сustom Buttons » Custom Buttons » 01-09-2023 09:46:05

vitalii201 пишет

bootstrap

bootstrap-loader.js не зачищен от Services.jsm
Но он и не слишком-то дружественнен к правке по своей природе.
Лучше разворачивать что-то гитхабское.


Или вот, на пробу (замену), shitty-simple
[spoiler=bootstrap-loader-mini.js][code]// bootstrap-loader-mini.js
Cu.evalInSandbox(
    '(async () => {\n\tvar {console, DOMParser} = Cu.getGlobalForObject(Cu);\n\n\tvar imp = sub => {\n\t\tvar url = `resource://gre/modules/${sub}.`;\n\t\ttry {return ChromeUtils.importESModule(url + "sys.mjs");}\n\t\tcatch {return ChromeUtils.import(url + "jsm");}\n\t}\n\tvar {AddonManager} = imp("AddonManager");\n\tvar {XPIProvider} = imp("addons/XPIProvider");\n\tvar {XPIDatabase, AddonInternal} = imp("addons/XPIDatabase");\n\n\tXPIDatabase.isDisabledLegacy = () => false;\n\n\tvar OPTIONS_TYPE_DIALOG = 1; // AddonManager.OPTIONS_TYPE_DIALOG\n\tvar aboutaddons = "chrome://mozapps/content/extensions/aboutaddons.js";\n\n\tvar optionsTypeDescriptor = {\n\t\tenumerable: true,\n\t\t

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 30-08-2023 21:05:43

xrun1 пишет

не получилось

Я тут пробовал сконвертировать jsm в mjs,
возможность импорта jsm'ок ведь выпилят, рано или поздно.
Вот, может это у тебя заведётся.


Там без файла favicon (наверняка уже свой стоит),
и без папки locale (а то на форум не влезет, использовать имеющуюся).


Регистрация about:cfg — соответственно
{ func: 'ChromeUtils.importESModule("chrome://user_chrome_files/content/aboutconfig/UCFAboutConfigFluent.mjs");' },


Текстовая ссылка на страницу загрузки
[spoiler][code]data:text/html;charset=utf-8,<!DOCTYPE html>%0A<html>%0A%09<head>%0A%09%09<title>aboutconfig-mjs</title>%0A%09%09<meta http-equiv="Content-Type" content="text/html; charset=utf-8">%0A%09</head>%0A%09<body> %0A%09%09<center style="font-family: Verdana; margin-top: 25vh;"><h1><a%0A%09%09%09download="aboutconfig-mjs.zip"%0A%09%09%09href="data:application/x-zip-compressed;base64,UEsDBBQAAAAIAEjtLwBzS6f93AEAALgDAAAKAAAAY29uZmlnLmNzc5VTwYrbMBA9N5B/GDaXbFrbyZItxb1toVDYwtLNZY+yPLbVyBojjdfJlv57x06cps1C

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 30-08-2023 13:33:23

Black_Monk пишет

Вот только кнопка about:config при нажатии ЛКМ не срабатывает

Можно заменить в parent.js


br.loadURI(url
на
br.fixupAndLoadURIString(url
или на
br.loadURI(Services.io.newURI(url)

Сustom Buttons » Custom Buttons » 30-08-2023 12:12:22

Andrey_Krropotkin пишет

не пойму чем заменить в этой кнопке "global"

Чем-нибудь глобальным, в смысле независимым от окон,
куда можно добавить ссылку на storage и она там останется, пока сам не удалишь.
Например, js-объект рождённый в модуле, только нормальный,
а не какой-нибудь неподходящий, типа замороженный как AppConstants или ещё что.


Ну или, собственно, сам SystemGlobal. Вот там же две строки с var global = …
Можно первую раскомментировать, а вторую закомментировать,
если конечно window.Services у тебя не «overwritten».


Black_Monk пишет

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

А зачистка Services.jsm в нём проведена?

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 29-08-2023 21:09:48

egorsemenov06 пишет

посмотрите пожалуйста вот этот скрипт на 117.0 перестал работать

Да, это Bug 713713 - Clean up OpenBrowserWindow
Может так сойдёт? Код в custom_script.js, не в окно.

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

Выделить код

Код:

(async (bwt, lazy) => {
	var TelemetryStopwatch = lazy = Object.create(null);
	lazy.start = lazy.finish = () => {};
	ChromeUtils.defineLazyGetter(lazy, "BrowserHandler",
		() => Cc["@mozilla.org/browser/clh;1"].getService(Ci.nsIBrowserHandler)
	);
	ChromeUtils.defineESModuleGetters(lazy, {
		HomePage: "resource:///modules/HomePage.sys.mjs",
		PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs"
	});
	var bwt = ChromeUtils.importESModule(bwt).BrowserWindowTracker;
	Object.assign(bwt, eval(`({${bwt.openWindow}})`.replace(/\n +if \(!args &.+?}/s, "")));
})("resource:///modules/BrowserWindowTracker.sys.mjs");

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 26-08-2023 14:44:52

egorsemenov06 пишет

не работает после удаления в ней Components.utils.import("resource://gre/modules/Services.jsm");

Оно там под условием if(!("Services" in window))
которое в предыдущей строке, так что надо удалить ещё и её.


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


JKT пишет

рабочий вариант кода для установки

Да нынешний вроде должен работать.

не подписанных расширений

Неподписанное расширение — это "масляное масло".
Подписанным или неподписанным может быть WebExtensions, но не расширение.


Расширения сто лет как не подписывают,
а которые были подписаны ещё тогда, уже давно отвалились.

для FF 102.9 esr

Для ESR 102 код не требуется, достаточно настроек
xpinstall.signatures.required
extensions.experiments.enabled

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 26-08-2023 09:34:10

[spoiler][code]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyEAAAIgCAIAAAAdp/G1AACrz0lEQVR42uzdCVwU9f8/8M9yKiioeBEgh0B+ycwj9atUWmki9i37fhM0TawUPLA0BU2xLBELNDVPsENNU7B+Wf8CS9OytMzyitA4PVC8MLxIVOA/n53d2bl22YVdZnd5Pb+/h7/Zz37mM+9dtp0XnxlmVA8++CABAAAAALNSMRnr4MGDSpcBAAAAYD969+6tyVgf5BxTuhgAAAAAe/DS0G66jJWRjYwFAAAAYAbjIrqF90XGAgAAADArQcZal/OH0vUAAAAA2IORg7s+1q+PJmN9+M2fStcDAAAAYA+efCxsWH9kLAAAAACzEmSs9TvzlK4HAAAAwB4MfLjLiIf7ajLWxl0nlK4HAAAAwB706hcybuC/NRlr0558pesBAAAAsAoX/jx2NGvjueN6z6S651/3PRA1tsN93WSfDe0VNOXxfshYAAAAAAKfThwzZWZs/3499HXY//PhVYsznl27SfZZQcba8n2hpMMPHzy66p5NWUN9DLTwnF3/xiIyeeW4DtyC0m8QAAAAQD18MGLIZzkbb+Qe0tehRdee/xs69qVt38g+2+GBgFlPaDNW5t5iSYfv3x+wyueTbbxEJW0RuPDpiFdW0GoGpRaN76v02wMAAABQL+v+N/jTrz66dvTgZ39d3FdawbSE+7biFv53b3uPB3o/++QLEz7bKbt6szDf5KHh5sxYAAAAAHaAyVhZ29ddPfRzwk+nP81MZ1qejY7jFtIe6uTZs1/U8AlGZaxt+0okHb7PeGil79ZPI31lWo6kBqV8qW576sOsxIH8p85nPfvye2Tc1iUk+dH1udy6o+b8NPhXcR/+4AAAAABWIX34oNUp8SWZH+5rEZTn2pFNV0QdsMKqzoffKA6MfnHynJVx23fJrn4n+J6lTz6kyVif7T8l6bAnPfwFSTz

CSS-стили » Imagus + css-custom-style = no transition ??? » 22-08-2023 18:51:06

6e73epo пишет

твой стиль

Какой ещё стиль?


Разве множественные значения для свойства transition-property
не должны следовать через запятую?


Если должны, то никакого стиля и нет, а всего лишь ин-валидная писанина.

Скрипты » userChrome.js » 21-08-2023 16:29:36

fuchsfan пишет

Просьба адаптировать его, чтобы он работал в среде Aris-t2.

Почему у тебя в sandbox'е не работает я без понятия.
А в окно можно попробовать, например, так

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

Выделить код

Код:

(async (flag, url) => {
	if (location != url) return;
	await delayedStartupPromise;
	if (Downloads[flag]) return;
	Downloads[flag] = true;

	var bwt = BrowserWindowTracker;
	var show = function(download) {
		download.newDownloadNotified ||
		bwt.getTopWindow(this)?.DownloadsPanel.showPanel();
	};
	["PUBLIC", "PRIVATE"].forEach(async (type, ind) => {
		var view = Object.create(null);
		view.private = Boolean(ind);
		view.onDownloadChanged = show;
		(await Downloads.getList(Downloads[type])).addView(view);
	});
})("806555", "chrome://browser/content/browser.xhtml");

Скрипты » userChrome.js » 19-08-2023 09:47:56

6e73epo пишет

Uncaught (in promise) TypeError: document.getElementById(...) is null

Да, точно! userChrome же.
Следует проверять, что это именно документ окна браузера.
Я избалован UCF'ским custom_script_win.js, где такая проверка не требуется,
вот и вылетело из головы. Подправил.

Скрипты » userChrome.js » 17-08-2023 17:05:46

казявка
Уж не знаю что за Цент,
а для лисы как-то так, наверно

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

Выделить код

Код:

(async (id, url) => {
	if (location != url) return;
	var menuitem = document.createXULElement("menuitem");
	document.getElementById(id).after(menuitem);
	var hidden = () => !nsContextMenu.contentData.context.linkTextStr;	
	menuitem.hidden = true;
	menuitem.render = () => {
		if (hidden()) return;
		menuitem.hidden = false;
		menuitem.id = id + "text";
		menuitem.label = "Скопировать текст ссылки";
		menuitem.setAttribute("oncommand", "navigator.clipboard.writeText(gContextMenu.linkTextStr);");
		delete menuitem.render;
		menuitem.render();
		menuitem.render = () => menuitem.hidden = hidden();
	}
})("context-copylink", "chrome://browser/content/browser.xhtml");

Сustom Buttons » Custom Buttons » 13-08-2023 14:42:08

Dobrov пишет

А можешь что-то конкретное решение предложить ?

Нет, не могу.
Я просто не понимаю конечный смысл.


А перевести на JS то, что процитировано, могу попробовать
Вот, например, изменил метод filter()

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

Выделить код

Код:

/*
	filter(sel) { return this.closest(sel);
	},
*/
	filter(sel) {
		var node = this;
		do {
			if (node.id == sel || node.className == sel)
				return true;
		}
		while(node = node.parentNode /*node.flattenedTreeParentNode*/);
	},


И, из некоторых имён свойств объекта Mouse убрал решётку,
а где селектор класса заменил на дословный className.
И вроде работает.

Сustom Buttons » Custom Buttons » 13-08-2023 11:38:13

Dobrov пишет

Надо решётку убрать из всех ключей, а не дописывать!

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

когда выполняется функция find(sel) ?

this.selectors — это массив всех прописанных селекторов.
Через его метод filter() из него создаётся новый массив sels,
в котором остаются только те селекторы, под которые подпадает
сам trg или какой-либо из его родительских элементов.


Если таких селекторов в массиве sels получится больше одного,
тогда и выполняется функция find(sel)

Подскажи, как вызвать find(sel)

Как-то так: this.find.call(myThis, myArg);

только на пустой области #tabbrowser-tabs

Ну правильно,
trg.closest((trg.id && "#" || trg.className && "." || "") + sel)
это именно точное соответствие trg и псевдо-селектора sel,
а не поиск от trg вверх.


Не говоря уже о том, что просто при

Сustom Buttons » Custom Buttons » 12-08-2023 21:17:35

Dobrov пишет

чтобы не писать кучу повторных строк с # решёткой, а юзать переменные: [variable]: свойство

Ну, если это прям так принципиально, то решётку можно и дописать,
типа завести функцию, которая будет возвращать
trg.id && "#" + trg.id || trg.className && "." + [...trg.classList].join(".") || trg.tagName


и вызывать её внутри блока if (e.type == "mouseenter") {…}
Кстати, заканчиваться код блока должен инструкцией return;
ведь исполнять дальнейший код по "mouseenter" не нужно.

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 08-08-2023 11:58:33

fuchsfan
Скрипт не отвечает за то, где и как видны «промежутки».
Только за их наличие там, откуда их можно на тулбар вытаскивать.


Чтобы «промежутки» было видно на этом вертикальном аддонбаре,
это надо куда-нибудь в стили пристроить что-то типа


toolbar#addonbar_v > toolbarspacer {
    width: auto !important;
    height: 15px !important;
}

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 07-08-2023 19:56:28

fuchsfan пишет

@Dumby
Большая просьба исправить скрипт разделителей special_widgets.js, чтобы загружался вне ucf старым методом от Aris-t2 или Endor8.

Что значит «исправить»?
Исправить можно баг или поломку,
а «чтобы загружался …» — это не называется «исправить».


Вобщем, меняем первую и последнюю (не пустую) строку на такие
(async url => location != url || await delayedStartupPromise || ({
}).init("customizationready"))("chrome://browser/content/browser.xhtml");


И, вместо методов init() и destructor() один только init(), такой:

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

Выделить код

Код:

//
    init(type) {
        window.addEventListener(type, this);
        window.addEventListener("unload",
            () => window.removeEventListener(type, this)
        , {once: true});
    },


И про special_widget.css не забываем.

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 05-08-2023 19:23:53

OmTatSat пишет

Правда пришлось перейти на новый загрузчик
работал CustomButtons
из-за отвалившегося
был удобные менеджер

Не понял. Что значит «пришлось» ?


UCF либо развёрнут, либо нет.
Если развёрнут, значит и загрузчик есть, на него не надо «переходить».
Ты либо используешь его, либо нет.


Остальное, иные uc-экосистемы, или CB, могут и должны
работать независимо и параллельно, и, если есть положительный опыт взаимодействия с ними,
то, без особой необходимости, и уверености в том, что «я могу перейти», ничего с ними делать не следует.


Dobrov пишет

extensions.user_chrome_files.debug

Другое дело.

Board footer

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