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

Mozilla Россия — свежие версии программ Mozilla, а также масса полезной информации по каждому продукту.

№917604-09-2020 16:01:27

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1418
UA: Firefox 78.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.

А вот что я писал пока ваш ответ не увидел.

а что непонятного очевидно же что *|* работает всегда неважно какое указано пространство имен.

Это как бы писалось к тому что ниже и ни какого отношения к тому что выше не имеет.
   

нет это не может работать убедитесь сами если оставить только это в userChrome.css

Перепроверил. Влияет вот этот код перед пространствами:

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

Выделить код

Код:

@-moz-document url("chrome://browser/content/browser.x") {
    #tabbrowser-tabpanels, tabbrowser#content, .browserContainer > .browserStack > browser {
        -moz-appearance: none !important;
        background: rgb(27,27,29) !important;
    }
    *|*:root[privatebrowsingmode="temporary"] #tabbrowser-tabpanels {
        background-color: rgb(27,27,29) !important;
    }
}

@namespace url(http://www.w3.org/1999/xhtml);
@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);

Почему?
   
В общем, перепроверил все коды userChrome.css, действительно пространства не применялись. Удалил их.

Отредактировано _zt (04-09-2020 16:02:09)

Отсутствует

 

№917704-09-2020 16:16:16

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2074
UA: Firefox 81.0

Re: Настройка внешнего вида Firefox в userChrome.css

_zt пишет

Почему?

Потому что такое правило, его нельзя вставить куда попало
@charset
@import
@namespace
только потом остальное

Отсутствует

 

№917804-09-2020 18:44:21

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1418
UA: Firefox 78.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
Теперь понятно.
   
А как историю из сайдбара и SidebarModoki по умолчанию открывать в новых вкладках? Это не работает.

Отсутствует

 

№917904-09-2020 19:58:35

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 80.0

Re: Настройка внешнего вида Firefox в userChrome.css

_zt пишет

Это не работает

Этот скрипт чуть подправить надо, т.к. он не обновлялся с 69 версии. У себя правил для журнала сменой xul на xhtml в chrome://browser/content/places/historySidebar.xul, уж не помню когда, в 72 кажется. Подключен в user_chrome_files, работает по журналу везде, кроме библиотеки, вплоть до 82 [nightly]

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

Выделить код

Код:

// 
(function() {
    var b_urlbar = false;
    var b_searchbar = true;

    function whereToOpenLinkMod() {
        {
    var b_bookmarks = false;
    var b_history = true;
    var b_syncedtab = false;

            if (!e) return 'current';
            var win = window.opener || window;
            var isTabEmpty = win.isTabEmpty;
            var gBrowser = win.gBrowser;
            if (typeof isTabEmpty === "function" && isTabEmpty(gBrowser.mCurrentTab || gBrowser.selectedTab) || gBrowser.selectedTab.isEmpty) return 'current';
            var node = e.originalTarget;
            while (node) {
                if(node.className && node.className.indexOf('bookmark-item') != -1
                    && node.outerHTML && node.outerHTML.indexOf('scheme="javascript"') != -1) {
                    return 'current';
                }
                if (node.className && node.className.indexOf('sync-state') != -1) { // sidebar syncedtabs
                    return b_syncedtab ? 'tab' : 'current';
                }
                switch (node.id) {
                    case 'bookmarksMenuPopup':  // menubar bookmarks
                    case 'BMB_bookmarksPopup':  // navibar bookmarks
                    case 'PanelUI-bookmarks':   // navibar bookmarks
                    case 'bookmarksPanel':      // sidebar bookmarks
                        return b_bookmarks ? 'tab' : 'current';
                    case 'goPopup':             // menubar history
                    case 'PanelUI-history':     // navibar history
                    case 'history-panel':       // sidebar history
                        return b_history ? 'tab' : 'current';
                    case 'placeContent':        // library bookmarks&history
                        var collection = document.getElementById('searchFilter').getAttribute('collection');
                        var tab = collection === "bookmarks" && b_bookmarks || collection === "history" && b_history;
                        return tab ? 'tab' : 'current';
                    case 'PanelUI-remotetabs':    // navibar syncedtabs
                        return b_syncedtab ? 'tab' : 'current';
                }
                node = node.parentNode;
            }
            return 'current';
        }
    }
    function generateReplacement(func, regexp, replacementFunc, appendMatch, appendAhead) {
        var replacementStr = replacementFunc.toString().replace(/^.*{|}$/g, '');
        if (appendMatch) {
            if (appendAhead) {
                replacementStr = '$&' + replacementStr;
            } else {
                replacementStr = replacementStr + '$&';
            }
        }
        var funcStr = func.toString().replace(regexp, replacementStr);
        if (!funcStr.startsWith("function")) {
            funcStr = "function " + funcStr;
        }
        return funcStr;
    }
    function generateWhere() {
        where = typeof isTabEmpty === "function" && isTabEmpty(gBrowser.mCurrentTab || gBrowser.selectedTab) || gBrowser.selectedTab.isEmpty ? 'current' : 'tab';
    }
    if (location == 'chrome://browser/content/browser.xhtml') {
        /* :::: Open Bookmarks/History in New Tab :::: */
        eval('whereToOpenLink = ' + generateReplacement(whereToOpenLink, /(return "current";)(?![\s\S]*\1)/g, whereToOpenLinkMod));
        var sidebar = document.getElementById('sidebar');
        sidebar && sidebar.addEventListener('DOMContentLoaded', function(event) {
            var doc = event.originalTarget;
            var win = doc.defaultView.window;
            if (win.location == 'chrome://browser/content/bookmarks/bookmarksPanel.xul' || win.location == 'chrome://browser/content/history/history-panel.xul'
                || win.location == 'chrome://browser/content/places/bookmarksSidebar.xul' || win.location == 'chrome://browser/content/places/historySidebar.xhtml'
                || win.location == 'chrome://browser/content/syncedtabs/sidebar.xhtml') {
                eval('win.whereToOpenLink = ' + generateReplacement(win.whereToOpenLink, /(return "current";)(?![\s\S]*\1)/g, whereToOpenLinkMod));
            } else if (win.location == 'chrome://browser/content/readinglist/sidebar.xhtml') {
                /* :::: Open Sidebar ReadingList in New Tab :::: */
                eval('win.RLSidebar.openURL = ' + generateReplacement(win.RLSidebar.openURL, /mainWindow\.openUILink\(url, event\);/, generateWhere, true));
            }
        });
        /* :::: Open Url in New Tab :::: */
        if (b_urlbar) {
            var urlbar = document.getElementById('urlbar');
            urlbar && eval('urlbar.handleCommand=' + generateReplacement(urlbar.handleCommand, /let where = openUILinkWhere( \|\| this\._whereToOpen\(event\))?;/, generateWhere, true, true));
        }
        /* :::: Open Search in New Tab :::: */
        if (b_searchbar) {
            var searchbar = document.getElementById('searchbar');
            searchbar && /*{true: function() {*/
                eval('searchbar.handleSearchCommand=' + generateReplacement(searchbar.handleSearchCommand, /this\.doSearch\(textValue, where(, aEngine)?\);|this\.handleSearchCommandWhere\(aEvent, aEngine, where, params\);/, generateWhere, true));
            /*}, false: function() {
                searchbar.addEventListener('load', this[true]);
            }}[!!searchbar.handleSearchCommand]();*/
            var oneOffButtons = document.getElementById('PopupSearchAutoComplete').oneOffButtons;
            oneOffButtons && eval('oneOffButtons.handleSearchCommand=' + generateReplacement(oneOffButtons.handleSearchCommand, /this\.popup\.handleOneOffSearch\(aEvent, aEngine, where, params\);/, generateWhere, true));
            if (b_urlbar) {
                var oneOffSearchButtons = document.getElementById('PopupAutoCompleteRichResult').input.popup.oneOffSearchButtons;
                oneOffSearchButtons && eval('oneOffSearchButtons.handleSearchCommand=' + generateReplacement(oneOffSearchButtons.handleSearchCommand, /this\.popup\.handleOneOffSearch\(aEvent, aEngine, where, params\);/, generateWhere, true));
            }
        }
    } else if (location == 'chrome://browser/content/places/places.xul') {
        /* :::: Open Bookmarks/History in New Tab :::: */
        eval('whereToOpenLink = ' + generateReplacement(whereToOpenLink, /(return "current";)(?![\s\S]*\1)/g, whereToOpenLinkMod));
    }
})();


