Объявление

В связи с наплывом спама и ботов на форуме, регистрация новых пользователей будет приостановлена. О восстановлении регистрации будет сообщено дополнительно

Administrator

Сustom Buttons » Custom Buttons » 31-03-2025 18:51:41

Bug 721336 - Ban sync XMLHttpRequest with chrome privileges (Firefox 138+)


Custom Buttons 0.0.7.0.0.36

Сustom Buttons » Custom Buttons » 31-03-2025 13:50:49

Andrey_Krropotkin пишет

Я считаю что в этом коде слишком перемудрено

А можно поподробнее?
По пунктам, где именно ты считаешь перемудрено.

в ошибках при редактировании любой кнопки в ошибках показывает такое сообщение -TypeError: this.cssProperties is undefined

Это, видимо, из-за options.cssInHelp
Либо переключить в false, либо, если прям очень надо,
то попробовать дописать после var optsOvr = options.codeMirror;

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

Выделить код

Код:

//
					if (isCSS) {
						var {generateCssProperties} = require("resource://devtools/server/actors/css-properties.js");
						var {CssProperties, normalizeCssData} = require("resource://devtools/client/fronts/css-properties.js");
						opts.cssProperties = new CssProperties(normalizeCssData({properties: generateCssProperties(document)}));
					}

Uncaught Error: Action with ID 'TranslateBufer1' already added

Ну так ChromeUtils.importESModule()
не возвращает ничего даже близко похожего на g


Можно разделить,

Сustom Buttons » Custom Buttons » 27-03-2025 10:00:36

green25
В 115 есть отдельный флаг CLEAR_SESSION_HISTORY
А в нынешних версиях уже нет, свалили докучи в CLEAR_HISTORY


В любом случае, для удаления всего,
просто рассылается топик без третьего аргумента:
Services.obs.notifyObservers(null, "browser:purge-session-history");

Сustom Buttons » Custom Buttons » 23-03-2025 17:05:30

green25 пишет

откровенное фуфло

Ага, у тебя зато конфета.
Какое-то -moz-старьё типа -moz-flex-grow и -moz-box-flex
Не нужно там всё это, оно и так уже флекс.


*|*:root:not([inFullscreen])#toolbar-menubar — вообще песня.


И чего вообще ты хочешь? Что значит «сделать толком»?
Выглядит так, словно попытка сделать
растягивающийся пробел на панели меню безразмерным.


Хорошо, вот смотри, назначаем, для наглядности,
background-color и снимаем max-width
Чем не устраивает?

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

Выделить код

Код:

#toolbar-menubar :is(
	toolbarspring,
	[id^=wrapper-customizableui-special-spring]
) {
	background-color: springgreen !important;
	max-width: none !important;
}


Возможно, тебе мешает уже имеющийся там <spacer>,
поскольку он будет иметь такой же размер.


Тогда, либо скрыть этот spacer, либо влепить
ратягивающемуся пробелу и его обёртке гигантский флекс,
то есть, дописать ещё что-то типа flex: 9999 !important;

