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

Общайтесь со знакомыми и друзьями в нашем сообществе в Facebook.

№1392606-12-2019 18:18:06

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 595
UA: Firefox 52.0

Re: Custom Buttons

solombala пишет

unter_officer
Профиль где? В системе? У меня портабл и профиль в каталоге .

У меня портабл от portableapps.com и профиль в каталоге.


«The Truth Is Out There»

Отсутствует

 

№1392706-12-2019 22:26:39

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2243
UA: Firefox 52.0

Re: Custom Buttons

solombala пишет

Нельзя глянуть?

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

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

Выделить код

Код:

((bar, button = true, insertAtTop = true, ctrlFcloseFinbar = false) => ({
    init(parent) {
        var has = bar = parent.querySelector("#appcontent > findbar");
        has || this.initFinbar(parent);
        var lo = bar.linkedObject;
        lo.listenCtrlF = ctrlFcloseFinbar
            ? listen => listen
                ? addEventListener("keydown", lo, true)
                : removeEventListener("keydown", lo, true)
            : () => {};
        has && !bar.hidden && lo.listenCtrlF(true);
        if (button) self._handleClick = () => bar.hidden
            ? bar.startFind(bar.FIND_NORMAL)
            : bar.collapsed || bar.close();
        addDestructor(lo.destroy, lo);
    },
    destroy(reason) {
        if (reason[5] != "e") return;
        bar.close();
        bar._browser = {};
        bar.remove();
        this.setProgressListener(false);
        if (!this.receiver) this.actorProto.receiveMessage = this.actorReceiveMessage;
        for(var key of ["gFindBar", "gFindBarInitialized"])
            key in this && Object.defineProperty(window, key, this[key]);
        for(key of this.gBrKeys) gBrowser[key] = this[key];
        Services.ppmm.removeDelayedProcessScript(this.url);
        Services.ppmm.loadProcessScript("data:," + encodeURIComponent(`
            (ai => ai.processType == ai.PROCESS_TYPE_DEFAULT || ai.processType == ai.PROCESS_TYPE_CONTENT)(
                Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime)
            ) && (nsvo => {
                var proto = nsvo.Finder.prototype;
                if ("_requestMatchesCount" in proto) {
                    proto.requestMatchesCount = proto._requestMatchesCount;
                    delete proto._requestMatchesCount;
                }
            })(Cu.import("resource://gre/modules/Finder.jsm", {}));`
        ) , false);
    },
    initFinbar(parent) {
        for(var tab of gBrowser.tabs) {
            if (!tab._findBar) continue;
            tab._findBar.browser = null;
            tab._findBar._browser = {};
            tab._findBar.remove();
            delete tab._findBar;
        }
        bar = document.createXULElement("findbar");
        var p = new Proxy({}, {get: () => () => {}});
        bar._browser = {finder: p, messageManager: p};
        parent.insertBefore(bar, insertAtTop ? parent.firstChild : null);
        bar.linkedObject = this;

        ["gFindBar", "gFindBarInitialized"].forEach((key, ind) => {
            var desc = Object.getOwnPropertyDescriptor(window, key);
            if (!desc.configurable) return;
            this[key] = desc;
            delete window[key];
            window[key] = ind ? true : bar;
        });
        var key = "getCachedFindBar" in gBrowser ? "getCachedFindBar" : "getFindBar";
        this.gBrKeys = [key];
        key = "isFindBarInitialized";
        if (key in gBrowser) this.gBrKeys.push(key);
        this.gBrKeys.forEach((key, ind) => {
            this[key] = gBrowser[key];
            gBrowser[key] = ind ? () => true : () => bar;
        });
        var props = [
            "close", "startFind", "onMatchesCountResult",
            "_updateMatchesCount", "_onBrowserKeypress"
        ];
        if ((this.receiver = "receiveMessage" in bar))
            props.push("receiveMessage");
        else {
            this.actorProto = Object.getPrototypeOf(
                gBrowser.selectedBrowser.browsingContext.currentWindowGlobal.getActor("FindBar")
            );
            this.actorReceiveMessage = this.actorProto.receiveMessage;
            this.actorProto.receiveMessage = msg => {
                if (msg.name == "Findbar:Keypress") bar._onBrowserKeypress(msg.data);
                else if (msg.name == "Findbar:Mouseup") bar.onMouseUp();
            }
        }
        props.forEach((key, ind) => {
            var func = bar[key].bind(bar);
            bar[key] = ind
                ? (...args) => this[key](...args) || func(...args)
                : (...args) => func(...args) || this[key](...args);
        });
        this.url = "data:," + encodeURIComponent(`
            (ai => ai.processType == ai.PROCESS_TYPE_DEFAULT || ai.processType == ai.PROCESS_TYPE_CONTENT)(
                Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime)
            ) && (nsvo => {
                var proto = nsvo.Finder.prototype;
                if ("_requestMatchesCount" in proto) return;
                proto._requestMatchesCount = proto.requestMatchesCount;
                proto.requestMatchesCount = ${
                    this.newRequestMatchesCount
                }
            })(Cu.import("resource://gre/modules/Finder.jsm", {}));`
        );
        delete this.newRequestMatchesCount;
        Services.ppmm.loadProcessScript(this.url, true);

        var desc = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value");
        var setValue = desc.set.bind(bar._findField);
        desc.set = val => Components.stack.formattedStack.includes(
            "set browser@chrome://global/content/elements/findbar.js"
        ) ? val : setValue(val);
        Object.defineProperty(bar._findField, "value", desc);
    },
    newRequestMatchesCount: async function requestMatchesCount(aWord, aLinksOnly, aUseSubFrames = true) {
        if (aLinksOnly && aLinksOnly.constructor.name == "Object") {
            var {linksOnly, data} = aLinksOnly;
            aLinksOnly = linksOnly;

            this.entireWord = data.entireWord;
            this.caseSensitive = data.caseSensitive;
            this.onModalHighlightChange(data.useModalHighlight);
            this.onHighlightAllChange(data.highlightAll);
            data.highlightAll && await this.highlighter.highlight(true, aWord, linksOnly);
            this._iterator && this._iterator.reset();
            var obj;
            Object.defineProperty(this, "_currentMatchesCountResult", {
                configurable: true, enumerable: true,
                get: (val = obj) => {
                    if (val && val._currentFound)
                        val.total = Math.floor(val.total) + .0001;
                    return obj = val;
                },
                set: val => {
                    if (val) {
                        val.total = 10000;
                        return obj = val;
                    }
                    delete this._currentMatchesCountResult;
                    return obj = this._currentMatchesCountResult = val;
                }
            });
        }
        return await this._requestMatchesCount(aWord, aLinksOnly, aUseSubFrames);
    },

    close() {
        bar.collaped = false;
        this.setProgressListener(false);
        this.setBrowser(null, null);
    },
    startFind() {
        if (this.maybeCollapse(gBrowser.selectedBrowser))
            return true;
        if (bar.hidden)
            this.setBrowser(300),
            this.setProgressListener(true);
        else if (!ctrlFcloseFinbar)
            setTimeout(() => this.updateMatchesCount(), 100);
    },
    get pf() {
        delete this.pf;
        return this.pf = bar.pluralForm || ChromeUtils.import(
            "resource://gre/modules/PluralForm.jsm"
        ).PluralForm;
    },
    onMatchesCountResult(res) {
        if (res.total <= 1000) return;

        var strTotal = String(res.total);
        var found = strTotal.includes(".");
        if (found) strTotal = strTotal.split(".")[0];
        if ((res.total = +strTotal.slice(-4)) >= 1000) {
            res.total = -1;
            return;
        }
        if (res.current > 1000)
            res.current = +String(res.current).slice(-4);

        if (res.current && found) return;

        bar._foundMatches.value = `${+res.total || "Нет"} совпадени${
            this.pf.get(res.total, "е;я;й")
        }.`;
        bar._foundMatches.hidden = false;
        return true;
    },
    _updateMatchesCount() {
        return true;
    },
    _onBrowserKeypress(e) {
        if (!bar.hidden) return;
        if (!e.charCode) return true;
        this.setBrowser(300);
        this.setProgressListener(true);
    },
    receiveMessage(msg) {
        msg.target = bar._browser;
    },

    progressListenerAdded: false,
    setProgressListener(add) {
        if (add) {
            if (this.progressListenerAdded) return;
            this.progressListenerAdded = true;
            gBrowser.addProgressListener(this);
            this.listenCtrlF(true);
        } else {
            if (!this.progressListenerAdded) return;
            this.progressListenerAdded = false;
            gBrowser.removeProgressListener(this);
            this.listenCtrlF(false);
        }
    },
    handleEvent(e) {
        if (
            e.ctrlKey && e.code == "KeyF"
            && !e.shiftKey && !e.altKey && !bar.collapsed
        )
            e.preventDefault(),
            e.stopPropagation(),
            bar.close();
    },
    updateMatchesCount() {
        var str = bar._findField.value;
        if (!str) return;
        var data = {
            entireWord: bar._entireWord,
            caseSensitive: bar._typeAheadCaseSensitive,
            highlightAll: bar._highlightAll,
            useModalHighlight: bar._useModalHighlight
        };
        bar.browser.finder.requestMatchesCount(
            bar._findField.value,
            {linksOnly: bar._findMode == bar.FIND_LINKS, data}
        );
    },
    maybeCollapse(br) {
        return br.isSyntheticDocument ||
            br.documentContentType == "application/vnd.mozilla.xul+xml";
    },
    setBrowser(updateDelay, br = gBrowser.selectedBrowser) {
        if (bar._browser != br) {
            var b = bar._browser;
            if (b) {
                this.receiver && b.messageManager
                    .removeMessageListener("Findbar:Mouseup", bar);
                b.finder.removeResultListener(bar);
                bar._highlightAll && b.finder.highlight(false);
            }
            if (br) {
                this.receiver && br.messageManager
                    .addMessageListener("Findbar:Mouseup", bar);
                bar._updateBrowserWithState();
            }
            bar._browser = br;
        }
        if (!br) return;
        bar._updateStatusUI();
        bar._foundMatches.value = "";
        br.finder.addResultListener(bar);
        if (
            !(bar.collapsed = this.maybeCollapse(br))
            && br.currentURI.spec != "about:blank"
            && updateDelay !== null
        )
            updateDelay
                ? setTimeout(this.updateMatchesCount, updateDelay)
                : this.updateMatchesCount();
    },
    onStateChange(wpr, req, state) {
        state & Ci.nsIWebProgressListener.STATE_STOP && this.setBrowser();
    },
    onLocationChange(wpr, req) {
        req || wpr.isLoadingDocument ||
            gBrowser.selectedTab.hasAttribute("pending") || this.setBrowser();
    }
}).init(document.getElementById("appcontent")))();