Vitaliy V.
Может Вы нам как-нибудь напишите современный и компактный грамотный скрипт для открытия ссылок только из журнала в новой вкладке? Можно и из строки поиска ещё бы. Спасибо.

Отредактировано sandro79 (04-09-2020 20:21:22)

Отсутствует

 

№918004-09-2020 21:26:55

razoo
Участник
 
Группа: Members
Зарегистрирован: 23-07-2009
Сообщений: 48
UA: Firefox 78.0

Re: Настройка внешнего вида Firefox в userChrome.css

_zt пишет

Имеет смысл поиском по всей папке chrome пройтись.

Во-первых, я проверил на чистом профиле.
Во-вторых, оказалось имело смысл, но не для меня.
В-третьих, надо этот вопрос закрыть, не в последнюю очередь для тех, кто будет искать ответ позже: Оставлять ли пространство имён only.xul по дефолту.

Vitaliy V. пишет

(по умолчанию остается xul)

Насколько помнится, "разделённый астериск" встречался в стилях и десять лет назад, но неопределяемые html элементы было достаточно отделять ">" или "> stack >". Это до сих пор работает для старых расширений (у меня точно работает на старом счётчике табов). Теперь нужно уточнять пространство имён дополнительно. Достаточно к конкретной части таблицы применить, выделив как xhtml?
Короче говоря, как теперь корректней оформить usercrome?  Универсальное решение на будущее? (Сколько там ещё продержится зул и поддержка кастомных стилей.)

Отредактировано razoo (04-09-2020 23:30:49)

Отсутствует

 

№918105-09-2020 02:39:44

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1160
UA: Firefox 80.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V. пишет

Нет это проблема из-за Hover Links (v2)

Не обратил внимания на эту строку id.title='';. Спасибо, попробую ещё скрипт поковырять.

Отсутствует

 

№918205-09-2020 09:53:04

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1418
UA: Firefox 78.0

Re: Настройка внешнего вида Firefox в userChrome.css

razoo
Во первых, откуда в чистом пространство имен взялось? )
Во вторых, для вас, у вас же не работало изначально. ) Мне то чего искать, если изначально все работало.
В третьих, отвечать не надо, с вами и так все понятно.
   
sandro79
У меня не работает, ни так, ни в ucf. Куда он у вас подключен?
   
Вообще абсолютно нелогичное поведение открытия в Firefox. Мне вот интересно, кто нибудь открывает закладки и историю, кроме как через контекстное меню? Очень сомневаюсь.

