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);
Отредактировано _zt (04-09-2020 16:02:09)
Отсутствует
Почему?
Потому что такое правило, его нельзя вставить куда попало
@charset
@import
@namespace
только потом остальное
Отсутствует
Это не работает
Этот скрипт чуть подправить надо, т.к. он не обновлялся с 69 версии. У себя правил для журнала сменой xul на xhtml в chrome://browser/content/places/historySidebar.xul, уж не помню когда, в 72 кажется. Подключен в user_chrome_files, работает по журналу везде, кроме библиотеки, вплоть до 82
// (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)
Отсутствует
Имеет смысл поиском по всей папке chrome пройтись.
Во-первых, я проверил на чистом профиле.
Во-вторых, оказалось имело смысл, но не для меня.
В-третьих, надо этот вопрос закрыть, не в последнюю очередь для тех, кто будет искать ответ позже: Оставлять ли пространство имён only.xul по дефолту.
(по умолчанию остается xul)
Насколько помнится, "разделённый астериск" встречался в стилях и десять лет назад, но неопределяемые html элементы было достаточно отделять ">" или "> stack >". Это до сих пор работает для старых расширений (у меня точно работает на старом счётчике табов). Теперь нужно уточнять пространство имён дополнительно. Достаточно к конкретной части таблицы применить, выделив как xhtml?
Короче говоря, как теперь корректней оформить usercrome? Универсальное решение на будущее? (Сколько там ещё продержится зул и поддержка кастомных стилей.)
Отредактировано razoo (04-09-2020 23:30:49)
Отсутствует
razoo
Во первых, откуда в чистом пространство имен взялось? )
Во вторых, для вас, у вас же не работало изначально. ) Мне то чего искать, если изначально все работало.
В третьих, отвечать не надо, с вами и так все понятно.
sandro79
У меня не работает, ни так, ни в ucf. Куда он у вас подключен?
Вообще абсолютно нелогичное поведение открытия в Firefox. Мне вот интересно, кто нибудь открывает закладки и историю, кроме как через контекстное меню? Очень сомневаюсь.
Отредактировано _zt (05-09-2020 10:04:03)
Отсутствует
Куда он у вас подключен?
/* ************************************************ */ // Здесь может быть ваш код который сработает по событию "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)
Отсутствует
kokoss
Исключения подтверждают правило.
sandro79
Работает и, наверное раньше работал, но не для SidebarModoki.
Vitaliy V.
Если будете новый скрипт для истории писать, добавьте пожалуйста совместимость с SidebarModoki.
Отсутствует
_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); })();
но неопределяемые html элементы было достаточно отделять ">" или "> stack >". Это до сих пор работает для старых расширений (у меня точно работает на старом счётчике табов)
Это вы путаете с анонимным контентом XBL, а html элементы были и раньше в интерфейсе хоть и немного.
Короче говоря, как теперь корректней оформить usercrome? Универсальное решение на будущее? (Сколько там ещё продержится зул и поддержка кастомных стилей.)
Оформляйте как вам удобней, полагаю удобней для вас будет вообще без пространства имен,
это не так уж и важно на самом деле есть в userChrome.css пространства имен или нет.
Этот вопрос не ко мне, разработчики сами то знают что будет дальше с ?!
Отредактировано Vitaliy V. (07-09-2020 12:15:19)
Отсутствует
Помогите пожалуйста заменить в панели меню цвет полосы выделения на #00299E и цвет шрифта под этой полосой выделения на белый.
Это касается всех меню и подменю(где есть) в панели меню. (Файл, Правка, Вид, Журнал, Закладки, Инструменты, Справка).
Отсутствует
Vitaliy V
вообще без пространства имен
Спасибо. Вы по-русски подтвердили рекомендации userchrome.org В прошлогодней статье о стандарте они предлагают вообще не указывать пространство имен ("omit all mention of namespaces"), но при появлении проблем ограничивать блоки правилом @-moz-document.
Я тогда удивился, но ваш стиль для тулбаров - целиком из этих блоков - прояснил.
разработчики сами то знают что будет дальше с ?!
Отсутствует
kokoss
Поясните там http://forum.ru-board.com/topic.cgi?for … rt=3260#21
что перенос вправо работает только когда боковая панель слева, если нужно в любом случае сделать поиск
справа тогда требуется из стиля удалить правила содержащие #sidebar-box[positionend="true"]
Отсутствует
Попробуйте так в custom_script_all_win.js или custom_script_win.js (если в окне библиотеки не требуется)
Благодарю! Да, работает, но только в боковой панели и в библиотеке. Ещё бы добавить по ссылкам из журнала в панели меню "Журнал" и из значка журнала, добавленного на панель меню из хранилища - вообще бы идеально было. Открываю из трёх точек, по ситуации. Может отдельным скриптом, если не сильно много мороки. И вообще хорошо бы из строки поиска по нажатию на стрелку, ну этот баг поправить.
Помогите пожалуйста заменить в панели меню цвет полосы выделения на #00299E и цвет шрифта под этой полосой выделения на белый.
Это касается всех меню и подменю(где есть) в панели меню. (Файл, Правка, Вид, Журнал, Закладки, Инструменты, Справка).
Кое-что вроде есть, взято с правкой отсюда.
#main-menubar > menu:-moz-any(:hover,[open],[_moz-menuactive]) { background: #00299E !important; color: White !important; }
Отсутствует
И вообще хорошо бы из строки поиска по нажатию на стрелку, ну этот баг поправить.
а это я добавлял, вы что этот код не заметили window.whereToOpenLink = eval(...); для "chrome://browser/content/browser.xhtml" ?
чтобы добавить что-то ещё меняем
matches(".search-go-button")
на
closest("#goPopup,#PanelUI-history,.search-go-button")
можете сюда добавить ещё селекторов через запятую, которые можно позаимствовать из вашего скрипта там где switch (node.id) {... только в css с добавлением #
Отсутствует
а это я добавлял, вы что этот код не заметили 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, искать виновника.
В общем получилась такая вот конструкция, всё работает как надо.
/* ************************************************ */ 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)
Отсутствует
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)
Отсутствует
sandro79
если потребуется ещё и для закладок в меню (#bookmarksMenuPopup,#BMB_bookmarksPopup,#PanelUI-bookmarks) то замените на это
Да-да, отлично, можно тоже использовать. Главное разобрался. Отдельным файлом импортом не пошло, оставлю в custom_script_win.js. Спасибо ещё раз, теперь всё работает.
Переместил скрипт в custom_script_all_win.js, чтоб в окне библиотеки ещё работал, для порядка.
Отредактировано sandro79 (05-09-2020 23:51:54)
Отсутствует
sandro79
Выделить кодКод:
#main-menubar > menu:-moz-any(:hover,[open],[_moz-menuactive]) { background: #00299E !important; color: White !important; }
Это касается всех меню и подменю(где есть) в панели меню. (Файл, Правка, Вид, Журнал, Закладки, Инструменты, Справка).
Отредактировано sibirnik (06-09-2020 05:26:17)
Отсутствует
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); /* ************************************************ */
sandro79
Есть, выше ссылку Vitaliy V. дал, в том посте где код этого скрипта опубликован.
Да я так и подумал, что только через него импортировать, но я с этим вряд ли разберусь. Если только так, то вопрос снимаю. Чуть позже попробую всё же, а пока буду использовать в custom_script_all_win.js, как под спойлером выше.
А, ну выше же было сказано, а я бьюсь импортом запустить
А этот код подойдет для тех кому не нужно загружать отдельные скрипты.
Отредактировано sandro79 (06-09-2020 12:34:07)
Отсутствует
Vitaliy V.
Не получается. Не работает в SidebarModoki и в библиотеке открываемой во вкладке (речь только про историю).
Разместил целиком (без импорта) в custom_script_all_win.js, так как требуется везде. Код тот же что у Sandro + замена секции которую вы выше давали.
Работает в обычном сайдбаре и в библиотеке открываемой в окне.
sandro79
Есть, выше ссылку Vitaliy V. дал, в том посте где код этого скрипта опубликован.
Отредактировано _zt (06-09-2020 12:06:28)
Отсутствует
Перестал менять цвет фона в меню боковой панели (самая верхняя строка) такой код:
#sidebarMenu-popup > .panel-arrowcontainer > .panel-arrowcontent { background: lavender !important; }
Можно поправить?
Отсутствует
Код тот же что у 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); })();
и сам скрипт 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)
Отсутствует