□□□□□□□□□□□ пишет

только я привык к этой кнопке, бац и обновления 71

Не подходит тебе CB, не те нынче времена.
Может лучше сделай себе аналогичный WebExtensions.
Прослужит дольше, а если сводить его в мазилу на приём к подписологу,
то вообще будет вечное, разве что только зависимо от рутрекера.

Собственно нужно два текстовых файла и парочка иконок.
Запаковываешь всё это в зип-папку, называешь как_нибудь.xpi
и всё, можно устанавливать. Простенький набросок:

скрытый текст
manifest.json

Выделить код

Код:

{
    "manifest_version": 2,
    "name": "Some WebExtensions Name",
    "version": "1.0",
    "description": "Some WebExtensions Description",
    "applications": {
        "gecko": {
            "id": "{1136c9cb-3899-41d3-8a71-61d74140780d}"
        }
    },
    "icons": {
        "32": "webextensions-image32.png"
    },
    "permissions": [
        "tabs",
        "clipboardWrite"
    ],
    "browser_action": {
        "default_icon": "button-image32.png",
        "default_title": "Some Button Title"
    },
    "background": {
        "scripts": ["background.js"]
    }
}

background.js

Выделить код

Код:

var re = /(.+) (\(.+\)) \[(\d{4})[^\]]+\] (.+) (.+) (.+)/;
var query = {active: true, currentWindow: true};

