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

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

Скрипты » UCF - ваши кнопки, скрипты… » 12-05-2024 15:22:35

egorsemenov06 пишет

В консоли пишет вот такую ошибку Uncaught Error: not well-formed XML

Странно, у меня ничего подобного не пишет, XML'ка подхватывается.


Заресурсить SVG'шки попробовал так:


Код Save.js — оставил без изменений, таким, как ты выложил.


А в коде создания виджета — убрал get image() {…},
и заменил get initCode() {…}, на такой
[spoiler][code]//
    get initCode() {
        var count = 0;
        var prfx = "ucf-cbbtn-save-resurl-";
        var rph = Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler);
        var ss = url => {
            var subst = prfx + ++count;
            rph.setSubstitution(subst, Services.io.newURI(url));
            return "resource://" + subst;
        }
        this.image = ss("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path style='fill:none;stroke:context-fill  rgb(142, 142, 152);stroke-opacity:context-fill-opacity;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round;' d='M3 .6C1.6.6.

Скрипты » UCF - ваши кнопки, скрипты… » 04-05-2024 08:36:14

Bug 1892965 - Rename Sidebar launcher and SidebarUI


Vitaliy V.
Затрагивает две сайдбарские кнопки в составе UCF.



Кстати, ещё, из-за этого бага,
если у тулбара отсутствует атрибут "key", то
в Главное меню —> Вид —> Панели инструментов
(аналогично и в customize-режиме «Настройка панели инструментов…»)


onViewToolbarsPopupShowing()
проставляет на тулбарский менюитем атрибут "key" как "null".


В результате, в консоли появляется запись типа
«Key null of menuitem Панель меню could not be found».


Так вот, это относится и к тулбарам UCF.
Может задать им пустой атрибут "key" (ну, как для "accesskey").
Или подождать, вдруг сами исправят.

Скрипты » userChrome.js » 01-05-2024 12:09:40

6e73epo

Dumby пишет

Но он давно уже этого не делает.

Похоже, здесь я совравши.
Подорвался проверить, в 125.0.1 запускаю с консоли


console.log(window.ProcessType);
Cu.import("resource://gre/modules/ProcessType.jsm");
console.log(window.ProcessType);


Первый лог — undefined
Второй лог — уже Object {...}


Тогда вернул Cu.import("resource:///modules/AboutNewTab.jsm");
Рестарт, и по Ctrl+T открывается about:blank


Я был уверен, что фичу выпилили, блин, всё надо проверять.
Осталось только непонятно, почему у тебя перестало работать.

Скрипты » userChrome.js » 01-05-2024 11:15:11

6e73epo пишет

вместо ChromeUtils указывал Cu

Cu.import("….jsm") и сейчас работает,
надо было только забрать AboutNewTab с того, что он возвращает.


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


Однако, ChromeUtils.importESModule() — это мейнстрим,
а Cu.import() подлежит удалению, надо полагать в 129.

зачем-то  полез искать решение в Cu.getGlobalForObject(Cu)

ChromeUtils был добавлен в конфигский сандбокс с Firefox 101+
А если бы не был добавлен, то правильно полез,
туда за ним слазить прямо напрашивается.

Скрипты » userChrome.js » 01-05-2024 07:24:31

6e73epo
Эээ...


Cu.import("resource:///modules/AboutNewTab.jsm");
let {AboutNewTab} = ChromeUtils.importESModule("resource:///modules/AboutNewTab.sys.mjs");

Скрипты » UCF - ваши кнопки, скрипты… » 27-04-2024 21:55:16

egorsemenov06 пишет

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

Не получилось воспроизвести.
Никакого глобуса, либо favicon страницы, либо зелёная звёздочка.

может там в коде уже что то надо изменить

В смысле какого-то отвала — нет, не вижу ничего такого.
А в смысле косячков — конечно же есть, куда без них.
Например, вместо this.write определённо должно быть this.save

Скрипты » UCF - ваши кнопки, скрипты… » 27-04-2024 10:51:58

egorsemenov06
Так всё то же самое
[spoiler][code]/*
    onCreated(btn) {
        btn.setAttribute("image", "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path style='fill:none;stroke:context-fill rgb(39, 174, 129);stroke-opacity:context-fill-opacity;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round;' d='M12.9 15.3H3.2c-.88 0-1.6-.6-1.6-1.4v-2.7c0-.4.33-.6.74-.6h1.72c.7 0 1.25-.64 1.25-1.2 0-.64-.55-1.15-1.25-1.15H2.34c-.41 0-.74-.32-.74-.68V5.84c0-.81.72-1.48 1.6-1.48h2.36V3.13c0-1.21.93-2.297 2.21-2.419C9.23.57 10.5 1.62 10.5 2.98v1.38h2.4c.9 0 1.5.67 1.5 1.48v8.06c0 .8-.6 1.4-1.5 1.4z'/></svg>");
*/
    get icon() {
        var icon = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path style='fill:none;stroke:context-fill rgb(39, 174, 129);stroke-opacity:context-fill-opacity;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round;' d='M12.9

Скрипты » UCF - ваши кнопки, скрипты… » 27-04-2024 08:05:46

egorsemenov06
[spoiler][code]/*
        btn.image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAk1BMVEX///8/Pz8BAQF8fHwJCQkCAgIJCQl8fHx9fX0AAABJSUkBAQENDQ0wMDBVVVUAAABra2t0dHR7e3thYWEBAQEAAAAAAAABAQEAAAAgICABAQEBAQH8/Pzw8PDp6en39/fj4+Pe3t41V9I/YeWKioqDg4N9fX0jRa8wUrVoaGhkhuxWeNx1dXVCZMhvb28kRqsqTL4KidXxAAAAHHRSTlMAAABndwAAAAA0blVZcm1naWhNa6hrcJ8AAKRU4jk/3gAAAHVJREFUeF6FyMUCwjAUBdEbaQupUMOjqMv/fx1dQN6yZ3aDcWnyw6ezoRWNYc15kqKQZCFlgTKQQwgllL/dn5f3+bPb+6P3CpWNw56srdCZOMzDmA61i8O9nKvRaHLVukEryFKIFtnkj7ENYxmNdd5v+5xj1BcJ/w9Kj6K7ZAAAAABJRU5ErkJggg==";
*/
        btn.image = this.icon;
    },
    get icon() {
        var icon = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path style='fill:context-fill rgb(142, 142, 152);fill-opacity:context-fill-opacity;' d='M0 6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V6zm13 .25v.5c0 .138.112.25.25.25h.5a.25.25 0 0 0 .25-.25v-.5a.25.25 0 0 0-.25-.25h-.5a.2

Скрипты » UCF - ваши кнопки, скрипты… » 25-04-2024 20:55:36

_zt пишет

ожидается открытие последнего использованного меню

Что-то я не припомню, чтобы после confirm'а
вообще ожидалось открытие каких-либо меню.


Но, раз ожидается, возможно, так подойдёт

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

Выделить код

Код:

/*
			if (conf && !Services.prompt.confirm(null, this.label, "Перезапустить браузер?")) return;
*/
			if (conf) {
				node.ownerGlobal.event.preventDefault();
				if (!Services.prompt.confirm(null, this.label, "Перезапустить браузер?")) {
					var popup = node.closest("menupopup");
					return popup.openPopup(popup.parentNode);
				}
			}

Скрипты » UCF - ваши кнопки, скрипты… » 18-04-2024 20:46:53

_zt пишет

управления куками не вызывается, вообще [nightly] падает

Хмм, у меня, с этого окна — не падает.
127.0a1 (2024-04-17) (32-разрядный), но, правда, у меня и кук нет.


Однако, какой-то crash-жести, определённо, завезли целый вагон.
Поэтому, я пока пребываю в состоянии «да шло бы оно всё ...».

Еще fileToBase64 не открывает обзор файлов

[censored]


picker.init(win,
picker.init(win.browsingContext,

Скрипты » UCF - ваши кнопки, скрипты… » 18-04-2024 09:25:07

Dobrov пишет

тут вообще-то обсуждение скриптов

Это оно и было, разве нет?

он 2020 года

Откуда ты такое взял?
2024-02-19 15:29 PST

Скрипты » UCF - ваши кнопки, скрипты… » 17-04-2024 13:22:31

Bug 1541233 - Stop loading userContent.css or userChrome.css by default unless a preference is set

Status: RESOLVED FIXED
Milestone: mozilla69

Сustom Buttons » Custom Buttons » 17-04-2024 07:29:39

Andrey_Krropotkin пишет

подскажи где ошибка

Консоль подскажет.
Может content заменить на window

вставка спец. символов

raf, вроде, помогает, если ты об этом

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

Выделить код

Код:

/*
    addEventListener("popupshowing", function ps() {
*/
    addEventListener("popupshowing", async function ps() {


/*
        popup.append(df);
*/
        popup.append(df);
        await new Promise(requestAnimationFrame);

Скрипты » UCF - ваши кнопки, скрипты… » 16-04-2024 18:27:33

Vitaliy V. пишет

Т.е. в папке chrome две папки UserChromeFiles ?

Да-да, именно две.


Новоначальный (if any) — разворачивает обе две.
Обновляющийся — заменяет только вторую.

или можно вообще убрать

Не надо ничего нигде убирать.


Идея была услышана, рассмотрена, прикинута, и отвергнута.
Это совершенно нормально, на то оно и обсуждение.


Продолжаем так, как оно есть сейчас,
ещё не хватало чего-то поперёк здорового консерватизма.

Скрипты » UCF - ваши кнопки, скрипты… » 16-04-2024 10:20:38

egorsemenov06 пишет

вот убрал 1 иконку

Другое дело.


Но, fp.init(window, в трёх местах торчат,
хотя было сказано, что в 125, уже нужно
fp.init(window.browsingContext,


так что нет, не принимается.

Скрипты » UCF - ваши кнопки, скрипты… » 15-04-2024 22:10:00

egorsemenov06 пишет

кнопку форум не принимает https://disk.yandex.ru/d/4J6TCF-c1I8Wgg

Ну, и здесь 404, так что ...

Скрипты » UCF - ваши кнопки, скрипты… » 15-04-2024 18:58:41

Vitaliy V. пишет

Обновил, добавил UcfPrefs.customSandbox, в случае если отключены в настройках фоновые скрипты
вызов UcfPrefs.customSandbox создает песочницу но при этом скрипты если подключены в CustomStylesScripts.mjs не загружаются.

О, замечательно!
Я-то разогнался, словно сандбокс-скриптинг всегда enabled,
а это, конечно же, может быть и не так.

оставил там только то что нужно для редактирования

Кстати, был, когда-то, вообще ультимативный проект.
Обновлять UCF — это тот ещё головняк, поэтому,
идея была в том, чтобы вырезать весь интерналс в отдельную папку.


То есть, в папке user_chrome_files — только пользовательский стафф.
Включая там сугубый пользовательский user_chrome.manifest, для всяких override директив.
UCF'ские иконки, вроде, тоже рассматривались как пользовательские,
поскольку есть любители ещё старых, тёплых, ламповых svg'шек.


А рядом с этой пользовательской папкой user_chrome_files
другая — (условно) user_chrome_files_internal
Там — ве

Скрипты » UCF - ваши кнопки, скрипты… » 13-04-2024 18:38:05

Dobrov пишет

Затем файл надо перевести в btoa(……) и запомнить новое содержимое в опции.

То есть, содержимое файла как бинарную строку, а не как текст,
ведь btoa() его есть не будет, попробуй с консоли btoa("меню");


Тогда надо ещё делать метод конвертирования настройки в текст,
в смысле не для создания файла,
и метод перегона текста в бинарную строку для для создания файла,
если настройка не существует.

объект меню хранить в опции в виде base64

А зачем? Он от этого только больше станет.


Если имеется в виду, что он будет одной длинной строкой,
то проще заменять переводы строк на что-нибудь другое, и обратно.
Или JSON.stringify() <—> JSON.parse(), правда тогда ненужных слэшей насыпет.


В base64, возможно, лучше если только в gzip, но не всегда, и это заморочно.

Только непонятно, как отследить, что редактор сохранил и закрыл файл ???

Я не знаю что такое «закрыл файл».
Это типа он берёт его в оборот монопольно,
и других к нему даже не подпустит, п

Скрипты » UCF - ваши кнопки, скрипты… » 11-04-2024 21:35:26

Dobrov пишет

заготовка

[spoiler]Опять CustomizableUI.createWidget() в оконном коде торчит.
Без никаких проверок — в следующем окне будет ошибка.
И дело даже не столько в мусоре в консоли, а в том, что ошибка оборвёт
исполнение кода в обёртке, и последующее определение объекта G не состоится.


Да, я понимаю, ты одноокошечник. И я одноокошечник.
Но раз заявлено стремление в сторону «Пригодиться многим»,
то в таких вопросах неплохо, хотя бы, отдавать себе отчёт.


И даже если проверку делать, то виджет, рождённый в каком-то окне,
зависит от существования этого окна. Если его закрыть, то в другом окне
виджет может перестать работать. Прежде всего, всякий promise async await,
но не только, бывает, что и синхронный код перестаёт работать.


Поэтому, создавать виджет в окне, в общем случае, не рекомендуется.
Лучше, чтобы он рождался в чём-то стабильном, существующем всегда
(но, тогда уже без выкрутасов типа F.nul).


Здесь, проще всего, в SystemGlobal, но там CustomizableUI надо имп

Скрипты » UCF - ваши кнопки, скрипты… » 06-04-2024 13:34:56

Dobrov пишет

второй текст получается сразу слитно за первым, с тем же размером шрифта и без переноса…

Ну, переносу-то с чего не работать, должен работать.
А то, что с тем же размером шрифта — так ничего удивительного.
Ты в элемент header добавил вторую текстовую ноду,
откуда для неё другой размер шрифта возьмётся?


Это вот header ещё можно не создавать, а просто написать div.append(head);
Но txt должен быть элементом, чтобы на него другой стиль прицепить.

Скрипты » UCF - ваши кнопки, скрипты… » 06-04-2024 07:46:51

Dobrov пишет

Ошибка на строке: var header = div.appendChild(doc.createElement("div")).appendChild(new Text());

new win.Text()


Но, если панель создаётся каждый раз новая,
то иметь ссылки на текстовые ноды большого смысла нет.
То есть, можно создать header просто как div, и написать header.append(head);

Сustom Buttons » Custom Buttons » 03-04-2024 07:47:23

Dobrov пишет

перенос строки не пашет

white-space: pre-wrap; или типа того.

createElement("div")

Можно и div
[spoiler][code]var ask = (...args) => {
    var popup = document.createXULElement("panel");
    var popupset = document.getElementById("mainPopupSet");

    popup.setAttribute("onpopupshown", "move();");
    popup.setAttribute("onpopuphidden", "this.remove()");
   
    var div = popup.appendChild(document.createElement("div"));
    div.style.cssText = "font-size: 32px; margin: 1em 2em 1.3em 2em; font-weight: bold; max-width: 680px; white-space: pre-wrap;";

    var header = div.appendChild(document.createElement("div")).appendChild(new Text());

    var footer = div.appendChild(header.parentNode.cloneNode(true));
    footer.style.cssText = "font-size: 16px; font-style: italic; margin-top: 1em;";
    footer = footer.firstChild;

    var hide = () => {
        popup.hidePopup();
        popup.onclick = null;
    }
    var {style} = popup;
    popup.move = () => {
        var sc = window.screen;
        var pr = popup.getOute

Сustom Buttons » Custom Buttons » 02-04-2024 07:32:00

Dobrov пишет

Dumby придумай исчезающий диалог !
Идея такая: при опасных действиях (перезапуск браузера и т.п.) открываем диалог с текстом предупреждения или панель

Нашёл кого спросить. Ну, допустим, <panel>'ь
[spoiler][code]var ask = (...args) => {
    var popup = document.createXULElement("panel");
    var popupset = document.getElementById("mainPopupSet");

    popup.setAttribute("onpopupshown", "move();");
    popup.setAttribute("onpopuphidden", "this.remove()");
   
    var box = popup.appendChild(document.createXULElement("box"));
    box.style.cssText = "font-size: 32px; margin: 1em 2em 1.3em 2em; font-weight: bold; max-width: 680px;";
    var tn = box.appendChild(new Text());
    var hide = () => {
        popup.hidePopup();
        popup.onclick = null;
    }
    var {style} = popup;
    popup.move = () => {
        var sc = window.screen;
        var pr = popup.getOuterScreenRect();
        popup.moveTo((sc.width - pr.width) / 2, (sc.height - pr.height) / 2.7);
        style.opacity = "1";
    }

    (ask = (text, onclick, timeout = 2e3

Сustom Buttons » Custom Buttons » 31-03-2024 23:38:04

b0ttle пишет

Для чего код? Показать пароль под звездочками в контекстном меню? Вроде такая функция встроена в контекстном меню.

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


Но, кстати да, с пунктом контекстного меню,
получается, не гармонирует, переделал как в нём.

Сustom Buttons » Custom Buttons » 31-03-2024 20:58:39

Alex_one пишет

Можно Вас попросить

Попросить-то можно, ...
[spoiler][code](frag => {
    var g = Cu.getGlobalForObject(Cu);
    var ID = `CB${_id.slice(20)}:PasswordTypeToggler`;
    var u = code => "data:," + encodeURIComponent(code);
    if (!(ID in g)) {
        var processURL = u(`(id => globalThis[id] = ${frag})("${ID}");`);
        Services.ppmm.loadProcessScript(processURL, true);
        g[ID].processURL = processURL;
        Services.mm.loadFrameScript(g[ID].frameURL = u(`globalThis["${ID}"].init(this);`), true);
    }
    addDestructor(reason => {
        if (reason[5] != "e" || !(ID in g)) return;
        Services.mm.removeDelayedFrameScript(g[ID].frameURL);
        Services.mm.loadFrameScript(u(`globalThis["${ID}"].destroy(this);`), false);
        Services.ppmm.removeDelayedProcessScript(g[ID].processURL);
        Services.ppmm.loadProcessScript(u(`globalThis["${ID}"].forget();`), false);
    });
})(`\
{
    dblclick(e) {
        var trg = e.target, ed = trg.editor;
        if (ed instanceof Ci.nsIEditor && ed.flags & ed.eEditorPasswordMask)
            trg.rev

Board footer

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