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

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

Сustom Buttons » Custom Buttons » 14-05-2024 01:47:03

b0ttle упоминаемый скрипт удалён, т. к. функционал ucf_cooks-pass.js интегрирован в ucf_hookClicks.js, к тому же код стал проще.

Скрипты » UCF - ваши кнопки, скрипты… » 14-05-2024 01:34:57

Алексей У., egorsemenov06 и другие "любители" украшательств:
Здесь тема по скриптам, не мусорите в ней. Вопросы по иконкам и оформлению браузера пишут в теме по стилям.

Проблемы с сайтами » Проблема с Флибустой » 12-05-2024 08:17:26

zinka – через Антизапрет нормально работает.

Скрипты » UCF - ваши кнопки, скрипты… » 12-05-2024 03:07:46

Vitaliy V. пишет

Это то что сразу заметил, переменную length убрал выше и теперь здесь у тебя всегда submenu = false

Шеф, я усё исправил! – там arrOS.length надо было, т.к. имена текущей OS и массивов равны.
Поправил мой мод ucf_contextmenu_openwith.js в соответствии с новой версией, упростил и дополнил.
Скрыл OpenClipboardURI, чтоб было однозначное поведение при кликах, добавил подсказки. Правый клик аналогичен левому с Shift и передаёт ссылку из буфера обмена или выделенного текста. Добавил roll - выполнение другой команды. В строке "yt-dlp" клик колёсиком подставит другие опции.


Vitaliy V. - шапку обновил, добавив ссылку на твой скрипт ucf_contextmenuopenwith.js.
Мне сложно проверять, обновился пост или нет, гитхабом ил

Скрипты » UCF - ваши кнопки, скрипты… » 11-05-2024 16:24:33

ucf_hookClicks.js – оптимизация скрипта меню и кнопок, устранены ошибки, больше не мусорит переменными в окно.
Меню быстрых опций запомнит ваши значения, а не только вшитые: щёлкаем строку "User Agent", вводим нужный вам ЮзерАгент в general.useragent.override_my. Работает для любых опций, например в строке "Загрузки" можно изменить пути сохранения страниц/графики. Дополнено меню пользователя, пока ещё в режиме окна, т.к. завязано на многие функции скрипта ucf_hookClicks.
SaveHTML.mjs - исправлены ошибки, в демо-профиле у background-скриптов теперь префикс «ucb_»