browser.browserAction.onClicked.addListener(async () => {
    var [tab] = await browser.tabs.query(query);
    var {title} = tab;
    re.test(title) && navigator.clipboard.writeText(
        title
            .replace(re, "$1 $2 ($4) ($3)")
            .replace(/ \/ /g, " - ")
    );
});

Отсутствует

 

№1392806-12-2019 22:43:30

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 71.0

Re: Custom Buttons

Dumby
Еще не было случая , что бы ты промахнулся... Ф, что на это скажите? https://forum.mozilla-russia.org/viewto … 88#p775488
Лажа какая-то...?

Отредактировано solombala (06-12-2019 22:44:00)

Отсутствует

 

№1392906-12-2019 23:52:07

Mrakobes666
Участник
 
Группа: Members
Зарегистрирован: 03-03-2011
Сообщений: 159
UA: Firefox 71.0

Re: Custom Buttons

Dumby я сделал это!!!!!!!! Ох чувак, ну ту крут! Я в глубочайшем восторге! Я хочу знать как это сделано!? Столько лет за компом, надо было языки программирования изучать...

Добавлено 07-12-2019 00:18:55
еще хотел замену двоеточию на юникодный символ,

.replace(/ \: /g, " ׃ ")  что то не так сделал, плиз покажи как