Как избавиться. Как  окно выпадет это и не только (c window-modal-d

Сustom Buttons » Custom Buttons » 23-03-2025 11:06:13

green25 пишет

Sanitizer.showUI(window); - без толку коды остальные не работают

В 115 появление диалога очистки не вызывает
приостановку исполнения JS-кода в окне браузера.
Можно внутрь переопределённого sanitize() добавлять.
[spoiler][code]document.getElementById("window-modal-dialog").addEventListener("dialogopen", e => {
    var win = e.target.querySelector("browser.dialogFrame").contentWindow;
    var sd = win.gSanitizePromptDialog, {sanitize} = sd;
    sd.sanitize = e => {
        sanitize.call(sd, e);

        CustomizableUI.setToolbarVisibility("PersonalToolbar", false);

        Services.prefs.setBoolPref("browser.zoom.full", true);
        Services.prefs.setCharPref("intl.accept_languages", "ru");
        Services.prefs.setIntPref("media.autoplay.default", 5);
        Services.prefs.setIntPref("extensions.long_left_click.timeContent", 300);

        SidebarUI.hide();
        var sel = "#mainPopupSet > tooltip[onpopupshowing*=undoCloseTabsList]";
        document.querySelector(sel)?.undoCloseTabsList.updUI();

        var lc = Cu.createL

Скрипты » userChrome.js » 23-03-2025 11:04:53

dinn
Если имеется в виду, что взять список именно с <richlistbox>'а
из этого субдиалога, то можно, например, так попробовать

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

Выделить код

Код:

(win => {
	var sites = [], cpbs = [], max = 0;
	for(var item of win.gPermissionManager._list.children) {
		var [site, cpb] = item.querySelectorAll("label");
		max = Math.max(max, (site = site.value).length);
		sites.push(site);
		cpbs.push(cpb.value);
	}
	max += 3;
	sites = sites.map((s, ind) => s.padEnd(max, " ") + cpbs[ind]);

	console.log(sites.join("\n"));
	
})(gSubDialog._dialogs[0].frameContentWindow);


А если в смысле вообще как он там составляется, то, наверно, так
[spoiler][code](pm => {
    var data = {
        [pm.ALLOW_ACTION]: "Allow",
        [pm.DENY_ACTION]: "Block",
        [Ci.nsICookiePermission.ACCESS_SESSION]: "Allow for Session"
    };
    var exs = pm.EXPIRE_SESSION;
    var dpb = Services.scriptSecurityManager.DEFAULT_PRIVATE_BROWSING_ID;

    var sites = [], max = 0;

    for(var p of pm.all) if (
        p.type == "cookie" && p.capability in

Сustom Buttons » Custom Buttons » 22-03-2025 18:20:32

manuk пишет

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

Да, я вижу это.
Было ли так всегда — я без понятия, поскольку не пользуюсь.


Но это не кнопка так себя ведёт, а именно ContextSearch.
Она же не сама выдумывает что показывать, а всего лишь
отображает те пункты меню, которые заказал этот WebExtensions.


Проверить достаточно несложно — комментируешь строку /*#${mid},*/
таким образом пункт от CS перестанет быть скрытым,
и теперь можно кликать и сравнивать то, что создаёт код,
с тем, что есть в субменю аддона. Должно совпадать.


T0PMØ3iLLA пишет

Так-с… версия 0.0.7.0.0.11 перестала работать (истекли сертификаты?)… накатываю из другого профиля версию 0.0.7.0.0.16 — заработало (надолго ли?), но кнопка быстрого переключения about:config параметров слетела/съехала и перестала фурычить (c 2020 года не было нужды

Сustom Buttons » Custom Buttons » 22-03-2025 10:36:29

green25 пишет

Перестало работать в 115 SessionStore.jsm -это ? Менял не помогло

Я ничего не понял.
Что оно делало, при чём здесь SessionStore,
и почему jsm, что менял, и чему не помогло.


Вообще-то, топик "widget-first-paint" — он для top-level окон.
А в 115 это добро открывается во внутриоконном диаложке.
Так что, здесь больше подходит листенер.


И что там за cancel
Когда-то давно, метод sanitize() возвращал логическое значение,
true если случилась ошибка, не при самой очистке, а при исполнении именно этой функции.
А в 115 он ничего не возвращает.


Если нужно знать, не свалился ли код в блок catch {}
то можно попробовать проверять e.defaultPrevented
[spoiler][code]document.getElementById("window-modal-dialog").addEventListener("dialogopen", e => {

    var win = e.target.querySelector("browser.dialogFrame").contentWindow;

    var sd = win.gSanitizePromptDialog, {sanitize} = sd;
    sd.sanitize = e => {

        sanitize.call(sd, e);
        alert(`Catch${e.defaultPrevented ? " not" : ""} happ

Сustom Buttons » Custom Buttons » 17-03-2025 10:10:01

green25 пишет

и на открыть новую вкладку подобное

На «открыть новую вкладку» рассылается топик "browser-open-newtab-start",
так что можно попробовать добавить в код обсёрвер, как-то так:

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

Выделить код

Код:

(flags => {

	var clear = Services.clearData.deleteData.bind(null, flags, () => {});

	var skip, check = () => {
		skip = null;
		for(var w of CustomizableUI.windows) for(var tab of gBrowser.tabs) try {
			if (tab.linkedBrowser.URI.host) return;
		} catch {}
		clear();
	}
	addEventListener("TabClose", e => skip ??= setTimeout(check, 400), false, gBrowser.tabContainer);

	var topic = "browser-open-newtab-start";
	var obs = subj => Cu.getGlobalForObject(subj.wrappedJSObject) == window && clear();
	Services.obs.addObserver(obs, topic);
	addDestructor(() => Services.obs.removeObserver(obs, topic));

})(Ci.nsIClearDataService.CLEAR_DOM_STORAGES);

Сustom Buttons » Custom Buttons » 16-03-2025 12:52:47

Andrey_Krropotkin пишет

может где пропустил изменения
Дает ошибку в строке -  xulWin.zLevel = onTop ? xulWin.raisedZ : xulWin.normalZ;

Да, пропустил. Вот это:


Bug 1902315 - Remove popup and window z-level fiction from our codebase. (Firefox 129+)


Не одно и тоже, но есть флаг "alwaysontop", однако,
здесь — кот не валялся, а перезагружать окно — сам понимаешь ...

Скрипты » UCF - ваши кнопки, скрипты… » 10-03-2025 10:21:02

xrun1 пишет

количество закладок/папок в боковой панели

Да уж, тупой гаденький CSP.
Особо жалко direct eval(), он, наверно, незаменим.
И indirect eval() тоже жалко, он удобнее чего-то другого.


Ладно, вроде вот так, например, работает
[spoiler][code](async () => {
    var proto = PlacesTreeView.prototype;

    proto.addFolderStats = node => {
        var title = PlacesUIUtils.getBestTitle(node, true);

        if (PlacesUtils.nodeIsContainer(node)) {
            var wasClosed = !node.containerOpen;
            if (wasClosed) node.containerOpen = true;

            var urls = 0, containers = 0;
            for(var ind = 0, max = node.childCount; ind < max; ind++) {
                var child = node.getChild(ind);
                if (PlacesUtils.nodeIsURI(child)) urls++;
                else if (PlacesUtils.nodeIsContainer(child)) containers++;
            }
            if (wasClosed) node.containerOpen = false;
       
            title += ` (${urls}/${containers})`;
        }
        return title;
    }

    var eval = code => windowRoot.ownerGlobal.UcfPrefs.dbg
        .makeGlobalObjectReference(window).executeInGlobal(

Скрипты » UCF - ваши кнопки, скрипты… » 09-03-2025 19:20:22

xrun1 пишет

Поведение кнопки немого сломалось, давно уже. Не принципиально, конечно.
При закрытии ЛКМ или СКМ фокус улетает на позицию ниже. Т.е. если была панель закладок --> какая-то папка или закладка, фокус сместится на меню закладок. Если меню закладок --> какая-то папка или закладка --> фокус на другие закладки.

Да, так оно устроено:


treeView.js пишет

// Select the row next to the closed container if any of its
// children were selected, and nothing else is selected.

Можно попробовать собрать корневые папки в которых есть выделение,
и выделить их уже после закрытия.


А ещё, я тут в бесконечную петлю разворачивания угодил.
На панели закладок есть папка-шорткат на панель закладок,
ну типа place:parent=toolbar_____


И вот, разворачивается панель закладок, доходит до этой папки,
разворачивает её, а в ней, сответственно, тоже такая же папка,
и так далее, и так далее. Браузер виснет намертво.
Вобщем, исключил некоторые вещи из разворачивания.
[spoiler][code](svg =

Сustom Buttons » Custom Buttons » 06-03-2025 08:44:57

xrun1 пишет

Этот скрипт

Так, я повторю ещё раз.
Без никакого скрипта вообще.


Итак, STR, окно браузера, панель закладок в нём.
ПКМ по закладке на этой панели —> «Удалить закладку».
Закладка удаляется, исчезает, как и ожидалось.


Теперь, вызываем окно консоли (Ctrl+Shift+J)
и запускаем с него PlacesTransactions.undo()


Восторг! Закладка возвращается.
В точности туда же, где и была.


А теперь(!), не сходя с места,
снова ПКМ по этой закладке —> «Удалить закладку».


И... тишина.
Закладка просто молча не удаляется.


Почему так происходит — я не знаю.
Тем не менее — веский повод отказаться от этого кода как такового.
Увы.

Скрипты » UCF - ваши кнопки, скрипты… » 04-03-2025 09:18:51

Northtech пишет

https://4pda.to/ ссылка передается в таком виде - https://4pda.to/https://4pda.to/

Ага, а если вместо прописанного
microsoft-edge:%OpenURI%OpenURI
написать
microsoft-edge:%OpenURI%OpenURI%OpenURI


то будет передаваться
microsoft-edge:https://4pda.to/https://4pda.to/https://4pda.to/

Скрипты » UCF - ваши кнопки, скрипты… » 04-03-2025 00:52:05

egorsemenov06 пишет

в [firefox] 136.0 выдает вот такую ошибку
Error sanitizing historyFormDataAndDownloads TypeError: item is undefined

Ну, в 136, Object.keys(Sanitizer.items).join("\n");
(типа список возможностей) выдаёт

cache
cookies
offlineApps
history
formdata
downloads
sessions
siteSettings
openWindows
pluginData
browsingHistoryAndDownloads
cookiesAndStorage

Таким образом, наверно,
historyFormDataAndDownloads
browsingHistoryAndDownloads

Сustom Buttons » Custom Buttons » 03-03-2025 23:58:41

green25 пишет

В 115

Думаешь я помню что там было в 115?

toggleRestartlessAddons.js    В 115  не того,сдох ?

Неизвестно.
Возможно где-то есть, надо бы поискать, но я не искун.

И Dom inspector  тоже...?

Хотелось бы думать, что подойдёт из этого поста.

Сustom Buttons » Custom Buttons » 02-03-2025 21:55:38

Garalf пишет

А ты случайно не делал скрипт UserCSSLoader,
чето кнопка уменя не работает.

Нет. Я даже не знаю что это такое.
А не работает, скорее всего, из-за «on…» атрибутов
и/или C{u, hromeUtils}.import(). Это основной отвал на 136.

Сustom Buttons » Custom Buttons » 02-03-2025 19:14:34

Garalf пишет

Ну и нашел еще одну кнопку, которая перестала работать в 136
Консоль браузера

Нее, от кнопки я решил отказаться.


На новых версиях, перехожу на скрипт для UCF.
Для сандбокса, custom_script.js, scriptsbackground
(в окна не совать!)


Локализация там, по сути, особо не нужна,
просто эксперимент с mock-fluent'ом.
[spoiler][code](async url => {

    var img = "chrome://devtools/skin/images/tool-webconsole.svg";

    var strings = {
        ru: {
            label: "Консоль браузера",
            tooltip: [
                "Л: Сайдбар",
                "С: Вкладка",
                "П: Окно"
            ]
        },
        def: {
            label: "Browser console",
            tooltip: [
                "L: Sidebar",
                "M: Tab",
                "R: Window"
            ]
        },
    };

    var fluentLabel = "browser-console-label";
    var fluentButton = "browser-console-button";
    var fluentFile = "user/browser-console.ftl";

    var version = parseInt(Services.appinfo.platformVersion);

    for (var [loc, data] of Object.entries(strings)) {
        var lab = data.label;
        strings[loc] = `${
            fluentButton
        } =\n

Скрипты » UCF - ваши кнопки, скрипты… » 01-03-2025 23:45:28

egorsemenov06 пишет

можно зарегистрировать эту кнопку в resource?

А почему нет, всё одно и то же.
Куда-нибудь после icons, но до добавления page action

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

Выделить код

Код:

//
	var rph = Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler);
	icons.forEach((icon, ind) => {
		var subst = "ucf-opera-proxy-icon-" + ind;
		rph.setSubstitution(subst, Services.io.newURI(icon));
		icons[ind] = "resource://" + subst;
	});

Пожалуйста посмотрите предыдущие сообщение

Я его не понял.
У тебя в коде торчит
chrome://global/skin/plugins/pluginGeneric.svg


Но его давно уже нет.
Тогда надо ещё что-то типа этого, не уверен
[spoiler][code]/*
    get plugin() {
        delete this.plugin;
        return this.plugin = this.useSVG
            ? this.platformVersion >= 65
                ? "chrome://global/skin/plugins/pluginGeneric.svg"
                : "chrome://mozapps/skin/plugins/pluginGeneric.svg"
            : "chrome://mozapps/skin/plugins/pluginGeneric-16.png";
    },
*/
    get plugin() {
        dele

Сustom Buttons » Custom Buttons » 01-03-2025 16:54:05

Garalf пишет

Может, что то в config.js не так?

Антиподписячий код не выглядит как последний выкладывавшийся.
Проверил с последним на 136.0 RC build3, CB и ATB установились нормально.
Ещё, UCF-стафф не последний, но это к вопросу отношения не имеет.

Скрипты » UCF - ваши кнопки, скрипты… » 27-02-2025 18:05:16

egorsemenov06
Копнул поглубже, и получается, что в таком виде,
кнопка какая-то недоадаптированная под UCF.


Надо заменить первый код,
тот, который создаёт виджет, на такой
[spoiler][code](async () => CustomizableUI.createWidget({
    label: "Дополнения",
    id: "ucf-cbbtn-ToggleRestartlessAddons",
    localized: false,
    onCreated(btn) {
        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 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>";
        var subst = this.id.toLowerCase() + "-icon";
        Services.io.getProto

Скрипты » UCF - ваши кнопки, скрипты… » 26-02-2025 09:11:38

egorsemenov06 пишет

тогда скорее всего это loading-burst.svg.Ну а стиля у вас конечно же нет.

Не-не, xrun1 всё правильно сказал.

на темной теме не видно бегающих точек

Это аргумент.


Тогда, можно так попробовать.
В коде есть конструктор


function ProgressIcon(btn) {
    …
}


Заменить его на такой.
(совместимость идёт лесом)

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

Выделить код

Код:

function ProgressIcon(btn) {
	var {icon} = btn, origIcon = icon.src;

	var box = btn.ownerDocument.createXULElement("hbox");
	box.toggleAttribute("busy");
	box.toggleAttribute("fadein");
	box.className = "tab-throbber";

	btn.style.setProperty(
		"min-width", btn.getBoundingClientRect().width + "px", "important"
	);
	icon.replaceWith(box);

	this.loading = () => {
		box.replaceWith(icon);
		btn.style.removeProperty("min-width");
		icon.src = "chrome://global/skin/icons/loading.svg";
	}
	this.restore = () => icon.src = origIcon;
}

Разработка » Странные записи в places.sqlite » 25-02-2025 17:08:39

yup пишет

Кстати, удалить keyword не удаётся. Редактировать - пожалуйста.
Но если пытаюсь удалить полностью - восстанавливается. Всё, что смог - сократить до одной буквы.
Наверное, какая-то ошибка в программе. Надо будет глянуть и исправить, если что.

Да, я вижу это. Определённо баг. Вот попытка сочинить eval-патч.


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


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


Понятное дело, что смотреть надо на урле, который не испорчен багом.
То есть, подопытный — урл без кейворда вообще, «и вперёд» после патча.
[spoiler][code](repl => {
    var url = "resource://gre/modules/PlacesUtils.jsm";
    var g = Components.utils.import(url, {});

    var key = "doTransaction";
    var proto = g.PlacesEditBookmarkKeywordTrans

Скрипты » UCF - ваши кнопки, скрипты… » 24-02-2025 20:43:33

egorsemenov06
Ну, раньше был
chrome://browser/skin/tabbrowser/tab-connecting.png
а теперь нет.


Можно заменить в коде на тот, который был раньше.
В смысле вытащить из Firefox, в котором ещё есть.
Вот из 115, например
[spoiler][code]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACGFjVEwAAAA8AAAAAO2clZcAAAJAUExURQAAAFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVFJSVF

Разработка » Странные записи в places.sqlite » 24-02-2025 18:40:47

yup пишет

вопросов по визуальной части затеи не предвидится

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

Вот что получается в консоли

Да, вижу. Действительно странно.

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

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


Суть: получить объект, где свойства — урлы истории,
а значения — количество штук в закладках.
Ну и замерить сколько на это уйдёт времени.


Запускал на Firefox 56, places.sqlite — 65 мегабайт.
Находит где-то 69 тысяч урлов.
Выигрывает практически всегда TEST_SQL_AGG_NATIVE
а TEST_XPCOM всегда последний.


Кстати, наткнулся на такое:
Обнаружился один урл, для которого foreign_count
не совпадает с тем, что отдаёт TEST_XPCOM
В базе значение — три,
а кодом без использования чтения базы — два.


Ока

Board footer

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