Отредактировано _zt (05-09-2020 10:04:03)

Отсутствует

 

№918305-09-2020 10:52:19

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 80.0

Re: Настройка внешнего вида Firefox в userChrome.css

_zt пишет

Куда он у вас подключен?

в custom_script_win.js

Выделить код

Код:

/* ************************************************ */

        // Здесь может быть ваш код который сработает по событию "load" не раньше
        setTimeout(() => {
            var loadScripts = ((name) => {
                try {
                    Services.scriptloader.loadSubScript(`chrome://user_chrome_files/content/custom_scripts/${name}`, window, "UTF-8");
                } catch(e) {}
            });
            loadScripts("favicon_in_urlbar.uc.js");
            loadScripts("search_engine_icon.uc.js");
            loadScripts("openNewTab.uc.js");
            loadScripts("Tabs_Focus.uc.js");
            loadScripts("tabstoolbar_doubleclick_opennewtab.uc.js");
            loadScripts("restart_item_in_menu.uc.js");
            loadScripts("add_a_bookmark_to_the_bookmarks_menu.uc.js");
            // и так далее
        }, 0);
        /* ************************************************ */

Отредактировано sandro79 (25-02-2021 09:33:40)

Отсутствует

 

№918405-09-2020 11:55:25

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

Re: Настройка внешнего вида Firefox в userChrome.css

_zt пишет

Мне вот интересно, кто нибудь открывает закладки и историю, кроме как через контекстное меню? Очень сомневаюсь.

Можете не сомневаться!


Win7

Отсутствует

 

№918505-09-2020 14:17:09

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1418
UA: Firefox 78.0

Re: Настройка внешнего вида Firefox в userChrome.css

kokoss
Исключения подтверждают правило.
   
sandro79
Работает и, наверное раньше работал, но не для SidebarModoki.
   
Vitaliy V.
Если будете новый скрипт для истории писать, добавьте пожалуйста совместимость с SidebarModoki.

Отсутствует

 

№918605-09-2020 14:34:30

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2074
UA: Firefox 81.0

Re: Настройка внешнего вида Firefox в userChrome.css

_zt
sandro79
Попробуйте так в custom_script_all_win.js или custom_script_win.js (если в окне библиотеки не требуется)

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

Выделить код

Код:

(() => {
            var load_scripts_by_url = {
                "chrome://browser/content/browser.xhtml": (win) => {
                    var box;
                    if (win != window || !(box = document.querySelector("#sidebar-box"))) return;
                    var listener = e => {
                        var doc = e.target || ({});
                        load_scripts_by_url[doc.documentURI]?.(doc.defaultView);
                    };
                    box.addEventListener("pageshow", listener);
                    this.wheretoopenlinkmod = {
                        destructor: function() {
                            box.removeEventListener("pageshow", listener);
                        }
                    };
                    this.unloadlisteners.push("wheretoopenlinkmod");
                    window.whereToOpenLink = eval(`(${`${window.whereToOpenLink}`.replace(/^.*whereToOpenLink/, "function whereToOpenLink").replace(/(return\s*"current"\s*;)(?![\s\S]*\1)/g, `
                        try {
                            let node;
                            if (gBrowser.selectedTab.isEmpty ||
                                !((node = arguments[0].composedTarget) && node.closest("#bookmarksMenuPopup,#BMB_bookmarksPopup,#PanelUI-bookmarks,#goPopup,#PanelUI-history,.search-go-button")) ||
                                (node._placesNode && node._placesNode.uri.startsWith("javascript")))
                                return "current";
                            return "tab";
                        } catch(e) { return "current"; };
                    `)})`);
                },
                "chrome://browser/content/places/places.xhtml": (win) => {
                    win.whereToOpenLink = eval(`(${`${win.whereToOpenLink}`.replace(/^.*whereToOpenLink/, "function whereToOpenLink").replace(/(return\s*"current"\s*;)(?![\s\S]*\1)/g, `
                        try {
                            if (window.opener && window.opener.gBrowser.selectedTab.isEmpty)
                                return "current";
                           let ev = arguments[0], tree = ev.composedTarget.parentNode, row = tree.view.nodeForTreeIndex(tree.getCellAt(ev.clientX, ev.clientY).row);
                            if (row.uri.startsWith("javascript"))
                               return "current";
                            return "tab";
                        } catch(e) { return "current"; };
                    `)})`);
                },
                "chrome://browser/content/places/bookmarksSidebar.xhtml": (win) => {
                    win.whereToOpenLink = eval(`(${`${win.whereToOpenLink}`.replace(/^.*whereToOpenLink/, "function whereToOpenLink").replace(/(return\s*"current"\s*;)(?![\s\S]*\1)/g, `
                        try {
                            if ((window._ucf_top || (window._ucf_top = Services.wm.getMostRecentWindow("navigator:browser"))).gBrowser.selectedTab.isEmpty)
                                return "current";
                            let ev = arguments[0], tree = ev.composedTarget.parentNode, row = tree.view.nodeForTreeIndex(tree.getCellAt(ev.clientX, ev.clientY).row);
                            if (row.uri.startsWith("javascript"))
                                return "current";
                            return "tab";
                        } catch(e) { return "current"; };
                    `)})`);
                },
                "chrome://browser/content/places/historySidebar.xhtml": (win) => {
                    win.whereToOpenLink = eval(`(${`${win.whereToOpenLink}`.replace(/^.*whereToOpenLink/, "function whereToOpenLink").replace(/(return\s*"current"\s*;)(?![\s\S]*\1)/g, `
                        try {
                            if ((window._ucf_top || (window._ucf_top = Services.wm.getMostRecentWindow("navigator:browser"))).gBrowser.selectedTab.isEmpty)
                                return "current";
                            let ev = arguments[0], tree = ev.composedTarget.parentNode, row = tree.view.nodeForTreeIndex(tree.getCellAt(ev.clientX, ev.clientY).row);
                            if (row.uri.startsWith("javascript"))
                                return "current";
                            return "tab";
                        } catch(e) { return "current"; };
                    `)})`);
                },
            };
            load_scripts_by_url[location.href]?.(window);
        })();