[url=https://forum.mozilla-russia.org/viewtopic.php?

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

Vitaliy V. пишет

Добавил поддержку Гром-птицы, но без панелей и кнопок

Скрипты в Thunderbird всё же редко необходимы…
Вот бы UCF ещё в Palemoon добавить!, его свежие сборки ещё актуальны, т.к. Firefox слишком тормозной.

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

Vitaliy V. спасибо за новый ucf_contextmenu_openwith !
Вопрос - как получить stdout при выполнении команд (терминала) ?


Скрипт создаёт строку в контекст-меню даже при отсутствии yt-dlp, поэтому нужна ещё проверка.
Например, берём последнюю строку из stdout, если «0», значит всё ОК:
which yt-dlp; echo $?

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

Vitaliy V. – спасибо!


Вопрос: делаю общие функции в MJS-скрипте через scriptsbackground: [ // In background [System Principal]:
Почему напрямую не работает globalThis[Symbol.for('Dobrov')] = Dobrov; и можно ли сделать проще, без
ChromeUtils.domProcessChild.childID || ({
………
}).init("browser-delayed-startup-finished");

[code]
var {Services} = globalThis || ChromeUtils.import("resource://gre/modules/Services.jsm");
var win = wm.getMostRecentWindow("navigator:browser") || globalThis;
var name = "Dobrov", EXPORTED_SYMBOLS = [`${name}Child`];
// так не работает: globalThis[Symbol.for('Dobrov')] = Dobrov;

ChromeUtils.domProcessChild.childID || ({
    init(topic) {
        globalThis[Symbol.for('Dobrov')] = Dobrov; //общие функции
    }
}).init("browser-delayed-startup-finished");

var Dobrov = {
    toTab(url = 'about:serviceworkers', go){ //открыть вкладку | закрыть её | выбрать
        for(var tab of win.gBrowser.visibleTabs)
            if(tab.linkedBrowser.currentURI.spec == url)
                {go ? wi

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

Vitaliy V. раз тут завал просьб, добавлю свои 3 копейки:


Просьба улучшить ucf_contextmenuopenwith для нормальной работы с yt-dlp:
1) в режиме "Открыть страницу в …" если в Clipboard только одна строка и текст заканчивается на .m3u8, то передавать его вместо %OpenURI
2) есть выделенный текст ? передать его вместо %OpenURI. Чтобы работало на moz-extension://, где Video DownloadHelper открывает «Детали» со ссылками.
[spoiler=ucf_contextmenuopenwith.js – возможно, этот код устарел][code](this.contextmenuopenwith = {
    _eventlisteners: [],
    menupage: {},
    menulink: {},
    init(that) {
        var attrimage = true; // true или false Добавить иконки (атрибут "image") или нет
        var submenu = false; // true или false Добавить подменю для пунктов или нет
        var prelabpage = false; // Добавить вначале "Открыть страницу в ";
        var prelablink = false; // Добавить вначале "Открыть ссылку в ";
        // [true или false Показ

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

Vitaliy V. пишет

попробуй заменить на item.addEventListener("command", cmd);

Я так переделал, и всё работает: item.onclick = cmd
Менюшка в оконном скрипте потому, что там весь основной код – перехват кликов и прочие функции.

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

Помогите решить задачу:
Кнопка не видит функции, прописанные перед CustomizableUI.createWidget(… ?
на первой строке меню ошибка: Uncaught ReferenceError is not defined


Если убрать «var», то код работает, но мусорит переменными в окно браузера.
[spoiler=Как «пробросить» нужные функции, которых много ? (BrowserReloadEx и прочие)][code](async id => { // UserMenu

var BrowserReloadEx = (skip) =>{ // ошибка –> Uncaught ReferenceError is not defined
    if(parseInt(Services.appinfo.version) < 126)
        skip ? BrowserReloadSkipCache() : BrowserReload();
    else
        skip ? BrowserCommands.reloadSkipCache() : BrowserCommands.reload();
},
G = { v: "permissions.default.image",
    Pref(key,set){key = [key];
        var t = Services.prefs.getPrefType(key[0]), m = {b:"Bool",n:"Int",s:"String"};
        t = m[t == 128 ? "b" : t == 64 ? "n" : t == 32 ? "s" : ""];
        if (!t) t = m[set != undefined ? (typeof set)[0] : (typeof key[1])[0]];
        if (t) if (set != undefined)
            Services.prefs[`set${t}Pref`](key[0],set)
        el

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

brake пишет

Bug 1880914

этот баг закрыт и он 2020 года.
P.S. тут вообще-то обсуждение скриптов, кнопок… Нужно отдельную тему создать для багов и особенностей версий Firefox!

Скрипты » UCF - ваши кнопки, скрипты… » 17-04-2024 01:19:02

Vitaliy V. пишет

и каким образом оконный скрипт увидит globalThis background скрипта (если UcfPrefs.customSandbox не использовать)

globalThis[Symbol.for('UcfGlob')] = this.UcfGlob; - общие функции в scriptsbackground:
UcfGlob = Cu.getGlobalForObject(Cu)[Symbol.for("UcfGlob")]; // код оконного скрипта из scriptschrome:

Так Dumby подсказал: надо что-то в SystemGlobal добавить, чтобы с других мест вызывать.
Я пробовал делать общий объект в background скрипте через UcfPrefs.customSandbox, но не получилось:
оконный скрипт выдаёт undefined

Скрипты » UCF - ваши кнопки, скрипты… » 16-04-2024 02:36:39

Dumby пишет

Поэтому, создавать виджет в окне, в общем случае, не рекомендуется.
……проще всего, в SystemGlobal, но там CustomizableUI надо импортировать.
Хорошо бы, конечно, в сандбоксе UCF, но в окне нет туда прямых ссылок.

Vitaliy V.
В новой версии можно проще общие объекты подключать к UCF вместо браузера?
У меня пока так: в скрипте scriptsbackground: общий объект для вызова из scriptschrome: кода

globalThis[Symbol.for('UcfGlob')] = this.UcfGlob; //общие функции


И почему CustomStylesScripts.mjs расположен отдельно? Ведь после добавления скриптов его надо править (пока не будет GUI-менеджера подключенных скриптов/стилей) 
Вообще, в ReadMe не хватает описания функций UserChromeFiles, т.е. нет авторской рекламы! :)


И если убраны файлы стилей, то хотя бы сохранить их закомментированными в stylesall: [ // For all documents
        { path: "custom_styles_all_agent.css", type: "AGENT_SHEET"},

Скрипты » UCF - ваши кнопки, скрипты… » 12-04-2024 17:08:00

Dumby пишет

следует понимать, что если в настройку писать больше четырёх килобайт — получим Warning в консоль.

Dumby – спасибо за изменяемое пользователем меню, потестирую!


Наверное, код станет проще без диалога настройки, если объект меню хранить в опции в виде base64.
Для изменения меню создавать временный файл через atob(MyMenuSource) и править его в редакторе по-умолчанию.
Только непонятно, как отследить, что редактор сохранил и закрыл файл ??? Затем файл надо перевести в btoa(……) и запомнить новое содержимое в опции.
Т.е когда редактор по-умолчанию является многовкладочным типа SublimeText и при закрытии файла сам не закрывается…


Dumby пишет

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

java API браузеров сложна для меня, только чужие примеры переделываю. Не нашёл статей, где можно последовательно изучить API браузеров с нуля, от developer.mozilla.org толку мало.

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

b0ttle пишет

Ну и может совет, как лучше запускать для теста другие профили?

Профили могут требовать и разные версии браузеров.
[spoiler=Ява код не нужен, проще VBS ярлык запускать в Windows:][code]Set WshShell = CreateObject("WScript.Shell")

CurrPath = CreateObject("Scripting.FileSystemObject").GetFile(WScript.ScriptFullName).ParentFolder
ProfileDir = CurrPath & "\ProfileDobrov"
ProfileUser = "C:\UserTarget\MozillaFirefox\ProfileDobrovRAM"
ProfileCD = CurrPath & "\ProfileDobrov"

RamDir = "R:\UserTarget\MozillaFirefox\ProfileDobrov"
If CreateObject("Scripting.FileSystemObject").FolderExists(RamDir) Then
    ' CurrPath = FirefoxDir
    WshShell.Run "cmd /c @echo " & chr(007), 0, false
End If

If CreateObject("Scripting.FileSystemObject").FolderExists(ProfileUser) Then
    ProfileDir = ProfileUser
End If

If CreateObject("Scripting.FileSystemObject").FolderExists(ProfileCD) Then
    ProfileDir = ProfileCD
End If

' result = WshShell.Popup(ProfileDir, 3, "FireFox", vbQuestion)
WshShell.Ru

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

Dumby спасибо, сделал! Вот ещё хотелка для любителей ярлыков любых прог: :)


В кнопке «Меню пользователя» создавать последний пункт меню из опции, загружаемой из about:config.
т.е. для последней строки должно быть изменяемое свойство объекта, которое можно править каким либо образом.
Нужно по правому клику открыть диалог правки последней строки меню с её свойствами – т.е. данными в MenuItem{………}.
имя MenuItem не менять (для обращения из другой части кода), а имя строки меню и всё содержимое сделать изменяемым.
Если сложно, то можно не включать функционал upd() – автообновляемая строка меню с renderedOnce.
Но в идеале перед открытием меню из about:config лучше брать весь объект MyMenu, но не представляю, как это сделать…


Пригодиться многим: возможность вбить код, делающий то, что нужно юзеру. После правки строка меню должна измениться.
[spoiler=Меню пользователя - заготовка][code](a

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

Dumby => mvd0era-FPc-I.jpg
Я переделал код, но не получается вставить второй блок текста с другим стилем.
второй текст получается сразу слитно за первым, с тем же размером шрифта и без переноса…

Выделить код

Код:

var header = wary.appendChild(document.createElement("div"));
header.append(head);
var txt = header.appendChild(new Text());

Скрипты » UCF - ваши кнопки, скрипты… » 06-04-2024 03:11:36

Dumby – исчезающая панель не пашет в UCF scriptsbackground [System Principal] (custom_script.js) :(
но код без win. работает нормально в режиме scriptschrome: document [ChromeOnly]
[spoiler=Ошибка на строке: var header = div.appendChild(doc.createElement("div")).appendChild(new Text());][code]// ChromeUtils.domProcessChild.childID || ({…………………………
getwin(){ //self = Services.obs.addObserver(self = this, topic); //в custom_script.js
    return this.ownerGlobal || Services.wm.getMostRecentWindow("navigator:browser");
},
ask(head, run, info = "", sec = 3, x, y = 58, win = self.getwin()){ // x < 0 отсчёт смещения справа
    var doc = win.document, wary = doc.createXULElement("panel"), popupset = doc.getElementById("mainPopupSet");
    wary.setAttribute("onpopupshown", "move()"); wary.setAttribute("onpopuphidden", "this.remove()");
    var div = wary.appendChild(doc.createElement("div"));
    var header = div.appendChild(doc.createElement("div")).appendChild(new Text());
    var txt = div.append

Сustom Buttons » Custom Buttons » 02-04-2024 16:00:08

Dumby спасибо! Но перенос строки не пашет!
И желательно добавить ниже мелким шрифтом текст пояснения, например: выполнение команды «format C:»


нашёл только такой способ:

Выделить код

Код:

// var tn = box.appendChild(new Text());
const div = document.createElement("div");
var tn = box.appendChild(div);
div.insertAdjacentHTML("afterbegin", '<p>afterbegin -  В начало элемента</p>');
div.insertAdjacentHTML("beforeend", '<p>beforeend - В конец элемента</p>');

Сustom Buttons » Custom Buttons » 01-04-2024 02:14:45

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

Сustom Buttons » Custom Buttons » 31-03-2024 16:07:03

VORON - надо прописать скрипты в CustomStylesScripts.mjs.
В демо-профиле всё уже сделано, читайте шапку темы.

Скрипты » UCF - ваши кнопки, скрипты… » 31-03-2024 00:14:56

Оптимизировал скрипты ucf_hookClicks SingleHTML.mjs ClickPicSave.mjs в части глобальных функций.
Клики мыши работают на кнопке "Новая вкладка" и пустой панели (Закрыть вкладки слева/справа от активной), при ошибках сохранения страниц/картинок urlbar мигает красным.
В меню пользователя (правый клик на кнопке Дополнения) «Заметки» запускает свой софт для каждой системы (для Linux не вписал, т.к. нет стандарта да и пользователей только 2%)

Скрипты » UCF - ваши кнопки, скрипты… » 30-03-2024 01:34:57

Dumby пишет

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

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

Скрипты » UCF - ваши кнопки, скрипты… » 29-03-2024 19:03:05

Dumby спасибо!
ещё проблемку со скриптом ClickPicSave.jsm не смог исправить…
Сохраняет только в папку Загрузки по-умолчанию, хотя в настройках выбран другой путь, который запоминается в data["browser.download.dir"].set
[spoiler=ClickPicSave.mjs][code]// by Dumby сохранить картинку колёсиком или перетащив вправо; DBL поиск похожих
export {MouseImgSaverChild, MouseImgSaverParent}; // forum.mozilla-russia.org/viewtopic.php?pid=800469#p800469

var u = {get it() {
    delete this.it;
    return this.it = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools);
}};
["E10SUtils", "PrivateBrowsingUtils"].forEach(name => Object.defineProperty(u, name, {
    configurable: true, enumerable: true, get() {
        var url = `resource://gre/modules/${name}.`;
        try {var exp = ChromeUtils.importESModule(url + "sys.mjs");}
        catch {exp = ChromeUtils.import(url + "jsm");}
        delete this[name];
        return this[name] = exp[name];
    }
}));

class MouseImgSaverChild extends JSWindowActorChild {
    handleEvent(e) { //к

Board footer

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