Отредактировано Mrakobes666 (07-12-2019 00:18:55)

Отсутствует

 

№1393007-12-2019 09:09:11

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2243
UA: Firefox 52.0

Re: Custom Buttons

solombala пишет

что на это скажите?

Ну, попробовал проверить на 73. Такие наблюдения

скрытый текст
Создал в папке chrome файл proxy.pac следующего содержания:
var FindProxyForURL = () => "DIRECT"; alert(this);

Создал кнопку и расположил её первой на Панели меню.
Установил network.proxy.type - 2
и network.proxy.autoconfig_url - resource://chrome/proxy.pac

Рестарт. В консоли вижу сообщение:
PAC-alert: [object PACResolutionThreadGlobal]

и, следом за ним, второе:
PAC file installed from file:///C:/Users/Admin/AppData/Roaming/-bla-bla-bla-/chrome/proxy.pac

Так что сама концепция, видимо, работает.

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

То есть, полагаю, здесь весьма скользкая тайминг-грань.
Если так уж прямо нужно «заресурсить» папку chrome,
то надёжнее видоизменить код и расположить его в config.js

Выделить код

Код:

//
try {(ios => ios.getProtocolHandler("resource")
    .QueryInterface(Ci.nsIResProtocolHandler)
    .setSubstitution("chrome", ios.newFileURI(
        Cc["@mozilla.org/file/directory_service;1"]
            .getService(Ci.nsIDirectoryService)
            .QueryInterface(Ci.nsIProperties)
            .get("UChrm", Ci.nsIFile)
    ))
)(Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService));}
catch(ex) {Cu.reportError(ex);}

□□□□□□□□□□□ пишет

.replace(/ \: /g, " ׃ ")  что то не так сделал, плиз покажи как

Здесь у тебя идёт замена последовательностей
«пробел — двоеточие — пробел» на последовательность
«пробел — HEBREW PUNCTUATION SOF PASUQ (\u05C3) — пробел».

Код вполне рабочий, обратный экранирующий слэш
в этой регулярке не нужен, но и не мешает.

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

Отсутствует

 

№1393107-12-2019 09:18:43

Mrakobes666
Участник
 
Группа: Members
Зарегистрирован: 03-03-2011
Сообщений: 159
UA: Firefox 71.0

Re: Custom Buttons

Dumby пишет

так что замысел непонятен, а угадатель из меня никакой

прошу прощения, вот:

Рэмбо: Последняя кровь / Rambo: Last Blood (Адриан Грюнберг / Adrian Grunberg) [2019, США, боевик, триллер, приключения, HDRip] Dub (iTunes)

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

Рэмбо׃ Последняя кровь - Rambo׃ Last Blood (Адриан Грюнберг - Adrian Grunberg) (2019)

в этом примере визуально осталось двоеточие, но оно в символах unicode

еще бы ? заменить на .. к примеру ‽

как написать строку реплейс?

Добавлено 07-12-2019 09:43:36
.replace(/: /g, "׃ ")
.replace(/? /g, "‽ ")

не пашет

Отредактировано Mrakobes666 (07-12-2019 09:43:36)

Отсутствует

 

№1393207-12-2019 11:41:27

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 71.0

Re: Custom Buttons

Dumby
то jе дисно тонка гранка... Работают два proxy.pac , как и раньше, но на Socks. И то надо знать какие и саму 71 рихтануть надо в модулях.Блокировки не прокатят без этого!
ydd8g3kn.png

Отсутствует

 

№1393307-12-2019 12:02:10

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2243
UA: Firefox 52.0

Re: Custom Buttons

□□□□□□□□□□□ пишет

не пашет

Так у тебя строка с «Рэмбо» не подходит под твой основной RegExp,
потому что она, в отличие от строки с «Как чокнутые», не заканчивается на « :: RuTracker.org».

То, что в предполагаемой результирующей строке от строки с «Рэмбо»
отсутствует напрашивающийся «(Dub (iTunes))» окончательно запутывает ситуацию.

Замысел остаётся непонятен. Тогда наугад — обе строки подходят под RegExp,
и двоеточие, соответственно, будет успешно реплейситься так, как у тебя написано,
но «(Dub (iTunes))» во второй результирующей строке будет.

