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

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

Сustom Buttons » Custom Buttons » 05-10-2019 21:38:53

func4ptch4 пишет:

вопрос насчет кода https://forum.mozilla-russia.org/viewto … 42#p773842 что он точно делает?

Ну, почти правильно сказал, только не long click, а long press.
Если добавить triggeringPrincipal, то даже будет работать, но криво:
при открытии в активной вкладке залипает курсор.

И, такое использование frame script'а, когда в каждом разворачивается
новый отдельный обработчик считается не по-перформансу.
Плюс, unload не учитывается, хотя, может и не надо.
Вобщем, код неудачный, лучше избавься от него.

P.S. У меня в предыдущем посте return потерялся. Добавил.

Сustom Buttons » Custom Buttons » 05-10-2019 15:36:24

func4ptch4 пишет:

удобнее конечно если при выходе очищает

Может так

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

Выделить код

Код:

((g, id, {history}) => addDestructor(r => id in g && g[id].destroy(r)) || id in g || ({
    clearOnRestart: false,
    su: Services.startup,
    init() {
        g.AsyncShutdown.quitApplicationGranted.addBlocker(
            id, this.condition = this.condition.bind(g[id] = this)
        );
    },
    destroy(reason) {
        if (reason[5] != "e") return;
        delete g[id];
        g.AsyncShutdown.quitApplicationGranted.removeBlocker(this.condition);
    },
    condition() {
        return this.su.restarting && !this.clearOnRestart || history.removeVisitsByFilter({
            transition: history.TRANSITIONS.DOWNLOAD
        });
    }
}).init())(
    Cu.import("resource://gre/modules/AsyncShutdown.jsm", {}),
    "Custom Buttons button: Clear downloads history.", PlacesUtils
);

CSS-стили » Настройка внешнего вида Firefox в userChrome.css » 25-09-2019 22:48:17

ofizer пишет:

У sandro79 и мой стиль работает.

Не, ты не понял, sandro79, видимо, просто так прикалывается.
Влепил втихомолку пробел после addon-name (перед [title]). Довольно остроумно.

Сustom Buttons » Custom Buttons » 24-09-2019 15:27:55

Stkvsky пишет:

Dumby Вы бы не могли пожалуйста, починить эту кнопку для 68 версии, если можно.
https://forum.mozilla-russia.org/viewtopic.php?id=59458

