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

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

Сustom Buttons » Custom Buttons » 31-01-2023 02:04:55

unter_officer пишет

Пишет: ReferenceError: SessionStore is not defined

Правильно пишет,
среди предустановленных в UCF модулей — этого нет
(вот PlacesUtils, например, есть).


Но имеется в окне. Можно обратиться win.SessionStore


Ну и ещё все (два) window заменить на win
а то там, зачем-то, в try-catch завёрнуто, в консоли не увидишь ничего.

Пытался подтянуть что-то вроде этого

ChromeUtils.importESModule() возвращает экспортный объект,
SessionStore — это будет его свойство.


Обычно используют деструктурирующее присваивание:
var {SessionStore} = ChromeUtils.importESModule("resource:///modules/sessionstore/SessionStore.sys.mjs");
а, если брать с окна, то, соответственно,
var {SessionStore} = win;

Сustom Buttons » Custom Buttons » 30-01-2023 22:24:18

ВВП пишет

А это никак не обойти ? Как прокси, так это SSL_ERROR_BAD_CERT_DOMAIN

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

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

unter_officer
[spoiler][code](async ss => {
    ss = ChromeUtils.importESModule(ss).SessionStore;
    await ss.promiseAllWindowsRestored;
    CustomizableUI.createWidget({
        id: "803529",
        localized: false,
        onCreated(btn) {
            var vals, keys = [, "label", "tooltiptext"];
            var disable = () => {
                keys[0] = "disabled";
                vals = [true, "No Last Session", "No last session, nothing to clear"];
            }
            var setState = btn => {
                for(var ind in keys) btn.setAttribute(keys[ind], vals[ind]);
            }
            if (ss.canRestoreLastSession) {
                keys[0] = "oncommand";
                var cmd = `SessionStore.canRestoreLastSession = false;`;
                vals = [cmd, "Clear Last Session", "Clear last session"];

                var qt = "quit-application-granted";
                var ct = "sessionstore-last-session-cleared";

                var destroy = () => {
                    Services.obs.removeObserver(obs, ct);
                    Services.obs.removeObserver(destroy, qt);
                }
                var obs = () => {
                    destroy();
                    disable();
                    var widget = CustomizableUI.getWidget(th

Сustom Buttons » Custom Buttons » 26-01-2023 20:13:01

ВВП пишет

убрать

В смысле с глаз долой?
Если включено browser.download.autohideButton
то просто DownloadsButton.hide();

Сustom Buttons » Custom Buttons » 25-01-2023 19:13:28

unter_officer пишет

переделайте пожалуйста под UCF

А какой смысл? Даже если атрибут "crop" будет проставляться,
толку от этого не будет никакого, label испорчен откуда-то отсюда.


Может замени, для начала, в этом стиле
-moz-box-flex: 1 на max-width: 100%

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

LGS пишет

когда запускаю фокс, то открыта только вкладка about:newtab

То есть, ты хочешь забрать эту вкладку себе,
чтобы в неё places-добро не грузилось?


Можно так попробовать, вроде не должно грузиться
пока в эту вкладку не будет загружено что-то другим образом.
Код для custom_script_win.js
[spoiler][code](async place => {
    await gBrowserInit.idleTasksFinishedPromise;

    var tabs = gBrowser.visibleTabs;
    if (tabs.length > 1) return;

    var re = /^about:(?:newtab|home)$/;
    var [tab] = tabs, br = tab.linkedBrowser;

    if (re.test(br.currentURI.spec)) br.loadURI = function(url, params) {
        if (
            re.test(this.currentURI.spec) &&
            gBrowser.selectedBrowser == this &&
            Components.stack.formattedStack.includes(place)
        ) {
            var e = window.event ||
                Services.focus.focusedWindow.event ||
                Services.wm.getMostRecentWindow("Places:Organizer")?.event;

            if (e) {
                var node, trg = e.target;

                if (trg.nodeName == "treechildren") node = trg.parentNode.selectedNode;
                els

Сustom Buttons » Custom Buttons » 20-01-2023 16:26:20

vitalii201
Браузер открывает букмарклеты как-то так

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

Выделить код

Код:

var url = "javascript:window.open('https://litr.cc/groups?createLinkUrl='+encodeURIComponent(window.location.toString().split('#')[0]));void%200;";
openTrustedLinkIn(url, "current", {allowPopups: true, allowInheritPrincipal: true});

Сustom Buttons » Custom Buttons » 17-01-2023 22:05:27

ВВП пишет

Пропустил...это

Не, это не то. Впрочем, нашёл ответ в личке.
Написал несколько соображений, надеюсь обоснованных.

А к 101 это не того...
var path = PathUtils.join(PathUtils.parent(PathUtils.xulLibraryPath), "youtube-dl.exe");

Да, в 101 у PathUtils нет геттера xulLibraryPath
В любом случае, можно использовать классику — nsIDirectoryService + nsIProperties
(если нужен профиль, то, соответственно, "ProfD" вместо "GreD")

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

Выделить код

Код:

var file = Services.dirsvc.get("GreD", Ci.nsIFile);
file.append("youtube-dl.exe");
var {path} = file;

И как бы клик сюда добавить Вкл/выкл . Типа: пауза/плей ?
if (event.button == 1) {
gBrowser.selectedBrowser.browsingContext.mediaController.pause()

}

Если с активного (поставленного на паузу), то как-то так.
А с неактивного не запустит, тут, наверно, надо (<video>).play() вызывать,
не знаю, не имею особых дел с контентом, а уж с видео и подавно.
[spoiler][code]if (event.button == 1) {
    var mc

Сustom Buttons » Custom Buttons » 17-01-2023 00:17:09

Custom Buttons 0.0.7.0.0.29, paxmod и bootstrap в zip-папке.


ВВП

ALEX_45_ORP пишет

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

Да, мне тоже любопытно. Может я что-то пропустил?

CSS-стили » Настройка внешнего вида Firefox в userChrome.css » 16-01-2023 20:27:17

voqabuhe
Да, в Firefox 109, поменяли
unified-extensions-item-action на
unified-extensions-item-action-button


Можно последовать за ними,
или, может, вообще подойдёт заменить на
webextension-browser-action

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 16-01-2023 20:15:30

egorsemenov06

Dumby пишет

x instanceof *Element лучше заменить на *Element.isInstance(x)
Там три вхождения (поиск по «instanceof»).

Сделано не только неполно (только третье), да ещё и неправильно.

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

Выделить код

Код:

/*
        if(fe instanceof HTMLInputElement || fe instanceof HTMLTextAreaElement) {
*/
        if(HTMLInputElement.isInstance(fe) || HTMLTextAreaElement.isInstance(fe)) {


		
/*
                if(node instanceof Element.isInstance(x)) {
*/
                if(Element.isInstance(node)) {

Сustom Buttons » Custom Buttons » 15-01-2023 20:07:35

ВВП пишет

на каталог или на профиль

Каталог (самого Firefox?)
var path = PathUtils.join(PathUtils.parent(PathUtils.xulLibraryPath), "youtube-dl.exe");


Профиль
var path = PathUtils.join(PathUtils.profileDir, "youtube-dl.exe");

Сustom Buttons » Custom Buttons » 12-01-2023 21:22:22

brake пишет

Not work in fission?

Not in fission.
Not work in fission out-of-process frames.


Like page site1.com contains <iframe> site2.org
Not work in such iframe.

Сustom Buttons » [CB]Attributes Inspector (для разработчиков) » 12-01-2023 12:31:05

Infocatcher
Да, ещё упустил упомянуть, что в Firefox 110+
удалили классический contract id для промпт-сервиса.

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

unter_officer
Да, вижу. Можно вместо (или вместе с)

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

Выделить код

Код:

//
		var gBrowserBundle = {
			GetStringFromName: () => "Скопировано в буфер обмена!"
		};


подкинуть подобного же фейка, типа
скрытый текст

Выделить код

Код:

//
		var MozXULElement = {insertFTLIfNeeded() {}};
		var document = {l10n: {setAttributes: msg => msg.textContent = "Скопировано в буфер обмена!"}};


Ну, или править уже сам код для eval()

Сustom Buttons » Custom Buttons » 12-01-2023 12:27:03

Oakwood пишет

Это шутка?

Нет. Это ощущение.

4 - 5 - 3

Как-то так, наверно
[spoiler]
[code]addEventListener("contextmenu", {
    handleEvent(e) {
        if (e.detail != 2 || !gContextMenu?.onImage) return;

        var pl = "browser.download.folderList";
        var pu = "browser.download.useDownloadDir";

        var cl = Services.prefs.getIntPref(pl), sl = cl == 2;
        var cu = Services.prefs.getBoolPref(pu);

        sl || Services.prefs.setIntPref(pl, 2);
        cu || Services.prefs.setBoolPref(pu, true);
        try {
            this.save(); e.preventDefault(); this.hide();
        } finally {
            sl || Services.prefs.setIntPref(pl, cl);
            cu || Services.prefs.setBoolPref(pu, cu);
        }
    },
    get hide() {
        delete this.hide;
        var popup = document.getElementById("contentAreaContextMenu");
        return this.hide = popup.hidePopup.bind(popup);
    },
    get save() {
        var func = eval(`(function ${gContextMenu.saveMedia})`.replace(
            /^(        )(?:false, \/\/ don't)( skip prompt for where to save)/m, "$1true, //$2"
        ));
        delet

Сustom Buttons » [CB]Attributes Inspector (для разработчиков) » 10-01-2023 00:19:02

Infocatcher
Для Firefox 109 переключили настройку этого бага.
Теперь это затрагивает и релиз, и пора что-то с этим делать.


Проявляется в том, что Attributes Inspector больше не показывает margin, border, padding,
и, иногда, не показывает размеры (или показывает неправильно).


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


Насколько я вижу, Element и XULElement используются только для оператора instanceof,
поэтому сделал себе так (последняя строка обозначает место, перед которой добавлен блок if).
[spoiler][code]//...
    if(this.eventHandler.fxVersion >= 106) {
        var fakeElm = function(name) {
            var res = {}, elm = window[name];
            res[Symbol.hasInstance] = elm.isInstance.bind(elm);
            return res;
        }
        var Element = fakeElm("Element");
        var XULElement = fakeElm(

Сustom Buttons » Custom Buttons » 10-01-2023 00:16:08

Oakwood пишет

кнопку Autocopy может быть сможет реанимировать Dumby

Сомнительно. Сложновато это для меня. Но попробовать могу.
[spoiler][code]this.closest("toolbarpaletteitem") || ((id, func) => {
    var PREF_ENABLED = 1, PREF_BLINK = 2, PREF_RESET = 4;
    var g = Cu.getGlobalForObject(Cu), autocopy = g[id];
    if (!autocopy) {
        var cid = id + " Child";
        var pref = "CB.Autocopy.settings", topic = "quit-application-granted";
        (autocopy = g[id] = {
            init() {
                this.readSettings();
                Services.obs.addObserver(this, topic);
                this[PREF_ENABLED] && this.initChild();
            },
            destroy(reason) {
                if (reason && reason[5] != "e") {
                    var e = Cu.getGlobalForObject(reason.constructor).event;
                    if (!e || e.target.id != "custombuttons-contextpopup-move-removeFromToolbar") return;
                }
                delete g[id];
                this.saveSettings();
                reason == "delete" && Services.prefs.clearUserPref(pref);
                Services.obs.removeObserver(this, topic);
                this[PREF_ENABLED] && this.destro

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

LGS пишет

работает вплоть до 108-ой

Вот когда Cu.import() удалят — всё,
BookmarkExporter только дебаггером можно будет достать.

почему-то пункт "Экспорт папки в HTML" размножается

Ну так потому, что код для CB, а не для UCF.
В CB, addEventListener() — это не window.addEventListener()
Лучше воздерживаться от дословного переноса кодов.


А размножается, наверно, потому, что листенер не может
переопределить свой метод handleEvent(),
поскольку перед этим идёт вызов функции addDestructor(), которой в UCF нет.
Соответственно, ошибка и обрыв дальнейшего исполнения.

что можно подправить в вашем коде для СВ, чтобы срабатывало в боковой панели и библиотеке..?

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


Вот, попробовал перерисовать под custom_script.js
[spoiler][code](async topic => {
    var imp = (m, n = m) => Cu.import(`resource://gre/modules/${m}.jsm`, {}

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

_zt пишет

Кэш запуска вы, конечно, очистили?

Ну, под конец, конечно, очистил. Чтобы посмотреть как тулбары исчезнут.


А сначала, напротив, даже не дышал на него.
Ведь суть эксперимента была именно в том, выдержит ли startupCache
столь эпическое обескровливание UCF, или это просто прогон. Оказалось правда.

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

Провёл некоторую 'чистку'. Сейчас у меня в директории 'user_chrome_files' имеется только один файл - 'user_chrome.manifest'. Но возможность активировать ещё 3 панели осталась.

Можно подумать: «что за бред сивой кобылы?».
Однако, я смог воспроизвести это!


Одна укфская кнопка потерялась, а у остальных пропали иконки
(кроме как у кнопки скрытия нижнего тулбара). Но сами тулбары остались!
[spoiler][code]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxIAAAHlCAIAAADurl0UAABmTUlEQVR42uydB3wURf+H59I7PYD0HmpCkyYgoHQV6ahAFEGKSlPpilIE/yigIlheDWBBREVqgoICUgMYRCAQeif0QHq5/9zt3d5s37tccnfh+3x8efdmZ2d+O7u3+9zM7MZQK+ai0WgkhBgMhmKfPktcSkRERGJiomtjAAAAAMBDy7Vr13JycipWrMgv3+ryAzUlqkmmfzltKr6kd1hY2KRJk+rVq8dl3bJlC79caOTl5Xl5ebm6xQAAAADwkJKbm3v21t2a4aX45cefG5J55MDdrqtoiqH28kthn/R6/vnn+/XrtyHhpmtjLRUWcCslw9UtBgAAAABgofVjdY5fuT7m8UfvdfvRpE0Vlw9ZsWLFxoRbrg4M2gQAAAAAtyOidc3nR4xIDhluaNas2Zw5c87llHN1SCZKhQbcug9tAgAAAIB7UaZZjdGRNU3a9Ouvv24+csfV8Zig2rTjzz9cHQUAAHgw9Zs95uoQACiCFG9aY0LTOiZt2rlz57d/nX

CSS-стили » Настройка внешнего вида Firefox в userChrome.css » 25-12-2022 11:23:13

voqabuhe пишет

А как тогда сделать, чтоб в главном меню нажималось?

Ну, что-нибудь поперёк концепции

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

Выделить код

Код:

/*
                if (!node?.matches("toolbarbutton, image.urlbar-icon")) return;
                if (node.getAttribute("type") === "menu")
*/
                if (!node.matches("toolbarbutton, image.urlbar-icon, #main-menubar > menu")) return;
                if (node.matches("[type=menu], menu"))


/*
                       document.querySelector(":is(menupopup,panel)[panelopen='true'], toolbarbutton[open='true'] > menupopup")?.hidePopup();
*/
                       document.querySelector(":is(menupopup,panel)[panelopen=true], :is(toolbarbutton, #main-menubar > menu)[open=true] > menupopup")?.hidePopup();

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 24-12-2022 20:54:20

LGS пишет

а еще лучше адаптировать dav_LinkifiesLocationBar.uc.js для 68esr

Ууу, копаться в этом радости мало.

замены в стр.14 chrome://browser/content/browser.xhtml на xul явно недостаточно

Если код в custom_script_win.js, то «стр.14» не нужна как таковая, убери её.


Чтобы как-то завелось, можно попробовать заменить пару строк

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

Выделить код

Код:

/*
		var urlBarInput = getWindow().document.querySelector("#urlbar-input").value;
*/
		var urlBarInput = gURLBar.value;


/*
	var urlbarInput = getWindow().document.querySelector("#urlbar-input");
*/
	var urlbarInput = gURLBar.inputField;


И, там ещё есть текст стиля в var stylexul = `…`;
Так вот, в нём, заменить все (три) решётки (#) на точки (.),
то есть, с идентификатора на класс.

Скрипты » UCF - ваши кнопки, темы, дополнения, скрипты… » 24-12-2022 01:38:45

mfrost пишет

Может я что в настройках не включил?

Кстати, вполне возможно. Типа эту галку


Включить скрипты:
[  ] В фоне [System Principal]
[✔] Для докум. окна браузера [ChromeOnly] ◄◄◄◄◄◄◄
[  ] Для докум. всех окон [ChromeOnly]

CSS-стили » Настройка внешнего вида Firefox в userChrome.css » 21-12-2022 21:20:11

unter_officer пишет

Если я правильно понял, вот ЗДЕСЬ Dumby привел пример, как это исправлено в userChromeJS.

Да, понял правильно. Но, суть, скорее даже в том,
создавать ли выпиленный vbox#browser-bottombox
или можно ведь добавить тулбар прямо вместо него.


Хорошо, допустим создаём

user_chrome_files\vertical_top_bottom_bar\vertical_top_bottom_bar.js

Выделить код

Код:

/*
                document.querySelector("#browser-bottombox")?.append(bottombar);
*/
                let id = "browser-bottombox", box = document.getElementById(id);
                if (!box) {
                    box = document.createXULElement("vbox");
                    box.id = id;
                    document.getElementById("a11y-announcement")?.before(box);
                }
                box.append(bottombar);

Board footer

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