Вот такой новый RegExp:
var re = /(.+) (\(.+\)) \[(\d{4})[^\]]+\] (.+ \((.+)\))( .+)?/;

Отсутствует

 

№1393407-12-2019 13:19:45

Mrakobes666
Участник
 
Группа: Members
Зарегистрирован: 03-03-2011
Сообщений: 159
UA: Firefox 71.0

Re: Custom Buttons

Dumby вот досада, я сам забыл, что под регулярку попадает строка из названия вкладки, сам же это придумал, выходит Вы лучше меня знаете мои же запросы)))

совершенно верно, эта строка:

Рэмбо

:

Последняя кровь / Rambo

:

Last Blood (Адриан Грюнберг / Adrian Grunberg) [2019, США, боевик, триллер, приключения, HDRip] Dub (iTunes) :: RuTracker.org

Должна стать этим:

Рэмбо

׃

Последняя кровь - Rambo

׃

Last Blood (Адриан Грюнберг - Adrian Grunberg) (Dub (iTunes)) (2019)

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

признаюсь, что запутал Вас

Выделить код

Код:

var re = /(.+) (\(.+\)) \[(\d{4})[^\]]+\] (.+ \((.+)\))( .+)?/;
var query = {active: true, currentWindow: true};

browser.browserAction.onClicked.addListener(async () => {
    var [tab] = await browser.tabs.query(query);
    var {title} = tab;
    re.test(title) && navigator.clipboard.writeText(
        title
            .replace(re, "$1 $2 ($4) ($3)")
            .replace(/ \/ /g, " - ")
    );
});

этот код работает правильно, информацию об аудиодороге (Dub (iTunes)) вставляет в нужное место

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

: и ?

на

׃  и ‽

соответственно

чтобы было

Куда ты пропала, Бернадетт

?

/ Where'd You Go, Bernadette (Ричард Линклейтер / Richard Linklater) [2019, США, драма, комедия, детектив, BDRip] Dub (iTunes) :: RuTracker.org

стало

Куда ты пропала, Бернадетт

- Where'd You Go, Bernadette (Ричард Линклейтер - Richard Linklater) (Dub (iTunes)) (2019)

Отредактировано Mrakobes666 (07-12-2019 13:23:26)

Отсутствует

 

№1393507-12-2019 13:27:37

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 71.0

Re: Custom Buttons

А куда подевался князь-анархист? Вроде он спец по about:addons . Теперь кнопка не работает "//Добавление на вкладке дополнения в меню расширений дополнительных пунктов" . Там в mozapps опять что-то рихтанули...
Да, а как независимо продублировать кнопку с одним параметром? Типа:

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

Выделить код

Код:

ps => {
    var s = "network.proxy.type";

    this._handleClick = () => ps.setIntPref(s, ps.getIntPref(s, 0) ? 0 : 1);

    var toggleImage = val => {
        this.icon.src = (val = ps.getIntPref(s, 1))
            ? this.image
            : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAADaElEQVR42pWTD0zUZRjHP7+fd3CAHhGFZInIQJ1/IKLWzMqh6eWIgQP/EC2RmXOuP+JMobCl2y3L2i3WIf5ZWI0xZWuizn8XmDP5oxxXrT9LvQYmIkOJDgWBH/frubu4EVubPduz3/s+7/v7vM/7fZ5X4f/bY+IPiLvFB0aDyuigksyXVJTI2wz0hTLB60UPrsk4SOlnWDcTavYw+H0JZ3/5F6ieV1an6199JsNo8Xvio3/q47JR/okZqXM3bX4hf7uN5nNjQRsFZKe8Ga72QPJkiDSBORTCQwKIIU1SE8alDsiZA+fbrmxd+/rbu2msDYK+JrdguV5TQW51KO29I2TMVHnUDHGRokaYD6DTP+T7KjjcGpZEI01/uLaUlhR/QtOZIOgIKwqy9MN7WPS5CVenTs5shXmxkBAFMRNBlW13BsUFdvKyRv7jBlo6Wt/ZtKX4AxocY0GFArITZTV19nbrj5ijFebI9eKlOA+Gg8kgymmB652+qvGRxUDvPVfphqISKxdOB0FHWVmYqR+yo5Sa6mjTFxMfqJhPI7MpkJHm9cMGejxa2IcZBqLDne+vKyrewflvxmu0xwf6mKYRCwlqvLRKGAbFgOpn9jHEXwzSwPXhlXmrjCTHtpSVWLe9xZn68RlVCMgoIOZLz8UQzkRCBGb0g7q5K7MJEjVqD2elGegfbq91nLBmU7M/CGqgYNN8vdKG8wYiIkyZFNDF3426L6azrwUWxCnkp+iim0LNT2C70HadvrKplNn8oE9ZuvjN36oq6e6P5sqt21KdHqLCIngmLk60CKHiok5lK2x7TqHgicABey/B1lO4PTevFeF4N/gM9CfLFxITobA2rYvXjqSTMWMdK+am+qv18mHavb1MW5IGB3NgeEROb/RKRmojHRzj8rdBkJiUiMFMkmYe/eLQbl5NzfRHu+5A7C6q+Zk8UwrssgQ6/7t2L+/VKVJl5Xf+vDYWFCF+186LqRt/PJjHvMmJMvfwpcvoXnNggYuuabnMAktS4Il0eDR21KvN3FCddP4wFvRfpj7L1OKdLLSmm2dAXjKsEZ2cUoA3jitn5dJ7abXfD4hEop4qZ1nVkofmJrEvC5bPhtpfIbsKGxdbNuMovC+Qz6YwaVU12dufT3l6OosSFBF6aD0nnPtx7ZTlc38DDl9EFHoV7LkAAAAASUVORK5CYII=";             
        this.tooltipText = val ? 'Все сайты через Socks5' : 'Без прокси'; 
    }
    toggleImage();
    ps.addObserver(s, toggleImage, false);
    addDestructor(() => ps.removeObserver(s, toggleImage));
})(Services.prefs);