Вообще это нужно вам самим перенести такие части как win.whereToOpenLink = eval(...);
к этому коду https://forum.mozilla-russia.org/viewto … 25#p784425
в соответствии с их URL
А этот код подойдет для тех кому не нужно загружать отдельные скрипты.

razoo пишет

но неопределяемые html элементы было достаточно отделять ">" или "> stack >". Это до сих пор работает для старых расширений (у меня точно работает на старом счётчике табов)

Это вы путаете с анонимным контентом XBL, а html элементы были и раньше в интерфейсе хоть и немного.

razoo пишет

Короче говоря, как теперь корректней оформить usercrome?  Универсальное решение на будущее? (Сколько там ещё продержится зул и поддержка кастомных стилей.)

Оформляйте как вам удобней, полагаю удобней для вас будет вообще без пространства имен,
это не так уж и важно на самом деле есть в userChrome.css пространства имен или нет.
Этот вопрос не ко мне, разработчики сами то знают что будет дальше с [firefox] ?!

Отредактировано Vitaliy V. (07-09-2020 12:15:19)

Отсутствует

 

№918705-09-2020 15:01:10

sibirnik
Участник
 
Группа: Members
Зарегистрирован: 11-08-2016
Сообщений: 63
UA: Firefox 78.0

Re: Настройка внешнего вида Firefox в userChrome.css

Помогите пожалуйста заменить в панели меню цвет полосы выделения на #00299E и цвет шрифта под этой полосой выделения на белый.
Это касается всех меню и подменю(где есть) в панели меню. (Файл, Правка, Вид, Журнал, Закладки, Инструменты, Справка).

Отсутствует

 

№918805-09-2020 15:09:22

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

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V. пишет

Попробуйте так в custom_script_all_win.js или custom_script_win.js (если в окне библиотеки не требуется)
скрытый текст

Благодарю :beer:


Win7

Отсутствует

 

№918905-09-2020 15:50:16

razoo
Участник
 
Группа: Members
Зарегистрирован: 23-07-2009
Сообщений: 48
UA: Firefox 78.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V

вообще без пространства имен

Спасибо. Вы по-русски подтвердили рекомендации userchrome.org В прошлогодней статье о стандарте они предлагают вообще не указывать пространство имен ("omit all mention of namespaces"), но при появлении проблем ограничивать блоки правилом @-moz-document.
Я тогда удивился, но ваш стиль для тулбаров - целиком из этих блоков - прояснил.

Vitaliy V. пишет

разработчики сами то знают что будет дальше с [firefox] ?!

не знаю насколько уместно, но зашёл недавно за расширениями...

Сначала испугался - подумал: "разрабы".
Потом вроде отлегло: "целевая группа".
А когда вдумался, понял: "уж лучше бы были разрабы".
76ab32c2b86043640c7b02486ea6127f-full.jpg
И спасибо за разъяснение с анонимыми XBL.

Отсутствует

 

№919005-09-2020 18:31:22

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2074
UA: Firefox 81.0

Re: Настройка внешнего вида Firefox в userChrome.css

kokoss
Поясните там http://forum.ru-board.com/topic.cgi?for … rt=3260#21
что перенос вправо работает только когда боковая панель слева, если нужно в любом случае сделать поиск
справа тогда требуется из стиля удалить правила содержащие #sidebar-box[positionend="true"]

Отсутствует

 

№919105-09-2020 19:45:11

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 80.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V. пишет

Попробуйте так в custom_script_all_win.js или custom_script_win.js (если в окне библиотеки не требуется)

Благодарю! Да, работает, но только в боковой панели и в библиотеке. Ещё бы добавить по ссылкам из журнала в панели меню "Журнал" и из значка журнала, добавленного на панель меню из хранилища - вообще бы идеально было. Открываю из трёх точек, по ситуации. Может отдельным скриптом, если не сильно много мороки. И вообще хорошо бы из строки поиска по нажатию на стрелку, ну этот баг поправить.

скрытый текст
a9699dea5f0c.png

sibirnik пишет

Помогите пожалуйста заменить в панели меню цвет полосы выделения на #00299E и цвет шрифта под этой полосой выделения на белый.
Это касается всех меню и подменю(где есть) в панели меню. (Файл, Правка, Вид, Журнал, Закладки, Инструменты, Справка).

Кое-что вроде есть, взято с правкой отсюда.

скрытый текст
1fef0f271415.png

Выделить код

Код:

#main-menubar > menu:-moz-any(:hover,[open],[_moz-menuactive]) {
  background: #00299E !important;
  color: White !important;
}

Отсутствует

 

№919205-09-2020 20:42:22

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2074
UA: Firefox 81.0

Re: Настройка внешнего вида Firefox в userChrome.css

sandro79 пишет

И вообще хорошо бы из строки поиска по нажатию на стрелку, ну этот баг поправить.

