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

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

Скрипты » UCF - ваши кнопки, скрипты… » 25-01-2025 15:28:33

unter_officer пишет

эту

Может extensions.user_chrome_files.custom_scripts_background
плюс такая правка, не уверен.
[spoiler][code]/*
    ChromeUtils.importESModule("resource:///modules/CustomizableUI.sys.mjs").CustomizableUI.createWidget({
        label: "Reload user{Chrome, Content}.css",
        tooltiptext: "L: Reload userChrome.css\nR: Reload userContent.css",

        id: "ucf-userContentReloader",
        localized: false,
        onCreated(btn) {
            btn._handleClick = this.click;
            btn.oncontextmenu = oncontextmenu;
            btn.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAIpwAACKcBMsYCAwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMwSURBVEiJ5dbNb5RVFMfxz3mmrYgYE0IN4IaKb4n4UqOwMCYu2JCoQVDiwoUrQ4j0xao7ExITQxRoodEFK1cmRkSE8AeYYKpEFF0YY4SiUSMRQW0sLe0818U8nekwHe3U7vhtnnNOzj3f89znPvderjVFK8npaSWrPSjpElahQzhvyrF4y++t1GqbF7DHOvQLj6Ozrt2EDutYRHAasMK0vXgWWZO0SX/7DlJf6Skp3UWcFeVRV4zG235tCZx6rDPtKLqqAN4XPhROm3DJEiG3LA6aKkZ14jUSKaOd1G

Скрипты » UCF - ваши кнопки, скрипты… » 24-01-2025 21:31:12

unter_officer пишет

к Thunderbird

Что-то не слишком подробно.


Я совсем не комплиментарен TB,
но, ладно, поставил 135.0b2 и подключил распоследний UCF.


В CustomStylesScripts.mjs, в UcfStylesScripts.scriptschrome.load
прописал имя файла кода, добавляющего кнопку на #tabs-toolbar
с таким, примерно, содержимым
[spoiler][code](async () => {
    var btn = document.createXULElement("toolbarbutton");

    var ai = "Attributes Inspector";

    //btn.setAttribute("label", ai);
    btn.setAttribute("tooltiptext", ai);
    btn.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgP//QID//0CA//9AgP//QID//0CA//9AgP//QID//0CA//9AgP//QID//0CA//9AgP//QID//0CA//9AgP//QID//wDM//8AzP//AMz//wDM//8AzP//AMz//wDM//8AzP//AMz//wDM//8AzP//AMz//wDM//8AzP//QID//0CA//8AzP////////////8AzP//AMz//wDM/////////////wDM////////////////////////AMz//0CA//9AgP//AMz/////////////AMz//wDM//8AzP////////////8AzP///////////////////////wDM//9AgP//QID//wDM/

Скрипты » UCF - ваши кнопки, скрипты… » 17-01-2025 22:16:25

О, значит будет в конце body


Ещё, у меня вторая серия этой истории с верхним тулбаром.


Bug 1935035 - Infobar has incorrect styling when new sidebar panel is enabled (Firefox 136+)


То есть, решили использовать для notifications специальный тулбар,
а раз верхний UCF-тулбар добавляется после последнего тулбара
(который теперь для нотификаций), то ситуация повторяется,
инфобар появляется над дополнительным и разрезает монолит подряд идущих.


Можно посмотреть, запустив с консоли, например
gNotificationBox.appendNotification("", {label: "Test"}, [{label: "Close", callback: () => false}]);


Надо на что-то заменить селектор «:scope > toolbar:last-of-type»
То ли на «#PersonalToolbar»
то ли на «:scope > :nth-last-child(1 of toolbar:not(#notifications-toolbar))»
то ли ещё на что-то.

Скрипты » UCF - ваши кнопки, скрипты… » 17-01-2025 21:36:23

Немного подробностей.

Этот баг был «Approved for 135.0b5.»
А в баге выбросили #fullscreen-and-pointerlock-wrapper


Если не возвращаться к a11y-announcement и before() то лучше в строке
document.querySelector("#fullscreen-and-pointerlock-wrapper")?.after(bottombox);
дописать в селектор «,#pointerlock-warning» чтобы осталась совместимость.


А вообще, строки поиска и добавления bottombox'а
лучше поднять наверх блока try {} и не использовать оператор «?.»
Потому что если bottombox'а не будет на DOM-дереве, то остальной код блока бесполезен.

Поддержка пользователей » добавление пунктов в главное контекстное меню » 06-01-2025 21:08:48

могу ли по такому же простому принципу сделать и для home?

Не совсем. Код не создаёт пункты меню,
но всего лишь оперирует уже существующими,
а пункта меню, который вызывал бы домашнюю страницу,
я нигде в браузере не нашёл.


Можно изменить, чтобы создавал.
Заменить цикл for(var id in data) {…} на такой

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

Выделить код

Код:

//
	for(var id in data) {
		var obj = data[id], elm = n(id);
		(obj.ctrl ? ctrlIds : ids).push("#" + id);

		if (elm) {
			remAttrs(elm);
			var br, obs = elm.getAttribute("observes");
			if (obs) br = n(obs), br && remAttrs(br);
		}
		else
			(elm = document.createElement("menuitem")).id = id;

		if ("lab" in obj)
			br && br.removeAttribute("label"),
			elm.setAttribute("label", obj.lab);

		obj.oncommand && elm.setAttribute("oncommand", obj.oncommand);

		df.appendChild(elm);
	}


Тогда можно написать что-то типа
"created-home": { lab: "home", oncommand: "BrowserHome();" },

откуда вообще выяснять все эти menu_showAllHistory?, и тому

Поддержка пользователей » добавление пунктов в главное контекстное меню » 05-01-2025 15:24:46

austri пишет

нужно, чтобы было как при нажатии на вчера упомянутoe ctrl+d

Почему тогда 'loadURI("about:blank");' а не "BrowserHome();"

как добавить в главное контекстное меню пункт "history"?

Может menu_showAllHistory: { lab: "history" },

Сustom Buttons » Custom Buttons » 23-12-2024 21:46:17

Garalf пишет

В 134.b9  перестало работать расширение add toolbar buttons.2024.10.14.21.
Посмотри пожалуйста.

Развернул бету 134.0b10, поставил ATB 2024.10.14.21
Не вижу, чтобы расширение перестало работать.
Кнопки создаются, страница настроек на месте.


Может слетела настройка extensions.experiments.enabled
Или может отвалилась какая-то конкретная кнопка,
тогда говори какая именно, я же не буду проверять их все.


green25 пишет

Как избавиться от пункта User Agent

В строке 115 удалить открывающую фигурную скобку {
И удалить строки со 116-ой по 167-ю (включительно).

Обсуждение расширений » NoScript » 23-12-2024 21:23:24

negodnik пишет

Т.е., нет смысла дать автору NS ссылку на этот код.

Да, полагаю, что никакого смысла.

Даже если представить, что можно сделать только на одной рефокусировке,
(а у меня сходу в скипте не получается, всё равно иногда мелькает),
то, из WE, это же пойдёт запрос из дугого процесса,
что, наверно, будет недостаточно быстро.


А, как в скрипте, задвинуть окно за пределы экрана они не дадут.
В chrome://browser/content/parent/ext-windows.js
есть функция sanitizePositionParams()
и комментарий в ней
// boundary check: don't put window out of visible area

Сustom Buttons » Custom Buttons » 23-12-2024 16:04:29

Dobrov
Можно использовать nsILoginManager, чтобы получить массив nsILoginInfo.
Они квериинтерфейснуты nsILoginMetaInfo, что добавляет в том числе и даты.


То есть, либо await Services.logins.searchLoginsAsync({…});
либо получаешь все: await Services.logins.getAllLogins(); и ищешь сам.

Обсуждение расширений » NoScript » 23-12-2024 16:02:19

negodnik пишет

В 12.0.902

Что-то я не вижу каких-то изменений в коде,
по сравнению с 12.0.901, которые могли бы затрагивать
обсуждаемую проблему.


Изменился только объект tlds в .../nscl/common/tld.js
и в .../bg/LifeCycle.js в 268-ой строке изменился error()
«Can't run content script on tab»,
то есть всё это вообще не должно иметь отношения.

Как бы передать NoScript’у чтобы не горячился, не показывал процесс ресайза, я могу подождать

А толку-то? Это же WebExtensions,
у них нет возможности как-то на это повлиять.


Вот в фильме есть кадр, где видно, что html
уже прогрузился и отобразился, но скрипт ещё
не создал результирующий DOM.
Поэтому, здесь, хотя бы чисто гипотетически,
можно представить возможность какой-нибудь оптимизации,
чтобы это делалось побыстрее. А для всего остального — скорее нет.


Вот, попробовал uc-like скриптом
это дело прихорошить, и вроде, чуть получше.
Но, там используется счётчик, а это как-то ненадёжно.
Вобщем, не знаю как ещё, такая шля

Обсуждение расширений » NoScript » 21-12-2024 12:00:09

negodnik пишет

без контента (быстро исчезает)
сверху нормальное

Хмм, убедительно. Но, в то же время, не совсем.
Дело в том, что NoScript заказывает ресайз этого окна,
типа подгонка под получившийся размер контента.


Поэтому, может сложиться впечатление,
что это уже другое окно (ресайз как исчезновение).


Вот если бы поймать на панели задач виндовс,
что окошек именно два, тогда было бы бесспорно.


Но, это если они существуют
в какой-то момент времени одновременно,
иначе, это вообще труднодоказуемо.

Обсуждение расширений » NoScript » 19-12-2024 22:50:59

negodnik пишет

Молчали Бяка и Бука

А что, тебя бы порадовало какое-нибудь
бессодержательное высказывание от непричастных типа меня?

помимо окна выбора действий для webgl на долю секунды мелькает пустое окно

Развернул синтетическую страницу WebGL Demo с MDN.
Поставил NoScript 12.0.901, жму на ней NoScript'скую заглушку, и ...
никакого второго дополнительного мелькающего пустого окна не вижу.


Может быть, имеется в виду, что (так называемое)
«окно выбора действий для webgl» сначала пустое?


Так ничего удивительного, ты же понимаешь,
что это целое окно браузера с одной вкладкой
с адресом moz-extension://...../ui/prompt.html
Просто весь хром этого окна скрыт.


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

Сustom Buttons » Custom Buttons » 18-12-2024 20:03:00

Duche пишет

исправить маленькие кнопки для 115.0.3

В первой, раз там используется 'current',
можно заменить openUILinkIn на openLinkIn


Во второй я никакого отвала не вижу.

Сustom Buttons » Custom Buttons » 17-12-2024 23:33:10

Duche
Что-то особо проверять не хочется, но попробуй так
[spoiler][code](defImg => {
    var bookmark = async node => {
        var title = gBrowser.selectedTab.label.slice(0, 50);
        var parentGuid = PlacesUtils.getConcreteItemGuid(node);
        await PlacesTransactions.NewBookmark({
            parentGuid, index: 0, title, url: gBrowser.currentURI.spec
        }).transact();

        notify(title, `Добавил в папку ${
            PlacesUtils.bookmarks.getLocalizedTitle({guid: parentGuid, title: node.title})
        }:`);
    }
    var notify = (...args) => {
        var name = "alert-bkmrk-added";
        var as = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
        var close = as.closeAlert.bind(null, name);

        (notify = (title, msg) => {
            as.showAlertNotification(
                gBrowser.selectedTab.image || defImg, msg, title, false, null, null, name
            );
            setTimeout(close, 2e3);
        })(...args);
    }
    var isFolder = PlacesUtils.nodeIsFolder || PlacesUtils.nodeIsFolderOrShortcut;
    addEventListener("dblclick", e => {
        var node = e.tar

Скрипты » userChrome.js » 17-12-2024 20:04:41

dinn пишет

для одной кнопки атрибут title связан с подсказкой, а tooltiptext не пашет
для другой кнопки атрибут tooltiptext связан с подсказкой

Процитирую часть кода из TooltipTextProvider.sys.mjs

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

Выделить код

Код:

.....
      if (tipElement.namespaceURI == XUL_NS) {
        lookingForSVGTitle = false;
        titleText = tipElement.getAttribute("tooltiptext");
      } else if (!defView.SVGElement.isInstance(tipElement)) {
        lookingForSVGTitle = false;
        titleText = tipElement.getAttribute("title");
      }


То есть, если это XUL элемент, то берётся атрибут "tooltiptext".
Иначе, если это не SVG элемент, то берётся атрибут "title".


Вот, демо-код для запуска с консоли.
Окошко с двумя кнопками.
У обоих кнопок присутствуют оба атрибута.
Какой будет показан в тултипе?
[spoiler][code](async (TITLE, TOOLTIP_TEXT) => {

    var win = openDialog("about:blank", "", "chrome,centerscreen,width=340,height=220");
    Services.scriptloader.loadSubScr

Скрипты » userChrome.js » 16-12-2024 21:26:42

dinn пишет

да и без файла подхватывает, а отображение в aHTMLTooltip не особо нужно

Это было просто информационное сообщение.
Оно может быть понятным, или не понятным,
интересным, или не интересным ...


Но, оно не для того, чтобы комментировать поперёк.
Разве что только если я не прав. Хорошо, давай проверим.

и без файла подхватывает

Испортим то, что делает файл. Запускаем с консоли браузера:


ChromeUtils.importESModule("resource://gre/modules/TooltipTextProvider.sys.mjs")
    .TooltipTextProvider.prototype.getNodeText = (elm, out) => out.value = "???";


Затем, наводим указатель мыши на кнопку.
Что видно в тултипе?

отображение в aHTMLTooltip не особо нужно

Ладно, тогда долой. Запускаем aHTMLTooltip.remove();
Снова наводим. Как теперь видно?

версию сабжа отображать вместо дефолтного placeholder
можно стилями изменить название

Ну, не прямо «изменить».
Это некая CSS-мимикрия под это дело.
Довольно симпатичная, пока для псевдо

Скрипты » UCF - ваши кнопки, скрипты… » 10-12-2024 01:30:48

ez7pac пишет

отрабатывает вот так

Да не сочиняй :)
После замены false на true
отрабатывает вот так
[spoiler][code]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUEAAADdCAIAAACqv1fqAAAaUElEQVR42u2dCXQUx52Haw7N6ECAA8YxEGA4bIFv5KwdEMFgDGRBYEjyEksoCwb7GXsXEXljwiZxJj5ik4NFZLPOxsJ4LYTjfW+NMTgP7BjxHMDJcgQMMTJI6EYGYUACSUjMsd3TPd3V3dUzI80wrRK/7/F4rZ7q6qqa+rqOkeZvCwaDJEwgEPD7/V1dXR0dHe+9994jj+QTAEAv4M03y+bMmZOWluZyuRwOh91uV16ywWEAej9wGAC+gcMA8A0cBoBv4DAAfAOHAeAbOAwA38BhAPgGDgPAN3AYAL6BwwDwDRwGgG/gMAB8kySHf7WuuFvp/3VlodUtAwAf9CKHp0ye9Oe9+6T/Izm8a/Xwgs2ho7zSxpemGRNUb5ifsz13z5ZlnvjaRrpR9rN73l06ij5OQLNHI0oVylcNW1wW/iHbu3vrjF2xVrnbFdHcK7+0ds1041vASsO4L1Her/JVIws2hQv/mEctGH0GxEbyHF5SkBdj4o2lm00dFjt35UqpK1RvKKleumx6hJyEvrV+XA9lFvslkbsjfZxkmFXocb16UBHDvRhvAZVG66p0Qcm8B7zj8/I3kdn6N0650HiQ/KbmFQscHjx4cOTEv/z39aYOC11k3djujCHxOKxca2HHSrjD3b3QcAnjLYilrYTz78/Wz5sEvYtI8ZZlZMP8QlIcylMYonfMsuRxySvWOOz6SZXyUtfzYzZu3Kj8uGTJkkgOh0aSCt10SxwZnjsoHilTO6EbrTiZE57gLXq9Yc00QzLCykGaCqqTw2zvy1neH4aPhfvWiJl7s7xe7cS

Скрипты » UCF - ваши кнопки, скрипты… » 09-12-2024 23:56:05

ez7pac пишет

Надо отредактировать, чтобы было не вложенное меню

Эээ... Разве двадцать седьмая строка
const FlatMenu = false;
не специально для этого?

Скрипты » userChrome.js » 09-12-2024 20:52:00

dinn пишет

Придумал так
btn.setAttribute("title", "1\tFirst line\n2\tSecond line");
Не знаю, как по другому еще можно

Да чего там ещё от добра добра искать.
resource://gre/modules/TooltipTextProvider.sys.mjs
твой "title" подхватит, и в #aHTMLTooltip'е будет показан.

Можно ли как-то посмотреть прослушки на #main-window? В инспекторе есть кнопка event

Кнопка, это конечно хорошо, но,
раз такое дело, то почему бы не попрактиковать аскетику.


Запускаешь
Services.els.getListenerInfoFor(document.documentElement);
и смотришь.


Но, что-то там ничего особо интересного не видно.
Мне отдаёт массив всего из пяти экземпляров nsIEventListenerInfo
у каждого из которых, свойство listenerObject есть null


Впрочем, если задуматься, ничего удивительного, что так мало.
Кому бы понадобилось вешать листенер именно на html#main-window
Либо на что-то более конкретное дочернее,
либо, тогда уж, сразу на документ, окно, windowRoot окна
(вот там, числа уже вокруг сотни).

Скрипты » userChrome.js » 06-12-2024 16:28:15

dinn пишет

а как бы вы сделали?

Я? Ну, мне бы хотелось видеть нечто
чуть более информативное, то есть типа это альфа, бета, esr'ка...


Хотя, может быть таков и был твой замысел, обрезать именно
до трёх символов, чтобы занимало меньше места (отсюда же замысел не видно).


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


Мне не нравятся одинарные кавычки, предпочитаю двойные.
Впрочем, уместны, если нужен микс из обоих.


Название переменной elem, возможно, чтобы подчеркнуть,
что это не просто нода, а именно элемент.
Но я, скорее, склонен был бы её так и назвать — label


Вместо установки innerHTML предпочёл бы
использовать всё тот же append() и без промежуточной переменной,
покольку для этого нет никаких видимых причин.


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


Вобщем, то же самое — вид сбоку

Скрипты » UCF - ваши кнопки, скрипты… » 03-12-2024 22:50:13

Farby
Замудрый вопрос. Зависит от того, зачем нужно
«использовать в "DOMContentLoaded" gBrowser».


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


Хорошо, допустим не совсем для этого, но хочется.
Тогда можно чуть подождать, например, в асинхронной обёртке
с-await-ить какой-нибудь window.delayedStartupPromise
да, думаю, хватит даже и document.documentReadyForIdle


Если нет, ладно, допустим, подавай gBrowser сразу.
Тогда можно попробовать сделать скрипт, который будет
пинать добавление gBrowser'а принудительно.


Скрипт, разумеется, должен будет исполняться в окне
раньше другх скриптов, которые используют gBrowser


Раз только «window.gBrowser = window._gBrowser», то,
надо полагать, gBrowser не инициализированый.
Тогда, судя по багу, такой вариант
[spoiler][code]gBrowser = new Tabbrowser();
for(let [prop, id] of Object.entries({

Скрипты » UCF - ваши кнопки, скрипты… » 01-12-2024 15:33:07

unter_officer пишет

Ладно, пока буду сидеть на предыдущей версии UCF.

Полагаю, лучше пока попробовать сделать заплатку
для нынешней версии UCF отдельным скриптом.

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

Выделить код

Код:

(csw => {
	window[csw.replace("ts", window[csw] == this ? "t" : "t_all")] = this;
	this.unloadlisteners = {push: key => this.setUnloadMap(key, {
		apply: () => this[key].destructor()
	})};
})("ucf_custom_scripts_win");


Подключать в CustomStylesScripts.mjs в scriptschrome в domload
И, чтобы было ucfobj: true
Ну, и чтобы расположен был сверху (первым),
в смысле до подключения остальных скриптов.
Как-то так:
[spoiler][code]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhgAAAA0CAIAAABHF9YjAAARXElEQVR42u1dv24aTRAfv4OxX8B8EgS/AMix5M6ksSyLlo5DSmEad0hRJDoaKCyBO1pkITeBzpJjkReIA5K5F4jNO/Dtv7vbO3aPW/7Z58yviMxlb3d2b29+Ozt7Mzuz2QwQCAQCgVgWO0gkCAQCgVgFSCQIBAKBWAlIJAgEAoFYCUgk/zrsx1wROsOjg4jXEQgEIoA4EcnA2qmlJ8PLLak2u5lLVn6V+rP26Vv3PKrEj7nk/a9SYdZORb5nYH2/u/rWPoh63Ydma6fy13/psD87X894DXo7+d/Zxtfh5e4Wxu

CSS-стили » Настройка внешнего вида Firefox в userChrome.css » 27-11-2024 19:47:39

egorsemenov06 пишет

помогите пожалуйста

Очень умно́. Нашёл кого спросить...
Я, всё ещё, считаю CSS для себя непостижимым.


Хорошо, подключил твой предоставленный павлиний код.
Вкладки, действительно, уехали куда-то вверх.


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

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

Выделить код

Код:

#tabbrowser-tabs {
	min-height: 28px !important;
}
#TabsToolbar-customization-target {
	height: 28px !important;
}


Если это чем-то помогло — значит повезло.
Если нет — значит самоотвод.

Скрипты » UCF - ваши кнопки, скрипты… » 27-11-2024 00:58:43

Northtech

Dumby пишет

Подождём коммита

Попытка запилить временный фикс-код для custom_script_win.js
Только не забудь удалить код, когда коммит нарисуется.
Если не работает, то удалить сразу.

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

Выделить код

Код:

(async url => {
	var bars = document.querySelectorAll(
		"#ucf-additional-vertical-bar, #ucf-additional-bottom-bar"
	);
	if (!bars.length) return;

	var src = Cu.readUTF8URI(Services.io.newURI(url));
	for(var info of Services.els.getListenerInfoFor(gNavToolbox)) {
		var listener = info.listenerObject;
		if (typeof listener == "function" && src.includes(String(listener)))
			for(var bar of bars) bar.addEventListener(info.type, listener, info.capturing);
	}
})("chrome://browser/content/navigator-toolbox.js");

Скрипты » UCF - ваши кнопки, скрипты… » 26-11-2024 16:19:08

Northtech пишет

Кнопка Firefox View перестала работать на вертикальной панели

Вот, кстати, да. И не только она.


Я пользуюсь только верхним тулбаром,
поэтому как-то упустил этот момент.


Короче, видимо, эта песня (баг)
chrome://browser/content/navigator-toolbox.js


Вобщем, надо как-то пробросить это добро
для вертикального и нижнего.
Подождём коммита пару недель, затем,
если вдруг нет, — можно перезадать вопрос.

Board footer

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