this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() };


А другая с этим   this._handleClick = () => ps.setIntPref(s, ps.getIntPref(s, 0) ? 0 : 1);

Отредактировано solombala (07-12-2019 13:51:31)

Отсутствует

 

№1393607-12-2019 14:17:40

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2243
UA: Firefox 52.0

Re: Custom Buttons

□□□□□□□□□□□ пишет

теперь бы дополнить строкой по замене двух запрещенных символов : и ? на ׃  и ‽ соответственно

Ну, я сейчас дополнил батарею реплейсов, вот так:

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

Выделить код

Код:

var re = /(.+) (\(.+\)) \[(\d{4})[^\]]+\] (.+ \((.+)\))( .+)?/;
var query = {active: true, currentWindow: true};

browser.browserAction.onClicked.addListener(async () => {
    var [tab] = await browser.tabs.query(query);
    var {title} = tab;
    re.test(title) && navigator.clipboard.writeText(
        title
            .replace(re, "$1 $2 ($4) ($3)")
            .replace(/ \/ /g, " - ")

            .replace(/: /g, "׃ ")
            .replace(/\? /g, "‽ ")
    );
});


и всё работает как и ожидалось.
Проверял на этих двух адресах:
скрытый текст

Выделить код

Код:

data:text/html;charset=utf-8,<title>Рэмбо: Последняя кровь / Rambo: Last Blood (Адриан Грюнберг / Adrian Grunberg) [2019, США, боевик, триллер, приключения, HDRip] Dub (iTunes) :: RuTracker.org</title>

data:text/html;charset=utf-8,<title>Куда ты пропала, Бернадетт? / Where'd You Go, Bernadette (Ричард Линклейтер / Richard Linklater) [2019, США, драма, комедия, детектив, BDRip] Dub (iTunes) :: RuTracker.org</title>

solombala пишет

А другая с этим   this._handleClick = () => ps.setIntPref(s, ps.getIntPref(s, 0) ? 0 : 1);

Что значит «А»? Строка символ-в-символ точно такая же,
как и в коде под спойлером, не считая начальных пробелов.

Отсутствует

 

№1393707-12-2019 16:03:46

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 71.0

Re: Custom Buttons

Dumby
Извиняюсь  this._handleClick = () => ps.setIntPref(s, ps.getIntPref(s, 0) ? 0 : 2);
ручная настройка ...

Отсутствует

 

№1393807-12-2019 16:44:05

Mrakobes666
Участник
 
Группа: Members
Зарегистрирован: 03-03-2011
Сообщений: 159
UA: Firefox 71.0

Re: Custom Buttons

Dumby все работает

вот расширение без подписи, иконки есть https://yadi.sk/d/ljDkR5awNv5OSQ

Отсутствует

 

№1393907-12-2019 23:32:07

func4ptch4
Участник
 
