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

Заказывай стафф с атрибутикой Mozilla и... пусть все вокруг завидуют тебе! Быть уникальным - быть с Mozilla!

CSS-стили » Настройка внешнего вида Firefox в userChrome.css » 26-05-2020 16:59:54

Garalf пишет

В 77 в однопроцессорном режиме страницы открываются в виде сплошных кракозябров.

О, как раз баг на глаза попался.
Мне проверить негде, но можешь попробовать
переключить настройку browser.tabs.documentchannel.ppdc
Рестарт, на всякий случай.

Сustom Buttons » Custom Buttons » 26-05-2020 08:35:03

katana пишет

да и как исправили походу, думал заработает баг какой-то был?

Ровно наоборот.
Не было никакого бага, затем его придумали.
А когда "исправили", тогда и отвалилось.
Этот ещё ничего, имеет разумное обоснование.

Что надо сделать? Обновление надо сделать.
Хотя весьма странно чего-то ожидать от Nightly.
Она чтобы с чем-то возиться, а не чтобы чем-то пользоваться.
Если почему-то прям невтерпёж забрать снимок за неделю
до Merge Day, то вот, собери себе от двенадцатой
[spoiler][code]// CB-0.0.7.0.0.{12-14}-fx.js
(async re => {
    var gzip = "H4sIAAAAAAAACs1abW/jxhH+LAH+D1t9aCXUJ4v7RsrOJUiuSROg6RVI2i9BUNASbTOhSJWk7s65+Ncc2h9yv6w7z+yS1IvvpSiKAvaSWs7sy8yzs7Mze11VbdPW6Xb+U/P2n2//NR77f/7r3/hvNBq9SGtx3ZbNFf3Ib8R0Vxc/LH4Uv3kqJvVkRrWjm6qeEl1ZrTNR3YjP6zq9n9/U1Wa6rlbz1V1erP/svjUzph8R4ZyKP6ebTDx1Tb3aFE+a9r7Imrssayfit78VjnW3ycp2vq2zbVaup8QwwziyosnQEo1MPBVtvcuuaPRRTEVCxZK7oiFv09q1MxOvuQpzwqBcteMeDBcDC5+4L98G9dS3MLq4EF/sbkVkTGKVEU/E5y+qfC3yMm/ztMh/yctb8exL91u0d5lY7Zq22uS/pG1elWKbFlnbZmL6

Сustom Buttons » Custom Buttons » 24-05-2020 20:00:21

unter_officer пишет

Dumby. Возможно ли подправить вот эту кнопочку под крайнюю версию [firefox] ?

Что-то не соображу как сделать, чтобы favicon таба
не дёргался, если есть, но был скрыт, если нет.
[spoiler][code]({
    interval: 6e4,

    id: "cb-auto-reload",
    init(popup) {
        this.tabs(this.initTab, true) && this.addStyle();
        addDestructor(this.destroy, this);
        var dsp = e => this[e.type](e);
        for(var type of ["popupshowing", "TabClose", "SSTabRestored"])
            addEventListener(type, dsp, false, (
                type[0] == "p" ? this.popup = popup : gBrowser.tabContainer
            ) || 1);
    },
    destroy(reason) {
        this.tabs(this.destroyTab, reason != "delete");
        this.menuitem?.remove();
    },
    tabs(callback, arg) {
        var res;
        for(var tab of gBrowser.tabs) {
            var has = SessionStore.getCustomTabValue(tab, this.id);
            has && callback.call(this, tab, arg, res = true);
        }
        return res;
    },
    initTab(tab, arg) {
        arg || SessionStore.setCustomTabValue(tab, this.id, "1");
        var img = document.cr

Сustom Buttons » Custom Buttons » 21-05-2020 11:04:05

unter_officer пишет

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

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

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

Выделить код

Код:

(sel => addEventListener("dblclick", e =>
	!(e.button || e.ctrlKey || e.shiftKey || e.altKey)
	&& e.target.matches(sel) && BrowserOpenTab()
, false, document.getElementById("TabsToolbar") || 1))(
	"#tabbrowser-arrowscrollbox,toolbarspring,#TabsToolbar"
);

Сustom Buttons » Custom Buttons » 20-05-2020 22:35:22

unter_officer пишет

Есть ещё просьба по одной из ваших кнопок.

Не, код не мой, с меня только e10s-оболочка, какая-то.
А перестановки аргументов в nsIWebBrowserPersist.saveURI() обсуждались не раз.


Если нужно, например, под текущий релиз — принцип прост:
открываем релизную idl'ку, смотрим какие аргументы принимает метод saveURI(),
и пытаемся подогнать. Попробуй сам. Если не получится, или просто затем свериться

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

Выделить код

Код:

̣
            fp.open(res => res == fp.returnCancel || !fp.file || makeWebBrowserPersist().saveURI(
                Services.io.newURI(msg.data), document.nodePrincipal,
                //null, null, null, null, null, fp.file, null
                null, null, null, null, fp.file, null, null
            ));

Сustom Buttons » Custom Buttons » 20-05-2020 10:53:35

Inko7 пишет

при нажатии СКМ по папкам в меню закладок или на панели закладок
==> код позволяет

И как же такое может быть, ведь это будет <menu> или <toolbarbutton>,
а в коде написано
if ( target.localName !== "menuitem" || !target._placesNode ) return;


solombala пишет

Эту бы кнопку в скрипт

[spoiler][code]try {Services.obs.addObserver(function qar(cancelQuit, topic, data) {
    if (cancelQuit.data) return;
    Services.obs.removeObserver(qar, topic);
    if (data == "restart") return;

    var wins = Array.from(Services.wm.getEnumerator("navigator:browser")).filter(
        win => win.toolbar.visible && !win.PrivateBrowsingUtils.isWindowPrivate(win)
    );
    if (wins.length > 1) return;
    var [win] = wins, {tabs} = win.gBrowser;
    if (tabs.length > 1 ) return;

    var es = JSON.parse(win.SessionStore.getTabState(tabs[0])).entries;
    if (es.length == 1 && win.isBlankPageURL(es[0].url))
        Services.obs.notifyObservers(null, "browser:purge-session-history"),
        Cu.import("resource:///modules/sessi

Сustom Buttons » Custom Buttons » 16-05-2020 08:31:06

Inko7

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

Выделить код

Код:

try {({
	init(tabpanels) {
		var dsp = e => this[e.type](e);
		addEventListener("click", dsp, true);
		tabpanels.addEventListener("wheel", dsp);
		addEventListener("unload", () => {
			removeEventListener("click", dsp, true);
			tabpanels.removeEventListener("wheel", dsp);
		}, {once: true});
	},
	click(e) {
		var url = e.button == 1
			&& e.target.nodeName == "menuitem"
			&& e.target._placesNode?.uri;
		if (url)
			e.stopPropagation(),
			isBlankPageURL(gBrowser.currentURI.spec) &&
			!gBrowser.webProgress.isLoadingDocument
				? gBrowser.loadURI(url, this.p)
				: gBrowser.selectedTab = gBrowser.addTab(url, this.p);
	},
	p: {triggeringPrincipal: document.nodePrincipal},
	wheel(e) {
		var findbar = gBrowser.selectedTab._findBar;
		findbar?.matches(":hover") && e.deltaY
			&& findbar.onFindAgainCommand(e.deltaY < 0);
	}
}).init(document.getElementById("tabbrowser-tabpanels"))}
catch(ex) {Cu.reportError(ex);}

Сustom Buttons » Custom Buttons » 15-05-2020 09:16:27

voqabuhe пишет

Dumby
А вот эти кнопки можешь подправить?
№14483

Что с ней не так? WFM.

Совсем недавно Андрей спрашивал.

Сколько можно одну и ту же xul-xhtml тему мусолить?
[spoiler][code] ̣
        //var url, type = "application/vnd.mozilla.xul+xml";
        //if (parseInt(Services.appinfo.platformVersion) >= 69 && Services.appinfo.browserTabsRemoteAutostart) {

        var version = parseInt(Services.appinfo.platformVersion);
        var url, type = `application/${version >= 73 ? "xhtm" : "vnd.mozilla.xu"}l+xml`;
        if (version >= 69 && Services.appinfo.browserTabsRemoteAutostart) {[

CSS-стили » Настройка внешнего вида Firefox в userChrome.css » 12-05-2020 09:09:05

Ultima2m пишет

Что нужно изменить в user_chrome_files, чтобы дополнительная панель открывалась ниже панели закладок?

Ого! Оказывается я не один такой. Давно уже себе правлю.

vertical_top_bottom_bar.js

Выделить код

Код:

...
            //navtoolbox.insertBefore(topbar, navbar.nextSibling);
            navtoolbox.append(topbar);

Сustom Buttons » Custom Buttons » 11-05-2020 19:21:02

solombala
Косяк здесь: file.append("\\memreduct\\s.vbs")
Можно так: ["memreduct", "s.vbs"].forEach(file.append)


custom_script.js лежит в %Папка_Профиля%\chrome\user_chrome_files\custom_scripts

Сustom Buttons » Custom Buttons » 11-05-2020 12:44:05

solombala пишет

В чем фишка custom_script.js , чем кнопка хуже?

Код инициализации кнопок исполняется в каждом окне браузера,
после открытия окна, а также после редактирования и при взаимодействии
с режимом «Персонализация…» (при перетаскивании — многократно).


А custom_script.js исполняется только один раз, при старте браузера.
Говоря нестрого, его можно назвать филиалом config.js в профиле.
То есть, для данной задачи, подходит идеально.

И почему батник, а не VBS ?

А мне-то почём знать? Это надо спрашивать у того, кто запускает.


dezhnev пишет

вероятно,

погалаю, что

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

Сustom Buttons » Custom Buttons » 11-05-2020 08:43:01

egorsemenov06
В custom_script.js

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

Выделить код

Код:

try {Services.obs.addObserver(function closer(s, topic, data) {
	Services.obs.removeObserver(closer, topic);
	if (data != "shutdown") return;
	var file = Services.dirsvc.get("ProfD", Ci.nsIFile);
	file.launch(file.append("sqlite.bat"));
}, "quit-application", false);} catch(ex) {Cu.reportError(ex);}

Сustom Buttons » Custom Buttons » 07-05-2020 15:23:40

Andrey_Krropotkin пишет

подскажи на 76 выскакивает вот такая ошибка
TypeError: Custom Buttons: addEventListener: eventTarget is not instanceof nsIDOMEventTarget or EventTarget

Так и должно быть, специально написано: «panel || 1»,
чтобы листенер молча не ушёл в окно, если с panel что-то случится.
̣
А с panel случилось то, что её засунули в <html:template>,
и, похоже, собираются такое проделывать не только с ней.
У меня сейчас так:
[spoiler][code]((css, panel) => ({
    init() {
        panel = document.getElementById("editBookmarkPanel");
        if (panel) {
            addEventListener("popupshowing", this, false, panel);
            this.destroy && this.destroy();
            return;
        } else if (this.destroy) return;

        var mo = new MutationObserver(this.init.bind(this));
        mo.observe(document.getElementById("mainPopupSet"), {childList: true});
        addDestructor(this.destroy = reason => {
            mo.disconnect();
            if (reason) return;
            self._destructors.s

Сustom Buttons » Custom Buttons » 05-05-2020 12:08:50

Garalf пишет

В FF76 перестала

Bug 1625895 - Change tabbrowser-arrowscrollbox from class to id
Так, наверно

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

Выделить код

Код:

//e.target.className == "tabbrowser-arrowscrollbox"
e.target.id == "tabbrowser-arrowscrollbox"

Сustom Buttons » Custom Buttons » 04-05-2020 22:42:21

«Merge Day»

custom_buttons-0.0.7.0.0.12-fx.txt

egorsemenov06 пишет

Выручайте в кнопке Save  не работает Открыть выделенный текст в внешнем редакторе, в контекстном меню. в консоле пишет ReferenceError: custombuttonsUtils is not defined

Да, за всем не уследишь.
[spoiler][code]//Save
try {CustomizableUI.createWidget({
    id: "ucf-cbbtn-Save",
    localized: false,
    get initCode() {
        delete this.initCode;
        return this.initCode = Cu.readUTF8URI(Services.io.newURI(
            "chrome://user_chrome_files/content/custom_scripts/Save.js"
        ));
    },
    cbu: {
        types: {
            128: "Bool", boolean: "Bool",
            64: "Int", number: "Int",
            32: "String", string: "String"
        },
        getPrefs(pref) {
            try {
                return Services.prefs[`get${
                    this.types[Services.prefs.getPrefType(pref)]
                }Pref`](pref);
            }
            catch {return null;}
        },
        setPrefs(pref, val) {
            Services.prefs[`set${this.types[typeof val]}Pref`](pref, val);
        }
    },
    gClipboard: {
        get ch() {
            dele

Сustom Buttons » Custom Buttons » 01-05-2020 09:42:43

Alewww пишет

Dumby, через кнопку можно отправить post запрос?

Меня об этом бесполезно спрашивать, я не сетевой человек,
но это же вэб-технологии, которые, как раз, документированы неплохо.
Вот пример использования fetch, пробуй.

Сustom Buttons » Custom Buttons » 30-04-2020 22:12:38

dezhnev пишет

букмарклет или кнопка для выделения желтым цветом (как маркером) текста на странице
оригинал тут: https://gist.github.com/agibsonsw/a993c14ee172dfeb4d96

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

dezhnev пишет

оригинал выдает пустую страницу с надписью null
пытался скорректировать вставками/удалениями из похожих, но не очень получается, выдает ошибку invalid identifier

Выдаёт null потому, что функция-обёртка зачем-то возвращает null,
а в скорректированном куда-то разбежались знаки плюс (+).
Вольный пересказ оригинала:
[spoiler][code]javascript:(function(className) {
    var sel = getSelection().toString();

    if (!sel) return Array.from(
        document.getElementsByClassName(className)
    ).forEach(span => {
        var pn = span.parentNode;
        if (pn)
            span.replaceWith(span.textContent),
            pn.normalize();
    });
    var txt = sel.toUpperCase(), len = txt.length;
    var ignore = "script,style,textarea"; /

Сustom Buttons » Custom Buttons » 26-04-2020 00:46:21

Bug 1631933 - Remove or revisit support for data:-URLs in the webRequest API (remove/replace WebRequestContent.js)
Конфиг с поправкой
[spoiler=config.js][code]//
try {(nsvo => {
    var o = Cu.getGlobalForObject(nsvo).Object, {freeze} = o, NEW;
    o.freeze = obj => {
        if (Components.stack.caller.filename != "resource://gre/modules/AppConstants.jsm")
            return freeze(obj);
        obj.MOZ_REQUIRE_SIGNING = false;
        if ((NEW = "MOZ_ALLOW_ADDON_SIDELOAD" in obj))
            lockPref("extensions.experiments.enabled", true);
        else
            obj.MOZ_ALLOW_LEGACY_EXTENSIONS = true,
            lockPref("extensions.legacy.enabled", true);

        return (o.freeze = freeze)(obj);
    }
    lockPref("xpinstall.signatures.required", false);
    lockPref("extensions.langpacks.signatures.required", false);

    nsvo = Cu.import("resource://gre/modules/addons/XPIInstall.jsm", {});
    var shouldVerify = nsvo.shouldVerifySignedState;
    nsvo.shouldVerifySignedState = addon => !addon.id && sh

Сustom Buttons » Custom Buttons » 24-04-2020 21:14:16

egorsemenov06 пишет

А еще одну не посмотрите

[spoiler]

Выделить код

Код:

try {CustomizableUI.createWidget({
	label: "Дополнения",
	id: "ucf-cbbtn-ToggleRestartlessAddons",
	localized: false,
	get initCode() {
		this.event = Object.create(null);
		delete this.initCode;
		return this.initCode = Cu.readUTF8URI(Services.io.newURI(
			"chrome://user_chrome_files/content/custom_scripts/toggleRestartlessAddons.js"
		));
	},
	onCreated(btn) {
		btn.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAt0lEQVR42mP4//8/AzK269D+zxDPAMYgNro8OsYUsGf4L5IrAMYgNskGPHrzkAHmAhCbZAPAglFAA6II2w5WC/ZzGEQDDMO9gCQGUmNYr4dhKANPBgdcAyEMMgSrAWA/R0H8jdcALN5iQHYWLABJMgBbABJjACiKweFHigHwgIW6Eux1UryA1QD0QISzsQQqVi+gKEBLfeguwhqIBEM5ihQD4rEoQHaBLwEDQOGBHKggNiyl4sreAEpLK4gRQN5TAAAAAElFTkSuQmCC");
		new btn.ownerGlobal.Function("self,event,_phase", this.initCode)
			.call(btn, btn, this.event, "init");
	}
});} catch(ex) {Cu.reportError(ex);}

[/spoiler

Сustom Buttons » Custom Buttons » 24-04-2020 08:48:26

Dumby пишет

typeof pref

Упс, конечно же typeof val

egorsemenov06 пишет

А эту кнопку так же не получиться сделать

Может и получится, но я её уже пытался интегрировать,
не охота переделывать, разве что только если не работает.
[spoiler][code]try {CustomizableUI.createWidget({
    label: "Переключить текущий поисковик",
    id: "ucf-cbbtn-ToggleCurrentSearchEngine",
    image: "data:image/png;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs9Pt8xetPtu9FsfFNtu%2BTzvb2%2B%2Fne4dFJeBw0egA%2FfAJAfAA8ewBBegAAAAD%2B%2FPtft98Mp%2BwWsfAVsvEbs%2FQeqvF8xO7%2F%2F%2F63yqkxdgM7gwE%2FggM%2BfQA%2BegBDeQDe7PIbotgQufcMufEPtfIPsvAbs%2FQvq%2Bfz%2Bf%2F%2B%2B%2FZKhR05hgBBhQI8hgBAgAI9ewD0%2B%2Fg3pswAtO8Cxf4Kw%2FsJvvYAqupKsNv%2B%2Fv7%2F%2FP5VkSU0iQA7jQA9hgBDgQU%2BfQH%2F%2Ff%2FQ6fM4sM4KsN8AteMCruIqqdbZ7PH8%2Fv%2Fg6Nc%2Fhg05kAA8jAM9iQI%2BhQA%2BgQDQu6b97uv%2F%2F%2F7V8Pqw3eiWz97q8%2Ff%2F%2F%2F%2F7%2FPptpkkqjQE4kwA7kAA5iwI8iAA8hQCOSSKdXjiyflbAkG7u2s%2F%2B%2F%2F3

Сustom Buttons » Custom Buttons » 23-04-2020 23:21:11

egorsemenov06 пишет

Dumby можно эту  кнопку адаптировать для user_chrome_files? [firefox] 75.0

Попробуй так:
сохрани код как Save.js в папку custom_scripts (рядом с custom_script.js),
а в custom_script.js добавь этот код
[spoiler][code]try {CustomizableUI.createWidget({
    id: "ucf-cbbtn-Save",
    localized: false,
    get initCode() {
        delete this.initCode;
        return this.initCode = Cu.readUTF8URI(Services.io.newURI(
            "chrome://user_chrome_files/content/custom_scripts/Save.js"
        ));
    },
    cbu: {
        types: {
            128: "Bool", boolean: "Bool",
            64: "Int", number: "Int",
            32: "String", string: "String"
        },
        getPrefs(pref) {
            try {
                return Services.prefs[`get${
                    this.types[Services.prefs.getPrefType(pref)]
                }Pref`](pref);
            }
            catch {return null;}
        },
        setPrefs(pref, val) {
            Services.prefs[`set${this.types[typeof val]}Pref`](pref, val);
        }
    },
    gClipboard: {
        get ch() {
            delete this.ch;
            return this.ch = Cc["@mozilla.org/widget/clipboardhelper;1"]
           

Сustom Buttons » Custom Buttons » 18-04-2020 19:54:44

_zt пишет

что то отображает, но что это, непонятно

Поставил на Firefox 60.0.2 uBlock Origin 1.26.0 (размер xpi файла 2604)
Скрипт отображает размер как 9612 KB
̣
Покольку в Firefox 60 addon.size ещё не выпилен, запускаю из консоли:
(async addon => alert(Math.floor((await addon).size/1024)))(AddonManager.getAddonByID("uBlock0@raymondhill.net"));
Алерт показывает мне 9612

Иначе говоря, addon.size это размер распакованного xpi.

Сustom Buttons » Custom Buttons » 18-04-2020 08:13:08

_zt пишет

она ни чего не показывает

Вроде должна показывать «NaN  KB», а вообще да, выпилено в Firefox 62:
Bug 1455402 - Stop calculating the size attribute for extensions
̣
Напиши какой-нибудь свой подсчитыватель.
Или вот, попытка что-то набросать, может захочешь попробовать.
Заменить
'\n' + Math.floor(addon.size / 1024) + ' KB'
на
UC.AddonSize.get(addon.id)
и
в конец скрипта добавить код.
Особо не проверял, да и негде, uc-машинерия у меня не развёрнута.
[code]"AddonSize" in UC || (g => UC.AddonSize = {
    data: {},
    noSize: {size: ""},
    format: bytes => `\n${g.Math.floor(bytes/1024)} KB`,
    reduce: (prev, curr) => prev + curr.realSize,
    get xs() {
        delete this.xs;
        return this.xs = g.ChromeUtils.import(
            "resource://gre/modules/addons/XPIProvider.jsm"
        ).XPIInternal.XPIStates;
    },
    get zr() {
        delete this.zr;
        return this.zr = Cc["@mozilla.org/libjar/zip-reader;1"]
            .createInstance(Ci.nsIZipReader);
    },
   

Сustom Buttons » [CB]Custom Buttons Editor: Toggle on Top » 18-04-2020 08:11:52

Dumby пишет

похоже, работает

Увы, работает только до тех пор, пока не закроешь
окно с той кнопкой, которая создала watcher.
̣
Дальше promise более не резольвится. Никакой.
Пробовал подрядить для его создания
Promise от окна CB-редактора, и от глобального
объекта JSM'ок, всё бесполезно.
̣
Жаль. Мне нравилась такая запись.

Сustom Buttons » [CB]Custom Buttons Editor: Toggle on Top » 17-04-2020 08:08:21

Infocatcher
btnPos: 2 (before dialog buttons spacer)
̣
В Firefox 76 из Shadow DOM диалога удалили (тут) <html:style>,
куда добавлялась текстовая нода стиля.
̣
Махнул рукой, переделал. Стало немного нескладно,
если смотреть в целом, но, похоже, работает

Выделить код

Код:

shadow: function(document, style) {
			...

			// Firefox 69+ https://bugzil.la/1544916
			if(style === undefined)
				return sr;
			style && Promise.resolve(this.boxId).then(function(id) {
				sr.getElementById(id)
					.appendChild(document.createElementNS(xhtmlns, "style"))
					.append(style);
			});
			return true;
		},

Board footer

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