а это я добавлял, вы что этот код не заметили window.whereToOpenLink = eval(...); для "chrome://browser/content/browser.xhtml" ?
чтобы добавить что-то ещё меняем
matches(".search-go-button")
на
closest("#goPopup,#PanelUI-history,.search-go-button")
можете сюда добавить ещё селекторов через запятую, которые можно позаимствовать из вашего скрипта там где switch (node.id) {... только в css с добавлением #

Отсутствует

 

№919305-09-2020 21:26:51

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 80.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V. пишет

а это я добавлял, вы что этот код не заметили window.whereToOpenLink = eval(...); для "chrome://browser/content/browser.xhtml" ?

Заметил, но не допонял. Заменил я для начала matches(".search-go-button") на closest("#goPopup,#PanelUI-history,.search-go-button"), не знаю, ничего не поменялось. startupCache чистил вручную. Подключал к custom_script_win.js импортом, так сказать, потом вниз custom_script_win.js, всё равно работает только из сайдбара. Виталий, в общем буду разбираться, искать проблему у себя. Буду пробовать уже на чистом профиле и чистом user_chrome_files, искать виновника.


скрытый текст
Почти разобрался. На чистом user_chrome_files скрипт работает как надо. Код добавлял в custom_script_win.js в секцию // Здесь может быть ваш код который сработает по событию "load" не раньше Теперь буду копать дальше.


В общем получилась такая вот конструкция, всё работает как надо.

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

Выделить код

Код:

/* ************************************************ */
        try { this.urlbarhistorydropmarker.constructor(); } catch (e) {}
        this.contextmenuopenwith.constructor();
        // Здесь может быть ваш код который сработает по событию "load" не раньше
        (() => {
            var load_scripts_by_url = {
                "chrome://browser/content/browser.xhtml": () => {
                    var box = document.querySelector("#sidebar-box"),
                    listener = e => {
                        var doc = e.target;
                        (load_scripts_by_url[doc.documentURI] || (() => {}))(doc);
                    };
                    box.addEventListener("pageshow", listener);
                    this.wheretoopenlinkmod = {
                        destructor: function() {
                            box.removeEventListener("pageshow", listener);
                        }
                    };
                    this.unloadlisteners.push("wheretoopenlinkmod");
                    window.whereToOpenLink = eval(`(${`${window.whereToOpenLink}`.replace(/^.*whereToOpenLink/, "function whereToOpenLink").replace(/(return\s*"current"\s*;)(?![\s\S]*\1)/g, `
                        try {
                            if (gBrowser.selectedTab.isEmpty || !arguments[0].composedTarget.closest("#goPopup,#PanelUI-history,.search-go-button"))
                                return "current";
                            return "tab";
                        } catch(e) { return "current"; };
                    `)})`);
                },
                "chrome://browser/content/places/places.xhtml": () => {
                    window.whereToOpenLink = eval(`(${`${window.whereToOpenLink}`.replace(/^.*whereToOpenLink/, "function whereToOpenLink").replace(/(return\s*"current"\s*;)(?![\s\S]*\1)/g, `
                        try {
                            let ev = arguments[0], node = ev.composedTarget;
                            if (node.ownerGlobal.opener.gBrowser.selectedTab.isEmpty)
                                return "current";
                            let tree = node.parentNode, row = tree.view.nodeForTreeIndex(tree.getCellAt(ev.clientX, ev.clientY).row);
                            if (row.uri.startsWith("javascript"))
                                return "current";
                            return "tab";
                        } catch(e) { return "current"; };
                    `)})`);
                },
                "chrome://browser/content/places/bookmarksSidebar.xhtml": (doc) => {
                    var win = doc.defaultView;
                    win.whereToOpenLink = eval(`(${`${win.whereToOpenLink}`.replace(/^.*whereToOpenLink/, "function whereToOpenLink").replace(/(return\s*"current"\s*;)(?![\s\S]*\1)/g, `
                        try {
                            let ev = arguments[0], node = ev.composedTarget;
                            if (node.ownerGlobal.parent.gBrowser.selectedTab.isEmpty)
                                return "current";
                            let tree = node.parentNode, row = tree.view.nodeForTreeIndex(tree.getCellAt(ev.clientX, ev.clientY).row);
                            if (row.uri.startsWith("javascript"))
                                return "current";
                            return "tab";
                        } catch(e) { return "current"; };
                    `)})`);
                },
                "chrome://browser/content/places/historySidebar.xhtml": (doc) => {
                    var win = doc.defaultView;
                    win.whereToOpenLink = eval(`(${`${win.whereToOpenLink}`.replace(/^.*whereToOpenLink/, "function whereToOpenLink").replace(/(return\s*"current"\s*;)(?![\s\S]*\1)/g, `
                        try {
                            let ev = arguments[0], node = ev.composedTarget;
                            if (node.ownerGlobal.parent.gBrowser.selectedTab.isEmpty)
                                return "current";
                            let tree = node.parentNode, row = tree.view.nodeForTreeIndex(tree.getCellAt(ev.clientX, ev.clientY).row);
                            if (row.uri.startsWith("javascript"))
                                return "current";
                            return "tab";
                        } catch(e) { return "current"; };
                    `)})`);
                },
            };
            (load_scripts_by_url[location.href] || (() => {}))();
        })();
setTimeout(() => {
            var loadScripts = ((name) => {
                try {
                    Services.scriptloader.loadSubScript(`chrome://user_chrome_files/content/custom_scripts/${name}`, window, "UTF-8");
                } catch(e) {}
            });
            loadScripts("favicon_in_urlbar.uc.js");
            loadScripts("search_engine_icon.uc.js");
            // loadScripts("openNewTab.uc.js");
            loadScripts("Tabs_Focus.uc.js");
            loadScripts("tabstoolbar_doubleclick_opennewtab.uc.js");
            loadScripts("restart_item_in_menu.uc.js");
            loadScripts("add_a_bookmark_to_the_bookmarks_menu.uc.js");
            // и так далее
        }, 0);
        /* ************************************************ */

Отредактировано sandro79 (05-09-2020 22:54:48)

Отсутствует

 

№919405-09-2020 22:56:44

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2074
UA: Firefox 81.0

Re: Настройка внешнего вида Firefox в userChrome.css

sandro79
если потребуется ещё и для закладок в меню (#bookmarksMenuPopup,#BMB_bookmarksPopup,#PanelUI-bookmarks) то замените на это

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

Выделить код

Код:

window.whereToOpenLink = eval(`(${`${window.whereToOpenLink}`.replace(/^.*whereToOpenLink/, "function whereToOpenLink").replace(/(return\s*"current"\s*;)(?![\s\S]*\1)/g, `
                        try {
                            let node;
                            if (gBrowser.selectedTab.isEmpty ||
                                !((node = arguments[0].composedTarget) && node.closest("#bookmarksMenuPopup,#BMB_bookmarksPopup,#PanelUI-bookmarks,#goPopup,#PanelUI-history,.search-go-button")) ||
                                (node._placesNode && node._placesNode.uri.startsWith("javascript")))
                                return "current";
                            return "tab";
                        } catch(e) { return "current"; };
                    `)})`);

Отредактировано Vitaliy V. (05-09-2020 23:52:48)

Отсутствует

 

№919505-09-2020 23:08:15

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 80.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V. пишет

sandro79
если потребуется ещё и для закладок в меню (#bookmarksMenuPopup,#BMB_bookmarksPopup,#PanelUI-bookmarks) то замените на это

Да-да, отлично, можно тоже использовать. Главное разобрался. Отдельным файлом импортом не пошло, оставлю в custom_script_win.js. Спасибо ещё раз, теперь всё работает.


Переместил скрипт в custom_script_all_win.js, чтоб в окне библиотеки ещё работал, для порядка.

Отредактировано sandro79 (05-09-2020 23:51:54)

Отсутствует

 

№919606-09-2020 04:45:30

sibirnik
Участник
 
Группа: Members
Зарегистрирован: 11-08-2016
Сообщений: 63
UA: Firefox 78.0

Re: Настройка внешнего вида Firefox в userChrome.css

sandro79

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

sandro79 пишет
Выделить код

Код:

#main-menubar > menu:-moz-any(:hover,[open],[_moz-menuactive]) {
  background: #00299E !important;
  color: White !important;
}


Сдвиг есть - отлично. Спасибо. Вот ещё бы и дальше так же сделать:
скрытый текст

sibirnik пишет

Это касается всех меню и подменю(где есть) в панели меню. (Файл, Правка, Вид, Журнал, Закладки, Инструменты, Справка).

Отредактировано sibirnik (06-09-2020 05:26:17)

Отсутствует

 

№919706-09-2020 10:56:58

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 80.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
Но почему не получается полноценно отдельным файлом запустить, чтоб работало везде где указано closest("#goPopup,#PanelUI-history,.search-go-button")? А работает импортом только по сайдбару в custom_script_win.js и + в окне библиотек в custom_script_all_win.js.
Пробовал уже другой код импорта, с под последнего спойлера, всё равно только в сайдбаре работает. Профиль и комплект чистые использовал. Может есть какой-то вариант запустить импортом в custom_script_win.js, в custom_script_all_win.js необязательно.

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

Выделить код

Код:

/* ************************************************ */

        // Здесь может быть ваш код который сработает по событию "load" не раньше
(() => {
    var loadscript = name => {
        try {
            Services.scriptloader.loadSubScript(`chrome://user_chrome_files/content/custom_scripts/${name}`, globalThis, "UTF-8");
        } catch(e) {}
    };
    loadscript("openNewTab.js");
    // и т. д.
})();
        /* ************************************************ */


Сейчас у меня в в custom_script_all_win.js

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

Выделить код

Код:

/* ************************************************ */
(() => {
            var load_scripts_by_url = {
                "chrome://browser/content/browser.xhtml": () => {
                    var box = document.querySelector("#sidebar-box"),
                    listener = e => {
                        var doc = e.target;
                        (load_scripts_by_url[doc.documentURI] || (() => {}))(doc);
                    };
                    box.addEventListener("pageshow", listener);
                    this.wheretoopenlinkmod = {
                        destructor: function() {
                            box.removeEventListener("pageshow", listener);
                        }
                    };
                    this.unloadlisteners.push("wheretoopenlinkmod");
                    window.whereToOpenLink = eval(`(${`${window.whereToOpenLink}`.replace(/^.*whereToOpenLink/, "function whereToOpenLink").replace(/(return\s*"current"\s*;)(?![\s\S]*\1)/g, `
                        try {
                            if (gBrowser.selectedTab.isEmpty || !arguments[0].composedTarget.closest("#goPopup,#PanelUI-history,.search-go-button"))
                                return "current";
                            return "tab";
                        } catch(e) { return "current"; };
                    `)})`);
                },
                "chrome://browser/content/places/places.xhtml": () => {
                    window.whereToOpenLink = eval(`(${`${window.whereToOpenLink}`.replace(/^.*whereToOpenLink/, "function whereToOpenLink").replace(/(return\s*"current"\s*;)(?![\s\S]*\1)/g, `
                        try {
                            let ev = arguments[0], node = ev.composedTarget;
                            if (node.ownerGlobal.opener.gBrowser.selectedTab.isEmpty)
                                return "current";
                            let tree = node.parentNode, row = tree.view.nodeForTreeIndex(tree.getCellAt(ev.clientX, ev.clientY).row);
                            if (row.uri.startsWith("javascript"))
                                return "current";
                            return "tab";
                        } catch(e) { return "current"; };
                    `)})`);
                },
                "chrome://browser/content/places/bookmarksSidebar.xhtml": (doc) => {
                    var win = doc.defaultView;
                    win.whereToOpenLink = eval(`(${`${win.whereToOpenLink}`.replace(/^.*whereToOpenLink/, "function whereToOpenLink").replace(/(return\s*"current"\s*;)(?![\s\S]*\1)/g, `
                        try {
                            let ev = arguments[0], node = ev.composedTarget;
                            if (node.ownerGlobal.parent.gBrowser.selectedTab.isEmpty)
                                return "current";
                            let tree = node.parentNode, row = tree.view.nodeForTreeIndex(tree.getCellAt(ev.clientX, ev.clientY).row);
                            if (row.uri.startsWith("javascript"))
                                return "current";
                            return "tab";
                        } catch(e) { return "current"; };
                    `)})`);
                },
                "chrome://browser/content/places/historySidebar.xhtml": (doc) => {
                    var win = doc.defaultView;
                    win.whereToOpenLink = eval(`(${`${win.whereToOpenLink}`.replace(/^.*whereToOpenLink/, "function whereToOpenLink").replace(/(return\s*"current"\s*;)(?![\s\S]*\1)/g, `
                        try {
                            let ev = arguments[0], node = ev.composedTarget;
                            if (node.ownerGlobal.parent.gBrowser.selectedTab.isEmpty)
                                return "current";
                            let tree = node.parentNode, row = tree.view.nodeForTreeIndex(tree.getCellAt(ev.clientX, ev.clientY).row);
                            if (row.uri.startsWith("javascript"))
                                return "current";
                            return "tab";
                        } catch(e) { return "current"; };
                    `)})`);
                },
            };
            (load_scripts_by_url[location.href] || (() => {}))();
        })();
        // Здесь может быть ваш код который сработает по событию "load" не раньше
        setTimeout(() => {
            var loadScripts = ((name) => {
                try {
                    Services.scriptloader.loadSubScript(`chrome://user_chrome_files/content/custom_scripts/${name}`, window, "UTF-8");
                } catch(e) {}
            });
            var url = location.href.replace(/\..*$/, "");
            switch (url) {
                case "chrome://browser/content/browser":
                    loadScripts("ucjsDownloadsManager.uc.js");
                    break;
                case "chrome://browser/content/downloads/contentAreaDownloadsView":
                    loadScripts("ucjsDownloadsManager2.uc.js");
                    break;
            }
        }, 0);
        /* ************************************************ */


_zt пишет

sandro79
Есть, выше ссылку Vitaliy V. дал, в том посте где код этого скрипта опубликован.

Да я так и подумал, что только через него импортировать, но я с этим вряд ли разберусь. Если только так, то вопрос снимаю. Чуть позже попробую всё же, а пока буду использовать в custom_script_all_win.js, как под спойлером выше.


А, ну выше же было сказано, а я бьюсь импортом запустить :D

Vitaliy V. пишет

А этот код подойдет для тех кому не нужно загружать отдельные скрипты.

Отредактировано sandro79 (06-09-2020 12:34:07)

Отсутствует

 

№919806-09-2020 11:39:56

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1418
UA: Firefox 78.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
Не получается. Не работает в SidebarModoki и в библиотеке открываемой во вкладке (речь только про историю).
Разместил целиком (без импорта) в custom_script_all_win.js, так как требуется везде. Код тот же что у Sandro + замена секции которую вы выше давали.
Работает в обычном сайдбаре и в библиотеке открываемой в окне.
   
sandro79
Есть, выше ссылку Vitaliy V. дал, в том посте где код этого скрипта опубликован.

Отредактировано _zt (06-09-2020 12:06:28)

Отсутствует

 

№919906-09-2020 13:45:16

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1160
UA: Firefox 80.0

Re: Настройка внешнего вида Firefox в userChrome.css

Перестал менять цвет фона в меню боковой панели (самая верхняя строка) такой код:

Выделить код

Код:

#sidebarMenu-popup > .panel-arrowcontainer > .panel-arrowcontent { background: lavender !important; }

Можно поправить?

Отсутствует

 

№920006-09-2020 15:02:25

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2074
UA: Firefox 81.0

Re: Настройка внешнего вида Firefox в userChrome.css

_zt пишет

Код тот же что у Sandro

Этот и не обязан работать с SidebarModoki я писал что вам нужно самим добавить к этому коду https://forum.mozilla-russia.org/viewto … 25#p784425
Ну да ладно попробую отдельным скриптом.


sandro79
_zt
Удаляйте все загрузчики скриптов из custom_script_all_win.js
добавляйте этот

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

Выделить код

Код:

(async () => {
            var loadscript = (relpath, win) => {
                try {
                    Services.scriptloader.loadSubScript(`chrome://user_chrome_files/content/custom_scripts/${relpath}`, win, "UTF-8");
                    return true;
                } catch(e) {
                    if (!window.Services) {
                        try {
                            ChromeUtils.import("resource://gre/modules/Services.jsm", window);
                            Services.scriptloader.loadSubScript(`chrome://user_chrome_files/content/custom_scripts/${relpath}`, win, "UTF-8");
                            return true;
                        } catch(e) {}
                    }
                }
                return false;
            },
            load_scripts_by_url = {
                "chrome://browser/content/browser.xhtml": win => {
                    if (win != window) return;
                    var box = document.querySelector("#browser") || window;
                    var listener = e => {
                        var doc = e.target || ({});
                        load_scripts_by_url[doc.documentURI]?.(doc.defaultView);
                    };
                    box.addEventListener("pageshow", listener);
                    this.loadscriptsallwinorsidebar = {
                        destructor() {
                            box.removeEventListener("pageshow", listener);
                        }
                    };
                    this.unloadlisteners.push("loadscriptsallwinorsidebar");
                    //>>>>>>>>>>| Загрузка скриптов для browser.xhtml |>>>>>>>>>>
                    // loadscript("ucf_wheretoopenlink.js", win) && win.ucf_where_to_open_link.browser();
                    // loadscript("ucjsDownloadsManager.uc.js", win);

                    //<<<<<<<<<<| Загрузка скриптов для browser.xhtml |<<<<<<<<<<
                },
                //>>>>>>>>>>| Загрузка скриптов для др. документов |>>>>>>>>>>
                "chrome://browser/content/places/places.xhtml": win => {
                    // loadscript("ucf_wheretoopenlink.js", win) && win.ucf_where_to_open_link.places();

                },
                "chrome://browser/content/downloads/contentAreaDownloadsView.xhtml": win => {
                    // loadscript("ucjsDownloadsManager2.uc.js", win);

                },
                "about:downloads": win => {
                    // loadscript("ucjsDownloadsManager2.uc.js", win);

                },
                "chrome://browser/content/places/bookmarksSidebar.xhtml": win => {
                    // loadscript("ucf_wheretoopenlink.js", win) && win.ucf_where_to_open_link.bookmarksSidebar();

                },
                "chrome://browser/content/places/historySidebar.xhtml": win => {
                    // loadscript("ucf_wheretoopenlink.js", win) && win.ucf_where_to_open_link.historySidebar();

                },
                //<<<<<<<<<<| Загрузка скриптов для др. документов |<<<<<<<<<<
            };
            load_scripts_by_url[location.href]?.(window);
        })();


там добавлены уже в закомментированном виде скрипты:
ucjsDownloadsManager.uc.js
ucjsDownloadsManager2.uc.js
остальные добавите сами


и сам скрипт ucf_wheretoopenlink.js

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

Выделить код

Код:

var ucf_where_to_open_link = {
    browser() {
        window.whereToOpenLink = eval(`(${`${window.whereToOpenLink}`.replace(/^.*whereToOpenLink/, "function whereToOpenLink").replace(/(return\s*"current"\s*;)(?![\s\S]*\1)/g, `
            try {
                let node;
                if (gBrowser.selectedTab.isEmpty ||
                    !((node = arguments[0].composedTarget) && node.closest("#bookmarksMenuPopup,#BMB_bookmarksPopup,#PanelUI-bookmarks,#goPopup,#PanelUI-history,.search-go-button")) ||
                    (node._placesNode && node._placesNode.uri.startsWith("javascript")))
                    return "current";
                return "tab";
            } catch(e) { return "current"; };
        `)})`);
    },
    places() {
        window.whereToOpenLink = eval(`(${`${window.whereToOpenLink}`.replace(/^.*whereToOpenLink/, "function whereToOpenLink").replace(/(return\s*"current"\s*;)(?![\s\S]*\1)/g, `
            try {
                if (window.opener && window.opener.gBrowser.selectedTab.isEmpty)
                    return "current";
                let ev = arguments[0], tree = ev.composedTarget.parentNode, row = tree.view.nodeForTreeIndex(tree.getCellAt(ev.clientX, ev.clientY).row);
                if (row.uri.startsWith("javascript"))
                    return "current";
                return "tab";
            } catch(e) { return "current"; };
        `)})`);
    },
    bookmarksSidebar() {
        this.historySidebar();
    },
    historySidebar() {
        window.whereToOpenLink = eval(`(${`${window.whereToOpenLink}`.replace(/^.*whereToOpenLink/, "function whereToOpenLink").replace(/(return\s*"current"\s*;)(?![\s\S]*\1)/g, `
            try {
                if ((window._ucf_top || (window._ucf_top = Services.wm.getMostRecentWindow("navigator:browser"))).gBrowser.selectedTab.isEmpty)
                    return "current";
                let ev = arguments[0], tree = ev.composedTarget.parentNode, row = tree.view.nodeForTreeIndex(tree.getCellAt(ev.clientX, ev.clientY).row);
                if (row.uri.startsWith("javascript"))
                    return "current";
                return "tab";
            } catch(e) { return "current"; };
        `)})`);
    },
};

Добавлено 06-09-2020 15:18:13
sibirnik
Так вам вообще везде надо? Я же сказал в общем стиле для меню правте
xrun1

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

Выделить код

Код:

#sidebarMenu-popup {
  --arrowpanel-background: lavender !important;
  --arrowpanel-color: black !important;
}

Отредактировано Vitaliy V. (05-07-2021 21:48:16)

Отсутствует

 

Board footer

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