Группа: Members
Зарегистрирован: 03-05-2018
Сообщений: 220
UA: Firefox 71.0

Re: Custom Buttons

solombala, у меня работает, и путь примерно такой resource://FF/proxy.pac.
Правда в 73 не знаю, может и не пашет.

Задать путь к файлу в папке chrome

Выделить код

Код:

(()=>{ //Задать путь к файлу в папке chrome. .... - forum.mozilla-russia.org/viewtopic.php?pid=775488#p775488||775536#p775536
(({io,dirsvc,prefs})=>{
    var substitution="FF",dir="CurWorkD";
    var rph=io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler);
    addDestructor(reason=>reason[5]=="e"&&rph.hasSubstitution(substitution)&&rph.setSubstitution(substitution,null));
    if(rph.hasSubstitution(substitution))return;

    rph.setSubstitution(substitution,io.newFileURI(dirsvc.get(dir,Ci.nsIFile)));
})(Services);
})();


Dumby, нельзя как-то путь укоротить? примерно так resource://proxy.pac? и еще пути которые в .css, chrome:// не подойдут? если брать с папки chrome. Еще вопрос -_- обертку типа этого (()=>{ })(); можно убрать? так то я держу с другими кодами там их много.
Но мне показалось лишним так как он итак вроде завернут, или оставить?

Отредактировано func4ptch4 (08-12-2019 00:24:20)

Отсутствует

 

№1394008-12-2019 09:15:05

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2243
UA: Firefox 52.0

Re: Custom Buttons

solombala пишет

Извиняюсь  this._handleClick = () => ps.setIntPref(s, ps.getIntPref(s, 0) ? 0 : 2);
ручная настройка ...

«ручная настройка» это 1
Хотелку объяснять, я так понимаю, не будешь.
Ну вот, например, нечто псевдоуниверсальное.

Задаёшь названия и иконки для всех вариантов,
затем правишь var config = […, …];
Два значения, между которыми переключаться.
Порядок важен: первое будет использоваться как то,
на которое пойдёт переключение, если текущее состояние
настройки какое-то другое третье (не первое и не второе).

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

Выделить код

Код:

(data => {
    var config = [0, 1];

    var pref = "network.proxy.type";
    var map = Object.create(null);
    for(var key in data) map[key[0]] = [key.slice(2), data[key]];
    var format = (now, to) => `Переключить на: ${map[to][0]}\nСейчас: ${map[now][0]}`;
    var to = val => val == config[0] ? config[1] : config[0];
    var getVal = () => {
        var val = Services.prefs.getIntPref(pref);
        return val in map ? val : 0;
    }
    var setState = () => {
        var val = getVal();
        this.icon.src = map[val][1];
        this.tooltipText = format(val, to(val));
    }
    this._handleClick = () => Services.prefs.setIntPref(pref, to(getVal()));
    setState();
    Services.prefs.addObserver(pref, setState);
    addDestructor(() => Services.prefs.removeObserver(pref, setState));
})({
    "0_direct": "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==",
    "1_manual": "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==",
    "2_pac": "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==",
    "4_autodetect": "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==",
    "5_system": "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ=="
});

func4ptch4 пишет

нельзя как-то путь укоротить? примерно так resource://proxy.pac?

Можно, если substitution будет "proxy.pac"
и в io.newFileURI() передать, собственно, сам файл, а не папку.

и еще пути которые в .css, chrome:// не подойдут?

Не понял.

Еще вопрос -_- обертку типа этого (()=>{ })(); можно убрать? так то я держу с другими кодами там их много.
Но мне показалось лишним так как он итак вроде завернут, или оставить?

Правильно показалось, можешь убрать.
И prefs (вместе с запятой перед ним) можешь удалить,
нигде в коде не используется.

Отсутствует

 

№1394108-12-2019 23:06:36

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 71.0

Re: Custom Buttons

Dumby
Заделал и это радует. прокси паки разные и их много. Папка в профиле , но не chrome , а просто папка Proxy///
Плюс используется network.proxy.type -1 , ну , тут сложнее , только один прокси Socks / Хотя, тоже можно кнопу сделать на разные , как с network.proxy.type -2
Да, но в 71 надо рихтануть в модулях ProxyScriptContext.jsm !

Отсутствует

 

№1394209-12-2019 01:11:04

leex
Участник
 
Группа: Members
Зарегистрирован: 24-03-2011
Сообщений: 322
UA: Firefox 71.0

Re: Custom Buttons

Garalf пишет

