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

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » Сегодня 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 - ваши кнопки, темы, дополнения, скрипты… » Сегодня 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

Сustom Buttons » Custom Buttons » 30-03-2024 15:38:57

VORON пишет

Есть ли возможность

Весьма призрачная. Файло выпилили в Firefox 77.
Может что-то такое сойдёт


try {var args = {filterString: gBrowser.currentURI.host};} catch {}
LoginHelper.openPasswordManager(window, args);

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 29-03-2024 22:30:06

Dobrov пишет

Сохраняет только в папку Загрузки по-умолчанию, хотя в настройках выбран другой путь

Попробовал (на 124) воспроизвести — не получилось.

который запоминается в data["browser.download.dir"].set

В data["browser.download.dir"].set ничего не запоминается.
Это геттер, который каждый раз вычисляет путь заново.

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 29-03-2024 10:37:38

Dobrov


IOUtils.writeUTF8(…).catch(log);
или
try {await IOUtils.writeUTF8(…);} catch(ex) {log(ex);}

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 27-03-2024 12:26:45

_zt пишет

А оно только активацию дает, открывает так же - в конце других дочерних.

Это слегка сомнительно.
Возможно, речь идёт об инспирации перемещения вкладки аддоном Tree Style Tab.


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


Тогда модифицировал код так, чтобы он на какое-то время менял настройку TST
«Если вкладка открывается из существующей вкладки, открыть ее как -»
на «First Child of the parent tab».


И перепрыгивание вкладки с картинкой прекратилось.
Будет ли это полезно — не ясно, расклад ведь неизвестен.
[spoiler][code](async extra => ChromeUtils.defineLazyGetter(
    document.getElementById("context-viewimage"), "gContextMenu", () => {
        var func = win => {
            var cfg = win.configs, key = "autoAttachOnOpenedWithOwner";
            var was = cfg[key];
            cfg[key] = 6; // kNEWTAB_OPEN_AS_CHILD_TOP
            win.setTimeout(() => cfg[key] = was, 500);
        }
        var url = `data:,(${encodeURICom

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 26-03-2024 23:00:14

_zt пишет

как изменить скрипт из расширения

Из какого ещё «расширения»?
Видно же, что скрипт насквозь гуглячий.
Как-то так, наверно

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

Выделить код

Код:

var q = {active: true};
browser.contextMenus.create({
	title: "Открыть изображение",
	contexts: ["image"],
	onclick: async data => browser.tabs.create({
		url: data.srcUrl,
		index: (await browser.tabs.query(q))[0].index + 1
	})
});

как заставить родной пункт контекстного меню [firefox], #context-viewimage, открывать изображения в новой активной вкладке и рядом с родителем?

Может так подойдёт
[spoiler][code](async extra => ChromeUtils.defineLazyGetter(
    document.getElementById("context-viewimage"), "gContextMenu", () => {
        var vm = eval(
            `(function ${nsContextMenu.prototype.viewMedia})`
                .replace('"tab";', extra)
                .replace(/referrerInfo,/g, "$& forceForeground,")
        );
        return {viewMedia: e => vm.call(gContextMenu, e)};
    }
))("$&  var forceForeground = true; gBrowser.clearRelatedTabs();");[/

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 23-03-2024 15:12:16

Dobrov пишет

появляющаяся дополнительная панель перекрывает и верхнюю часть страницы.

Не только страницы, а вообще.
Сайдбар. Какой-нибудь devtools, если «Закрепить справа» (или слева).
А если поставить галку [✔] Размещение под панелью навигации,
то перекрывает Панель закладок (if any).
Это, надо полагать, так и задумано.


Добавлено: упс, уже 57-я страница.


egorsemenov06 пишет

как в нее добавить иконку

Если не стилем, то, где-то перед menuitem.render();

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

Выделить код

Код:

//
		menuitem.className = "menuitem-iconic";
		menuitem.image = "chrome://browser/content/robot.ico";

Board footer

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