У меня есть похожая, может подойдёт
[spoiler][code]((popup, {lastChild} = popup, pref = "CB.bookmarkFolderGuidForSaving") =>
addDestructor(reason => reason == "delete" && Services.prefs.clearUserPref(pref)) +
addEventListener("popupshowing", {
    index: 0, // 0 - первой, PlacesUtils.bookmarks.DEFAULT_INDEX - последней
    width: 500,
    height: 640,
    nodePosition: .35,
    handleEvent(e) {
        if (this.shouldHide) return;
        var menuitem = document.createElementNS(xulns, "menuitem");
        menuitem.id = "context-addBookmark";
        menuitem.className = "menuitem-iconic";
        menuitem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACD0lEQVR42oWTXUhTYRiAP89qziAYepG6TfAiyV1JsFojMJrVjf3dDOsmMoOwCwnSXLSJXgWDqAWBF7aGoFGGV0EUrL9FERoh1bQsqeiXfrzoB0N6es8528ncaC88fOfw

Сustom Buttons » Custom Buttons » 21-09-2019 12:15:58

Andrey_Krropotkin пишет:

если я нажимаю на штатную кнопку "добавить страницу в закладки", то сохраняется без нумерации

Что мешает посмотреть как это делает браузер?
Вот, цитата из кода PlacesCommandHook.bookmarkPage()

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

Выделить код

Код:

async bookmarkPage() {
    let browser = gBrowser.selectedBrowser;
    let url = new URL(browser.currentURI.spec);
    .....
      let isErrorPage = false;
      if (browser.documentURI) {
        isErrorPage = /^about:(neterror|certerror|blocked)/.test(
          browser.documentURI.spec
        );
      }

      try {
        if (isErrorPage) {
          let entry = await PlacesUtils.history.fetch(browser.currentURI);
          if (entry) {
            info.title = entry.title;
          }
        } else {
          info.title = browser.contentTitle;
        }
        info.title = info.title || url.href;


А можно, наверно, наоборот,
иначе устанавливать название вместе с нумерацией
[spoiler]

Выделить код

Код:

var tab = gBrowser.selectedTab;

tab

Сustom Buttons » Custom Buttons » 20-09-2019 14:06:55

Andrey_Krropotkin пишет:

накидать новую для многопроцессорного

Вот причём здесь многопроцессность
[spoiler][code](popup => addEventListener("popupshowing", {

    openFoldersInRightPane: false,

    handleEvent() {
        if (this.shouldHide) return;
        var menuitem = document.createXULElement("menuitem");
        menuitem.setAttribute("label", "Открыть в библиотеке");
        menuitem.setAttribute("oncommand", "openInLibrary();");
        menuitem.setAttribute("id", "placesContext_open:library");
        popup.querySelector("#placesContext_openSeparator").before(menuitem);
        addDestructor(() => menuitem.remove());
        this.handleEvent = e => e.target == popup && (
            menuitem.hidden = menuitem.disabled = this.shouldHide
        );
        menuitem.openInLibrary = () => {
            var win = Services.wm.getMostRecentWindow("Places:Organizer");
            if (win) return win.focus(this.onLibrary(win));
            win = openDialog(
                "ch

Сustom Buttons » Custom Buttons » 19-09-2019 10:16:51

egorsemenov06 пишет:

что то не работает

69
[spoiler][code](sss => {
    var pref = `CB.${_id.slice(20)}.setStyleForPage`;
    var url = "data:text/css," + encodeURIComponent(this.Help);
    var args = [Services.io.newURI(url), sss.AGENT_SHEET];
    var reg = add => {
        var has = sss.sheetRegistered(...args);
        if (add) has || sss.loadAndRegisterSheet(...args);
        else has && sss.unregisterSheet(...args);
    }
    var setState = () => {
        var state = Services.prefs.getBoolPref(pref, false);
        this.icon.style.backgroundColor = state ? "#131d24" : "#ffeeaa";
        reg(state);
    }
    setState();
    this._handleClick = () => Services.prefs.setBoolPref(
        pref, !Services.prefs.getBoolPref(pref, false)
    );
    Services.prefs.addObserver(pref, setState, false);
    addDestructor(reason => {
        Services.prefs.removeObserver(pref, setState);
        reason[5] == "e" && reg();
    });
})(
    Cc["@mozilla.org/content/style-sheet-service;1"

Сustom Buttons » [CB]Session Bookmarks » 18-09-2019 18:16:05

Infocatcher пишет:

Если вдруг кто-то захочет поиграться

Да, поигрался на Firefox 69. И так, и сяк, глухо вообще.
В результате решил попробовать по координатам, вроде работает.
Добавил в конец кода, чтобы мне удобней было прокручивать.
[spoiler][code]this.bookmarks.fixer = ({
    bm: this.bookmarks,
    init: function() {
        addEventListener("dragstart", this, false, gBrowser.tabs[0].flattenedTreeParentNode);
        return this;
    },
    getRect: function(node) {
        var x = node.screenX, y = node.screenY;
        return [x, x + node.clientWidth, y, y + node.clientHeight];
    },
    pointInRect: function(x, y, rect) {
        var [lx, rx, ty, by] = rect;
        return x >= lx && x <= rx && y >= ty && y <= by;
    },
    handleEvent: function(e) {
        this.btnRect = this.getRect(this.bm.button);
    },
    fix: function(e) {
        var x = e.screenX, y = e.screenY;
        var res = this.pointInRect(x, y, this.btnRect);
        if(res)
            res =

Сustom Buttons » Custom Buttons » 18-09-2019 12:19:05

А я не пользуюсь, ни поисковыми плагинами, ни WebExtensions для них.
Но тоже, ради интереса, попробовал — нормально установилось, и в 69, и в 71.
[spoiler][code]Services.search.addEngine("data:text/xml," + encodeURIComponent(`

    <SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
        <ShortName>seasonvar.ru</ShortName>
        <Description>Сериалы ТУТ! Сериалы онлайн смотреть бесплатно. Смотреть онлайн.</Description>
        <InputEncoding>UTF-8</InputEncoding>
        <Image width="16" height="16">data:image/x-icon;base64,AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEnmAAAAAAAKS+gGCUrnIwhJ5k8HSOVlCEnmeQlK54QISeaHCEnmiQhJ5okHSOWIB0jlhwhJ5oYISeaGCEnmhghJ5ogHSOVfAAAAAARF4gAJSudHB0jlXglK5w8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlK5wAQUe4ACEnmbghJ5usISeb/CEnm/AlK5/wJSuf/CUrn/glK5/4JSuf/CUrn/wpL6P8KS+j+CEnm/AlK5+gISebhCUrn+AhJ5sYAAAAACEnmuAhJ5v8ISeb/CEnmMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhJ5

Сustom Buttons » Custom Buttons » 16-09-2019 19:06:02

Andrey_Krropotkin пишет:

появились однотипные ошибки на 69

Ого, вижу. Получается это и туда засунули что ли.
chrome:// адреса должны работать, destruct() здесь, наверно, не нужен,
оно, вроде, само рассасывается.

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

Выделить код

Код:

var url = "data:application/vnd.mozilla.xul+xml;text/plain," + encodeURIComponent(intf(drives, count));
if (parseInt(Services.appinfo.platformVersion) >= 69 && Services.appinfo.browserTabsRemoteAutostart) {
    var chromeURL = `chrome://custombuttons/content/cbdialog${Date.now()}.xul`;
    Cc["@mozilla.org/addons/addon-manager-startup;1"].getService(Ci.amIAddonManagerStartup).registerChrome(
        Services.io.newFileURI(Services.dirsvc.get("ProfD", Ci.nsIFile)), [["override", chromeURL, url]]
    );
    url = chromeURL;
}


А в боковой панели, ну что ж, пусть будет электролизисно.
[spoiler]

Выделить код

Код:

    //var load = async url => {
    var e10s

Сustom Buttons » Custom Buttons » 16-09-2019 10:07:52

Stkvsky пишет:

вы бы не могли пожалуйста, сделать такую кнопку

Не знаю, описание ведь не предоставлено.
«Удаление вкладки из закладок» это какая-то конкретная процедура, или что?
И не указано для какой версии Firefox.

solombala пишет:

Какую версию СВ надо в 68?

Лучше 0.0.7.0.0.6, потому что в предыдущей версии обнаружился косяк с кнопками [type="menu"].
В распакованом виде было не видно, а в запакованом — увы.

Насчёт внешнего редактора, без подробного STR я не смогу понять о чём речь.
И, заодно, про button.dialog-button и «Ни hover ни active - не работают в 69...?»:
у меня работает, если как AGENT_SHEET, так что можешь попробовать
разместить стиль там же, где другие подобные, типа как для scrollbar'ов.

Сustom Buttons » Custom Buttons » 14-09-2019 12:43:55

Andrey_Krropotkin пишет:

патч Вы добавили в новую версию

Да, вроде добавлял, вернее оставил изменение.

без патча не хочет работать

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

Можно при закрытом Firefox удалить содержимое этой папки вручную.
(она находится в локальном каталоге профиля)
А можно, повторюсь, перезапустить кодом, например таким:
Services.appinfo.invalidateCachesOnRestart();
BrowserUtils.restartApplication();

Надеюсь дело в этом.

у Вас кнопка - консоль браузера прежняя как для 68?

Ой, не помню уже. Давай просто скину из 71 как есть
[spoiler][code]({
    title: "Консоль браузера",
    url: "chrome://devtools/content/webconsole/index.html",
    icon: "chrome://devtools/skin/images/tool-webconsole.svg",
    init() {
   

Сustom Buttons » [CB]Attributes Inspector (для разработчиков) » 14-09-2019 12:42:52

Andrey_Krropotkin пишет:

В какой из этих двух кнопках где-то неисправность не знаю.

В коде Source Editor'а поиск:
isBrowserWindow: function(window) {

Как только увидишь — всё сразу станет ясно.

Сustom Buttons » Custom Buttons » 13-09-2019 11:56:20

solombala
К сожалению, ничем помочь не могу. Про контентские дела
меня спрашивать бесполезно, и если бы мог написать что-нибудь
умнее чем «паддинг же, вот и падает», то написал бы сразу.

А вообще, для десктопа, однопроцессный Firefox считается у них
как «неподдерживающаяся конфигурация», со всеми вытекающими.
Простейший пример: выключаем e10s, вызываем ChromeUtils.requestProcInfo();
Получаем краш. Причём изначально метод работал и в однопроцессном.
И дальше, видимо, будет только хуже.

Сustom Buttons » Custom Buttons » 11-09-2019 18:57:03

func4ptch4 пишет:

как сделать чтобы он один раз сделал назад?

Да как обычно

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

Выделить код

Код:

var file = Services.dirsvc.get("CurWorkD", Ci.nsIFile).parent;
["gBrave 0.67", "brave-portable.exe"].forEach(file.append);

alert(file.path);


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

Выделить код

Код:

var uri = Services.io.newFileURI(Services.dirsvc.get("CurWorkD", Ci.nsIFile));
uri = Services.io.newURI("../gBrave 0.67/brave-portable.exe", null, uri);
var {file} = uri.QueryInterface(Ci.nsIFileURL);

alert(file.path);

Сustom Buttons » Custom Buttons » 06-09-2019 16:01:03

func4ptch4 пишет:

И вопрос, написано "Fix menu auto-opening in Firefox 69+" то есть там уже она есть? Почему тогда не открывалось автоматом?..

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

func4ptch4 пишет:

при клике все норм при автопопапе криво вниз

Это на вертикальном тулбаре что ли?
Можно попробовать заменить в автопопапе 'after_start'
на DropElt.closest("toolbar[orient=vertical]") ? "end_before" : "after_start"

Сustom Buttons » Custom Buttons » 05-09-2019 19:11:41

func4ptch4 пишет:

запутался

menuPopup там определяется так:

var menuPopup=self.appendChild(document.createXULElement("menupopup"));

Но appendChild возвращает добавленное, а prepend нет,
поэтому разбиваем на две части, вот так:

var menuPopup = document.createXULElement("menupopup");
self.prepend(menuPopup);

Сustom Buttons » Custom Buttons » 05-09-2019 15:03:23

func4ptch4 пишет:

document.createXULElement || document.createElementNS(xulns, ... оба работают вроде, а в чем разница?

Метод createElementNS был с незапамятных времён,
а метод createXULElement значительно моложе, Firefox 63+

func4ptch4 пишет:

А вот в кнопке "Insert special symbol" рабоает autopopup, но там какойто дополнительный код:
"this.prepend(popup);})(document.createElementNS(xulns,"menupopup"));" вместо "})(this.appendChild(document.createElement("menupopup")));"

Ничего дополнительного. В обоих случаях создаётся menupopup
и добавляется к кнопке как дочерний.

Но prepend ближе к XBL варианту, menupopup добавится как первый,
как это было бы до втягивания <toolbarbutton>'а в кустомэлементщину.
Наверно поэтому autopopup воспринимает такую кнопку лучше.

Сustom Buttons » Custom Buttons » 04-09-2019 13:04:33

egorsemenov06 пишет:

помочь еще и с этой кнопкой

Это типа «Активация таба мышенаведением»?
У меня нашлась какая-то из неиспользуемых, может подойдёт

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

Выделить код

Код:

(trg => {
    var id = 0, cx = 0, tab = null;
    var remX = () => cx = MousePosTracker._x;
    addEventListener("TabOpen", remX, false, trg);
    addEventListener("TabClose", remX, false, trg);
    var onTimeout = (t, x) => {
        if (t.matches(":hover") && Math.abs(x - t.screenX) < 50)
            gBrowser.selectedTab = t;
        tab = null;
    }
    addEventListener("mouseover", e => {
        if (cx == MousePosTracker._x) return;
        cx = 0;
        var t = e.target.closest("tab:not([selected])");
        if (t && t != tab)
            clearTimeout(id),
            id = setTimeout(onTimeout, 850, tab = t, t.screenX);
    }, false, trg);
})(gBrowser.tabs[0].flattenedTreeParentNode || 1);


solombala пишет:

остальные исправил , но эти

Можно попробовать в первой

заменить e.target в д

Сustom Buttons » Custom Buttons » 03-09-2019 01:21:33

egorsemenov06 пишет:

никак не разберусь с остальными кнопками

Ну вот смотри: в обоих кнопках, второй и третьей, используется выражение вида
var icon = self.ownerDocument.getAnonymousElementByAttribute(self, "class", "toolbarbutton-icon");

можешь просто заменить его на
var {icon} = self;

Если хочется чего-то более академичного и обратно совместимого, тогда так.
В третьей кнопке, в последней строке, настоятельно рекомендуется заменить
gPrefService на Services.prefs

func4ptch4 пишет:

половина кнопок слетело, в основном с popup

А popup, небось, создаётся так: document.createElement("menupopup")
Сто раз уже обсуждалось. Ссылка для медитации.

Сustom Buttons » Custom Buttons » 02-09-2019 20:31:53

egorsemenov06 пишет:

69.0

Первую попробую, если OK — остальные сам
[spoiler][code](ps => {
    var s = "extensions.long_left_click.timeContent";

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

    var toggleImage = val => {
        this.icon.src = (val = ps.getIntPref(s, 0))
            ? this.image
            : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAACAElEQVQ4jaWRv2tTcRTFP0kq/hr6Y3kggRKKVERwsLOudnBxVURHcVNcXOzgHyChgiAExE0CQtFUh4RSsJJUTfBp0ZimrWJMXkjCe0jee03McQjpj4dawbPd8z3n3Pu9F/4TkT3er87Ozi5PTU3NrK+vh23bXvjX4BulUkmSlMlklMlklE6nlcvlZBjG473M5+fn5zVAPB5Xu92WJHU6HSUSCQF3/xagtbW1rYBsNqtyuSxJsixLpmlqbGxMA3E4YLYA8vk8vu9Tr1s8f5FjPBajXq9TqVQwTZNmswlw87fdAUWjUS0tLalQKEh1pFfoy9dvmpyc1MTEhAa6PwYAsiyr/4cyalffqNFoKJVK7TQLGAGIARoeHlY0GlUkEtFOXEhJKy1p1enXj+bea6XV5yJn5hQGvgMnbds+NTo6SjKZ3Bqn2+1y8Ths2FBs9rlnC5/ZsPvc04fnCO2c3zAMVatVAHzfx3Vd4sURAM7GwDgEr1d9Pnj7SVdgsRq4Qq1WuzYwO46D4zgsVmCxArdewvhhsN7luP22b

Сustom Buttons » Custom Buttons » 02-09-2019 16:08:52

«Merge Date»

custom_buttons-0.0.7.0.0.6-fx-paxmod.xpi
custom_buttons-0.0.7.0.0.6-fx-bootstrap.xpi

Конфигурацию, хотелось бы думать, не сломали.
Которая здесь.

Сustom Buttons » [CB]Attributes Inspector (для разработчиков) » 27-08-2019 18:44:46

Andrey_Krropotkin пишет:

(может только у меня - не знаю)

Подтвержаю, у меня на Win7 выделенное там тоже не подсвечивается фоном.
И, я тебе в начало метода initWindow() добавить посоветовал,
нет, в конец, конечно же.

Выделение можно стилем задать, а кодом — ничего лучше не придумал,
тоже в конец метода initWindow()
[spoiler][code]            if(this.platformVersion >= 68) (function(events, win) {
                var listener = function(e) {
                    if(e.type == "unload") return destroy();
                    var sheets = win.document.styleSheets;
                    for(var ind = sheets.length - 1; ind; ind--) {
                        var sheet = sheets.item(ind);
                        if(sheet.href != "resource://devtools/client/themes/common.css")
                            continue;
                        destroy();
                        for(let ind = 0, len = sheet.cssRules.length; ind < len; ind++) {
                            var rule = sheet.cssRules.

Сustom Buttons » [CB]Attributes Inspector (для разработчиков) » 26-08-2019 21:44:51

Да-да, не пользуюсь, и Source Editor'ом тоже.
Не потому, что нехорош, а просто не пользуюсь.

Открытие внешнего редактора показалось мне
настолько простым, что думал Андрей подкумекает
это если не в тот же день, то на следующий.
Я просто дописал в начало метода initWindow()

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

Выделить код

Код:

            window.edit_button = function edit_button() {
                var panel = document.getElementById(
                    "custombuttons-editbutton-tabbox"
                ).tabpanels.selectedPanel;
                if (/sourceEditor-(.+)/.test(panel.id))
                    panel = document.getElementById(RegExp.$1);
                if (panel.localName == "cbeditor")
                    window.edittarget(panel);
            }


И, ещё «See also» нарисовался:
Bug 1566457 - Loaders summer cleanup
То есть, предположительно, так
[spoiler]

Выделить код

Код:

                //var require = Components.utils.import(loader, {}).devtools

Сustom Buttons » Custom Buttons » 20-08-2019 22:35:07

Andrey_Krropotkin пишет:

Dumby Вы не могли бы посмотреть старую кнопку и подраввить для 68 и вдобавок для многопроцессорного? Или хотя бы показать направление как ее исправить?

Она такая замудрая, не хочется связываться.
А направление, тоже могу не угадать, но попробуй
[spoiler][code]addEventListener("popupshowing", {
    imgZoom: 170,   // на сколько увеличить изображение из меню
    scrollZoom: 20, // на сколько увеличивать/уменьшать колесиком мыши
    scrollTop: 1,   // или -1, переключение направление прокрутки для увеличение колёсиком

    receiveMessage(msg) {
        var container = document.documentElement.appendChild(
            document.createElementNS(xhtmlns, "div")
        );
        addDestructor(() => container.remove());
        var image = container.appendChild(document.createXULElement("image"));
        image.setAttribute("validate", "never");

        var st = container.style;
   

Board footer

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