kokoss
Вот тебе новое CB для 71 и не парься)

Сегодня обновился с 70 до 71 и CВ упал.

Скачал по ссылке из цитируемого поста, установил. СВ в дополнениях есть, но не работает.
Полистал форум по 71, СВ 0.0.7.0.0.8 вроде должен работать в этой 71 версии, но у меня не пашет.
Как оживить СВ?

Отредактировано leex (09-12-2019 01:14:40)

Отсутствует

 

№1394309-12-2019 01:28:41

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1737
UA: Firefox 52.0

Re: Custom Buttons

leex
У меня в [firefox] 71 работает эта версия CB


а та даже не устанавливается.


Win7

Отсутствует

 

№1394409-12-2019 03:20:04

leex
Участник
 
Группа: Members
Зарегистрирован: 24-03-2011
Сообщений: 322
UA: Firefox 71.0

Re: Custom Buttons

У меня не работает ни та, ни эта.
Но в дополнениях СВ есть
Может быть в конфиге что-то поменять?
На этом конфиге все прекрасно работало вплоть до 70 версии

Отредактировано leex (09-12-2019 03:20:58)

Отсутствует

 

№1394509-12-2019 12:28:59

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 71.0

Re: Custom Buttons

Dumby
Нет новой СВ ? В смысле, в 71 mozapps влепил от 70 , так ударило по СВ - не показывает настройки , может рихтануть что в Js или CSS самой СВ ?

Отсутствует

 

№1394609-12-2019 14:41:14

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1737
UA: Firefox 52.0

Re: Custom Buttons

leex пишет

У меня не работает ни та, ни эта.
Но в дополнениях СВ есть
Может быть в конфиге что-то поменять?
На этом конфиге все прекрасно работало вплоть до 70 версии

Тогда эту версию:


и для установки использую этот способ: https://forum.mozilla-russia.org/viewtopic.php?id=70326


Win7

Отсутствует

 

№1394709-12-2019 14:49:14

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2243
UA: Firefox 52.0

Re: Custom Buttons

leex пишет

установил. СВ в дополнениях есть, но не работает

А, при закрытом Firefox, папку startupCache
из Локального каталога профиля удалил?

solombala пишет

в 71 mozapps влепил от 70 , так ударило по СВ - не показывает настройки , может рихтануть что в Js или CSS самой СВ ?

Да уж, на такие эскапады, определённо, не рассчитано.

скрытый текст
Ну попробуй. Три трёхстрочья. В каждом:

первая строка — путь до файла относительно CB,
вторая строка — то, что нужно найти,
третья строка — то, чем нужно заменить найденное.

Если получится, этот пересобранный CB
в цепи версий, разумеется, не участвует.

Выделить код

Код:

\bootstrap.js
(this["about:addons"] = appVersion > 70
(this["about:addons"] = appVersion > 71


\chrome\custombuttons\content\addons\addons-prefs.js
var features = "chrome,titlebar,toolbar,centerscreen";
var features = "chrome,titlebar,toolbar,centerscreen,noopener";


\components\CustomButtonsService.js
openEditor: function (opener, uri, param) {
openEditor: function (opener, uri, param) { opener = opener && opener.windowRoot.ownerGlobal;

Отсутствует

 

№1394809-12-2019 15:37:21

leex
Участник
 
Группа: Members
Зарегистрирован: 24-03-2011
Сообщений: 322
UA: Firefox 71.0

Re: Custom Buttons

kokoss пишет

Тогда эту версию:

И она не работает

и для установки использую этот способ.

Ну да, так и есть, в конфмгах дописаны данные из этих постов еще с 69 версии

Dumby пишет

А, при закрытом Firefox, папку startupCache
из Локального каталога профиля удалил?

А у меня вообще нет такой папки в профиле

Отредактировано leex (09-12-2019 15:38:00)

Отсутствует

 

№1394909-12-2019 15:55:46

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2243
UA: Firefox 52.0

Re: Custom Buttons

leex пишет

А у меня вообще нет такой папки в профиле

Ещё раз: имеется в виду «Локальный каталог», а не «Корневой каталог».
Открой вкладку с адресом about:profiles

Отсутствует

 

№1395009-12-2019 16:46:49

leex
Участник
 
Группа: Members
Зарегистрирован: 24-03-2011
Сообщений: 322
UA: Firefox 71.0

Re: Custom Buttons

Готово! Работает.
Большое спасибо, Dumby!

Отсутствует

 

Board footer

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