openAddonsMgr is not a function
Попробуй так
/* var openAddonsMgr = window.BrowserOpenAddonsMgr // Firefox */ var openAddonsMgr = window.BrowserOpenAddonsMgr || window.BrowserAddonUI.openAddonsMgr // Firefox
Отсутствует
egorsemenov06 пишетopenAddonsMgr is not a function
Попробуй так
скрытый текстВыделить кодКод:
/* var openAddonsMgr = window.BrowserOpenAddonsMgr // Firefox */ var openAddonsMgr = window.BrowserOpenAddonsMgr || window.BrowserAddonUI.openAddonsMgr // Firefox
ОГРОМНОЕ СПАСИБО!!!!!работает
Отсутствует
Vitaliy V.
Если в настройках панели закладок стоит "Отображать только на новой вкладке" на новой вкладке панель перекрывает заголовок Sidebar Tabs. На страшно, закрыть можно горячими клавишами, но всё же.
https://imgur.com/vnNUw3N
Отсутствует
Если в настройках панели закладок стоит "Отображать только на новой вкладке" на новой вкладке панель перекрывает заголовок Sidebar Tabs.
Получается наложение имён вкладок Sidebar Tabs (загловок у меня отключен). При этом ещё и закрыть новую вкладку мышью не получается.
Отсутствует
Как отследить, что сайт не переключился в ReaderMode и выполнить при этой ошибке свой код ?
вики выдаёт ошибку: lazy.ReaderMode.parseDocument(...) is nullAboutReaderChild.sys.mjs
document.getElementById("key_toggleReaderMode", window).doCommand();
Надо учесть, что эта команда повторным вызовом закрывает режим чтения.Переделал демо-профиль в шапке, другое оформление плюс корпоративные настройки-закладки для новых профилей. Добавил "открыть сайт в Sidebar" в меню пользователя и клик колёсиком на щите (повторный вызов закроет Sidebar) и на жест мыши: тащить ссылку вниз. При сохранении из ReaderMode (правый клик на кнопке Загрузки) в конце страницы правильная ссылка на оригинал.
Отредактировано Dobrov (12-06-2024 08:46:35)
Отсутствует
Dumby здравствуйте.
если руками включить настройку browser.search.newSearchConfig.enabled
Поставил себе на посмотреть 128b1, ну всё таки ESR 128 будет , понял что new search configuration просто так не отключить.
И вдогонку скрипт, разблокирующий все поисковые расширения, остаётся не приделах.
Пришло в голову так написать, и да знаю что я в этих вопросах ламер. Может есть у вас что добавить с вашей точки зрения?
. // Permanently enable the new search configuration until we remove the old code as part of bug 1870686. // lockPref("browser.search.newSearchConfig.enabled": false) no more work try {(async (su) => { let {ChromeUtils} = Cu.getGlobalForObject(Cu), impESM = ChromeUtils.importESModule, {SearchUtils} = impESM(su); SearchUtils.newSearchConfigEnabled = false; })("resource://gre/modules/SearchUtils.sys.mjs");} catch(ex) {Cu.reportError(ex);}
Жизнь иногда такое выкидывает, что хочется подобрать...
Отсутствует
Поставил себе на посмотреть
128b1, ну всё таки ESR 128 будет
Мудро.
Может есть у вас что добавить с вашей точки зрения?
Добавить-то нет, а прокомментировать код могу.
Скармливать асинхронную обёртку блоку try {} бессмысленно,
такая обертка никогда не сможет образовать ошибку прямо сразу.
Ну, кроме синтаксической, но тогда уже ничто не поможет.
И, let-батарея выглядит избыточно.
Вобщем, можно записать как-то так, но это всего лишь прихорошение.
(async su => ChromeUtils.importESModule(su).SearchUtils.newSearchConfigEnabled = false)( "resource://gre/modules/SearchUtils.sys.mjs" );
Отсутствует
Решил Sidebar Tabs в виде юзер скрипта добавить в UCF, обновляем его, раскомментируем https://github.com/VitaliyVstyle/Vitali … ts.mjs#L50
И тестируем новую функцию AUTO_HIDE = true https://github.com/VitaliyVstyle/Vitali … abs.js#L34
Отредактировано Vitaliy V. (13-06-2024 15:45:22)
Отсутствует
Vitaliy V.
В связи с
privacy.clearHistory.cache
privacy.clearHistory.cookiesAndStorage
privacy.clearHistory.historyFormDataAndDownloads
обновите пожалуйста скрипт 24-04-2024 16:46:34
Vitaliy V.
А переключение автоскрытия Sidebar Tabs не хотите сделать как раньше было, например по Ctrl+ЛКМ или Ctrl+ПКМ на кнопке?
И спасибо за контексты, но .onImage ожидаемо не работает, даже на явных картинках, например здесь на смайликах над полем ответа.
а нет, вру, на аватарках заработал и на иконках Firefox тоже.
Отредактировано _zt (13-06-2024 16:58:22)
Отсутствует
обновите пожалуйста скрипт
А добавить в
var itemsToClear = [
"historyFormDataAndDownloads",
"cookiesAndStorage",
...
?
А переключение автоскрытия Sidebar Tabs не хотите сделать как раньше было, например по Ctrl+ЛКМ или Ctrl+ПКМ на кнопке?
А как раньше было ? В самом Sidebar Tabs не было автоскрытия, а то что у вас стиль и/или скрипт был то там было просто показать/скрыть, наверное этот скрипт можно подправить чтобы работал так же.
Обнаружил баг не баг, но если модуль CustomizableUI вызывается слишком рано при старте, то получаем проблемы при сбросе настроек панелей инструментов
CustomizeMode: TypeError: can't access property "enable", gDefaultTheme is undefined _resetUIState resource:///modules/CustomizableUI.sys.mjs:3289 reset resource:///modules/CustomizableUI.sys.mjs:3248 reset resource:///modules/CustomizableUI.sys.mjs:4444 reset resource:///modules/CustomizeMode.sys.mjs:1234 Console.sys.mjs:506
Отредактировано Vitaliy V. (13-06-2024 21:06:28)
Отсутствует
то там было просто показать/скрыть
Нет, не просто
try {(() => { var label = "Sidebar Tabs", tooltiptext = "ЛКМ Sidebar Tabs\nShift+ЛКМ Toggle AutoHide", img = "data:image/svg+xml;base64...", pref = "extensions.ucf.sidebar_tabs.auto_hide"; var sidebar_tabs_button = { get style() { delete this.style; return this.style = "data:text/css;charset=utf-8," + encodeURIComponent(` #st_toolbox { --v-sidebar-min-width: 2px; --v-sidebar-min-width-normal: 10px; --v-sidebar-max-width: 20em; --v-sidebar-transition-delay-show: .3s; --v-sidebar-transition-delay-hide: .6s; --v-sidebar-transition-duration: .3s; /* ********************************************** */ position: relative !important; z-index: 1 !important; min-width: var(--v-sidebar-max-width) !important; width: var(--v-sidebar-max-width) !important; max-width: var(--v-sidebar-max-width) !important; overflow: hidden !important; opacity: 0 !important; --v-sidebar-margin-max-width: calc(-1 * var(--v-sidebar-max-width)); --v-sidebar-margin-left-locale-dir: 0; --v-sidebar-margin-right-locale-dir: var(--v-sidebar-margin-max-width); --v-sidebar-transform-locale-dir: -1; --v-sidebar-transform-locale-dir-visible: 1; margin-left: var(--v-sidebar-margin-left-locale-dir) !important; margin-right: var(--v-sidebar-margin-right-locale-dir) !important; transform: translateX(calc(var(--v-sidebar-transform-locale-dir) * (var(--v-sidebar-max-width) - var(--v-sidebar-min-width)))) !important; transition-timing-function: linear, step-start !important; transition-delay: var(--v-sidebar-transition-delay-hide), calc(var(--v-sidebar-transition-delay-hide) + var(--v-sidebar-transition-duration)) !important; transition-duration: var(--v-sidebar-transition-duration), 0s !important; transition-property: transform, opacity !important; border-inline-end: 1px solid var(--chrome-content-separator-color, rgba(127,127,127,.5)) !important; } *|*:root[sidebar_tabs_right="true"] #st_toolbox { border-inline-start: 1px solid var(--chrome-content-separator-color, rgba(127,127,127,.5)) !important; border-inline-end: none !important; } *|*:root[sidebar_tabs_right="true"] #st_toolbox, #st_toolbox:-moz-locale-dir(rtl) { --v-sidebar-margin-left-locale-dir: var(--v-sidebar-margin-max-width); --v-sidebar-margin-right-locale-dir: 0; --v-sidebar-transform-locale-dir: 1; --v-sidebar-transform-locale-dir-visible: -1; } *|*:root[sidebar_tabs_right="true"] #st_toolbox:-moz-locale-dir(rtl) { --v-sidebar-margin-left-locale-dir: 0; --v-sidebar-margin-right-locale-dir: var(--v-sidebar-margin-max-width); --v-sidebar-transform-locale-dir: -1; --v-sidebar-transform-locale-dir-visible: 1; } *|*:root[sizemode="normal"] #st_toolbox { --v-sidebar-min-width: var(--v-sidebar-min-width-normal) !important; } #st_toolbox:hover, #st_toolbox[sidebardrag] { transform: translateX(0px) !important; opacity: 1 !important; transition-delay: var(--v-sidebar-transition-delay-show) !important; } *|*:root[v_vertical_bar_visible][v_vertical_bar_start="true"][sidebar_tabs_right="false"] #st_toolbox, *|*:root[v_vertical_bar_visible][v_vertical_bar_start="false"][sidebar_tabs_right="true"] #st_toolbox { transform: translateX(calc(var(--v-sidebar-transform-locale-dir-visible) * var(--v-vertical_bar_width, 0px))) !important; opacity: 1 !important; transition-delay: 0s !important; } #browser > #st_splitter { display: none !important; } `); }, loadstyle(win) { try { win.windowUtils.loadSheetUsingURIString(this.style, win.windowUtils.USER_SHEET); } catch (e) {} }, removestyle(win) { try { win.windowUtils.removeSheetUsingURIString(this.style, win.windowUtils.USER_SHEET); } catch (e) {} }, }; CustomizableUI.createWidget({ id: "sidebar_tabs_button", label: label, tooltiptext: tooltiptext, defaultArea: CustomizableUI.AREA_NAVBAR, localized: false, onBeforeCreated(doc) { if (Services.prefs.getBoolPref(pref, true)) sidebar_tabs_button.loadstyle(doc.defaultView); }, onCreated: function(btn) { btn.style.setProperty("list-style-image", `url("${img}")`); }, onCommand: function(e) { if (!e.shiftKey) e.target.sidebar_tabs_toggle(); else { let prf = Services.prefs.getBoolPref(pref, true), loadremove = !prf ? "loadstyle" : "removestyle"; Services.prefs.setBoolPref(pref, !prf); for (let win of CustomizableUI.windows) sidebar_tabs_button[loadremove](win); } } }); })();} catch(e) {}
А добавить в
var itemsToClear = [
Да вроде работает, по крайней мере куки и историю удаляет.
Я почему то думал, что там к privacy.cpd. привязка.
Отредактировано _zt (13-06-2024 22:01:25)
Отсутствует
Нет, не просто
Не просто это то что сейчас, раньше был просто стиль но это было не полноценное решение, сейчас можно изменять размер сайдбара, при перетаскивании или открытии ссылок сайдбар автоматически открывается ну и т.д. Но изменить режим работы на лету без перезагрузки довольно сложно так что пожалуй я не стану этого делать чтобы не усложнять. Но можете продолжать использовать этот стиль для обычного режима сайдбара, немного подправить только надо, если надо?
кнопочки добавить в историю и закладки "Свернуть все папки". Типа этих
Ну тут видимо лучше отдельные скрипты использовать это другие документы chrome://browser/content/places/(bookmarksSidebar | historySidebar).xhtml
а Sidebar Tabs только загружает эти документы но работает в основном chrome://browser/content/browser.xhtml
Отредактировано Vitaliy V. (13-06-2024 22:54:21)
Отсутствует
Vitaliy V.
Как для обычного, т.е. если я включу через этот скрипт автоскрытие, то автооткрытия не будет?
В общем, не важно, возможность переключения режима полезнее. Подправьте пожалуйста. Тогда можно просто ЛКМ, ПКМ, без модификаторов. ЛКМ - просто открытие/закрытие без изменения вкладки, а ПКМ режим.
но работает в основном chrome://browser/content/browser.xhtml
Понятно.
Отредактировано _zt (13-06-2024 23:13:50)
Отсутствует
Как вызвать информацию о странице? win.BrowserPageInfo(); не работает.
Vitaliy V.
Когда-то в боковой панели можно было открывать сайты. С тех пор у меня сохранилась кнопка.
Можно ли сделать так, чтобы сайт открывался в Sidebar Tabs из кнопки (т.е., если закрыт - открылся Sidebar Tabs на вкладке "Сайты", если открыт - перешёл на таб "Сайты" и открыл сайт)? Я видел пример с Вашим сайтом, но "не вкурил", как это повесить на кнопку, если такое возможно.
try { CustomizableUI.createWidget({ id: "add-decoder-app", type: "custom", label: "Декодеры", tooltiptext: [ "ЛКМ: Декодер Арт. Лебедева", "ПКМ: Универсальный декодер" ].join("\n"), localized: false, onBuild: function(document) { var trbn = document.createXULElement("toolbarbutton"); trbn.id = this.id; trbn.tooltipText = this.tooltiptext; trbn.label = this.label; trbn.setAttribute("context", false); trbn.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAQAAAAAAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAD///8AraXnAKWl5wCEe94Ac3PeAHNr1gAhGMYAGBC9ABgIvQAICL0AEAC9AAgAvQAAALUAAAAAAAAAAAAAAAAAiYmJiYmJiYiYmJiYmJiYmYmJiYmJiYmIiZmZmZmZmZmZmZmJiYmJiYkBBjBQBQOGmQEHMFAFA5iJAQdAUAUDh5kBCDBQBQOYiQEIMFAFA4iZAQYwUAUDmImJiYmJiYmJmJiYmJiYmJiJiYmJiYmJiZiYmJiYmJiYiYmJiYmJiYkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); trbn.addEventListener("click", function(event) { var win = event.target.ownerDocument.defaultView; win.SidebarController.hide(); if (event.button == 0) { win.gBrowser.selectedTab = win.gBrowser.addWebTab("https://www.artlebedev.ru/decoder/"); } if (event.button == 2) { win.gBrowser.selectedTab = win.gBrowser.addWebTab("https://2cyr.com/decode/"); } }, false); trbn.classList.add("toolbarbutton-1"); trbn.classList.add("chromeclass-toolbar-additional"); return trbn; } }); } catch(e) {}
Отсутствует
Как вызвать информацию о странице? win.BrowserPageInfo(); не работает.
Попробуйте так: win.BrowserCommands.pageInfo();
«The Truth Is Out There»
Отсутствует
если я включу через этот скрипт автоскрытие, то автооткрытия не будет?
В скрипте Sidebar Tabs должно быть AUTO_HIDE = false, если true то не сможете включить обычный режим.
также не менять ID = "ucf_sidebar_tabs"
С данным скриптом будет только "урезанное" автоскрытие, скрипт удаляет оригинальную кнопку
(async ( id = "ucf_sidebar_tabs_button", label = "Sidebar Tabs", tooltiptext = "ЛКМ: Sidebar Tabs\nСКМ:\nПКМ: Toggle AutoHide", img = "resource://ucf_sidebar_tabs", pref = "extensions.ucf.sidebar_tabs.auto_hide", sidebar_tabs = { get style() { delete this.style; return this.style = `data:text/css;charset=utf-8,${encodeURIComponent(` #browser > #st_toolbox { --v-sidebar-min-width: 10px; --v-sidebar-transition-delay-show: .3s; --v-sidebar-transition-delay-hide: 2s; --v-sidebar-transition-duration: .3s; /* ********************************************** */ position: relative !important; z-index: 2 !important; min-width: var(--v-sidebar-tabs-width) !important; width: var(--v-sidebar-tabs-width) !important; max-width: var(--v-sidebar-tabs-width) !important; overflow: hidden !important; opacity: 0 !important; --v-sidebar-margin-max-width: calc(-1 * var(--v-sidebar-tabs-width)); --v-sidebar-transform-locale-dir: -1; --v-sidebar-transform-locale-dir-visible: 1; margin-inline-start: 0 !important; margin-inline-end: var(--v-sidebar-margin-max-width) !important; transform: translateX(calc(var(--v-sidebar-transform-locale-dir) * (var(--v-sidebar-tabs-width) - var(--v-sidebar-min-width)))) !important; &[sidebar_tabs_auto_hide] { transition-timing-function: linear, step-start, linear !important; transition-delay: var(--v-sidebar-transition-delay-hide), calc(var(--v-sidebar-transition-delay-hide) + var(--v-sidebar-transition-duration)), 0s !important; transition-duration: var(--v-sidebar-transition-duration), 0s, .2s !important; transition-property: transform, opacity, margin-top !important; } :root[sidebar_tabs_start="false"] & { margin-inline-start: var(--v-sidebar-margin-max-width) !important; margin-inline-end: 0 !important; } :root[sidebar_tabs_start="false"]:-moz-locale-dir(ltr) &, :root[sidebar_tabs_start="true"]:-moz-locale-dir(rtl) & { --v-sidebar-transform-locale-dir: 1; --v-sidebar-transform-locale-dir-visible: -1; } &:hover { transform: translateX(0px) !important; opacity: 1 !important; transition-delay: var(--v-sidebar-transition-delay-show), var(--v-sidebar-transition-delay-show), 0s !important; } :root[v_vertical_bar_start="true"][sidebar_tabs_start="true"]:is([v_vertical_bar_visible="visible"],[v_vertical_bar_sidebar="true"]) &, :root[v_vertical_bar_start="false"][sidebar_tabs_start="false"]:is([v_vertical_bar_visible="visible"],[v_vertical_bar_sidebar="true"]) & { transform: translateX(calc(var(--v-sidebar-transform-locale-dir-visible) * var(--v-vertical-bar-width, 0px))) !important; opacity: 1 !important; transition-delay: 0s !important; } :root[v_vertical_bar_visible] & { padding-inline: 0 !important; } } #browser > #st_splitter { display: none !important; } `)}`; }, async loadstyle(win) { win.windowUtils.loadSheetUsingURIString(this.style, win.windowUtils.USER_SHEET); win.setTimeout(() => win.ucf_custom_script_win.ucf_sidebar_tabs.toolbox.setAttribute("sidebar_tabs_auto_hide", "true"), 0); }, async removestyle(win) { win.windowUtils.removeSheetUsingURIString(this.style, win.windowUtils.USER_SHEET); win.ucf_custom_script_win.ucf_sidebar_tabs.toolbox.removeAttribute("sidebar_tabs_auto_hide"); }, }, ) => CustomizableUI.createWidget({ id, label, tooltiptext, defaultArea: CustomizableUI.AREA_NAVBAR, localized: false, onBeforeCreated_(doc) { if (Services.prefs.getBoolPref(pref, true)) sidebar_tabs.loadstyle(doc.defaultView); }, onBeforeCreated(doc) { this.onBeforeCreated = this.onBeforeCreated_; this.onBeforeCreated_(doc); CustomizableUI.destroyWidget("ucf_sidebar_tabs"); }, onCreated(btn) { btn.style.setProperty("list-style-image", `url("${img}")`); btn.setAttribute("context", ""); var win = btn.ownerGlobal; btn.checked = win.ucf_custom_script_win.ucf_sidebar_tabs._open; win.ucf_custom_script_win.ucf_sidebar_tabs.button = btn; }, onClick(e) { switch (e.button) { case 0: e.view.ucf_custom_script_win.ucf_sidebar_tabs.toggle(); break; case 1: case 2: let prf = Services.prefs.getBoolPref(pref, true), loadremove = !prf ? "loadstyle" : "removestyle"; Services.prefs.setBoolPref(pref, !prf); for (let win of CustomizableUI.windows) sidebar_tabs[loadremove](win); break; } }, }))();
как это повесить на кнопку
Как то так
(async ( id = "add-decoder-app", sidebar_tab = 5, // в какой по счету начиная с 1 открывать вкладку label = "Декодеры", tooltiptext = "ЛКМ: Декодер Арт. Лебедева\nСКМ:\nПКМ: Универсальный декодер", img = "data:image/x-icon;base64,AAABAAEAEBAQAAAAAAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAD///8AraXnAKWl5wCEe94Ac3PeAHNr1gAhGMYAGBC9ABgIvQAICL0AEAC9AAgAvQAAALUAAAAAAAAAAAAAAAAAiYmJiYmJiYiYmJiYmJiYmYmJiYmJiYmIiZmZmZmZmZmZmZmJiYmJiYkBBjBQBQOGmQEHMFAFA5iJAQdAUAUDh5kBCDBQBQOYiQEIMFAFA4iZAQYwUAUDmImJiYmJiYmJmJiYmJiYmJiJiYmJiYmJiZiYmJiYmJiYiYmJiYmJiYkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", ) => CustomizableUI.createWidget({ id, label, tooltiptext, defaultArea: CustomizableUI.AREA_NAVBAR, localized: false, onCreated(btn) { btn.style.setProperty("list-style-image", `url("${img}")`); btn.setAttribute("context", ""); }, onClick(e) { var win = e.view; switch (e.button) { case 0: win.ucf_custom_script_win.ucf_sidebar_tabs.setPanel(sidebar_tab - 1, "https://www.artlebedev.ru/decoder/"); break; case 1: case 2: win.ucf_custom_script_win.ucf_sidebar_tabs.setPanel(sidebar_tab - 1, "https://2cyr.com/decode/"); break; } }, }))();
Отсутствует
Vitaliy V. Спасибо.
Извините за навязчивость. Попробовал, и мысль засвербила.
Можно сделать вместо ЛКМ/СКМ/ПКМ список? Буду добавлять туда сайты и при клике по кнопке выбирать.
Сейчас попробовал, туда удобно добавить переводчики:
https://translate.google.com/?sl=auto&tl=ru&op=translate
https://translate.yandex.ru/
https://www.translate.com/
да много ещё чего можно... какой-нибудь канал онлайн-тв, например.
UPD: И сепаратор, если можно, темы разделять.
Отредактировано xrun1 (15-06-2024 09:27:57)
Отсутствует
Вопрос: как открыть Историю за месяц в окне Библиотеки ?
win.PlacesCommandHook.showPlacesOrganizer("History"); //покажет только за текущий день
xrun1 пишет
Как вызвать информацию о странице? win.BrowserPageInfo(); не работает.
Попробуйте так: win.BrowserCommands.pageInfo();
Зачем повторы вопросов? на 64 странице задача уже решена, код совместим для старых/новых версий :
BrowserEx("pageInfo"); работают все варианты: BrowserEx("reloadSkipCache") …… BrowserEx("reload")
Ещё в скрипте ucf_hookClicks.js много примеров решений разных вопросов, обсуждавшихся в теме.
Отредактировано Dobrov (15-06-2024 04:43:38)
Отсутствует
работают все варианты:
1. Разница в том, что Вы - разработчик и должны учитывать варианты. А я пользователь последней версии, в которой команда должна работать. Меня не интересует настройка в моём варианте предыдущих версий. В облаке есть бэкапы моих профилей с 80-й версии, установлю и откачусь, если понадобится.
2. Задал поиск в теме "win.BrowserPageInfo();", ничего не нашлось. А если бы нашёл Ваш код, что я из него понял?
Отсутствует
xrun1
Это для custom_script.js как и предыдущая кнопка, а то вдруг не в курсе
(async ( id = "ucf-open-in-sidebar-tabs", label = "Открыть в Sidebar Tabs", tooltiptext = "Открыть в Sidebar Tabs", image = "data:image/x-icon;base64,AAABAAEAEBAQAAAAAAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAD///8AraXnAKWl5wCEe94Ac3PeAHNr1gAhGMYAGBC9ABgIvQAICL0AEAC9AAgAvQAAALUAAAAAAAAAAAAAAAAAiYmJiYmJiYiYmJiYmJiYmYmJiYmJiYmIiZmZmZmZmZmZmZmJiYmJiYkBBjBQBQOGmQEHMFAFA5iJAQdAUAUDh5kBCDBQBQOYiQEIMFAFA4iZAQYwUAUDmImJiYmJiYmJmJiYmJiYmJiJiYmJiYmJiZiYmJiYmJiYiYmJiYmJiYkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", menus = [ { lab: "Декодер Арт. Лебедева", url: "https://www.artlebedev.ru/decoder/", tab: 5, icon: image, }, { lab: "Универсальный декодер", url: "https://2cyr.com/decode/", tab: 5, icon: image, separator: true, }, { lab: "Google Переводчик", url: "https://translate.google.com/?sl=auto&tl=ru&op=translate", tab: 5, icon: "chrome://browser/skin/translations.svg", }, ], ) => CustomizableUI.createWidget({ id, type: "custom", label, tooltiptext, defaultArea: CustomizableUI.AREA_NAVBAR, localized: false, handleEvent(e) { this[e.type](e); }, command(e) { var {sidebar_url, sidebar_tab} = e.target; e.view.ucf_custom_script_win.ucf_sidebar_tabs.setPanel(sidebar_tab - 1, sidebar_url); }, popupshowing(e) { var popup = e.currentTarget; var doc = popup.ownerDocument; var frag = doc.createDocumentFragment(); menus.forEach(item => { var {lab, url, tab, icon, separator} = item; var mitem = doc.createXULElement("menuitem"); mitem.setAttribute("label", lab || label); mitem.sidebar_url = url; mitem.sidebar_tab = tab; if (icon) { mitem.className = "menuitem-iconic"; mitem.style.cssText = `list-style-image:url("${icon}");-moz-context-properties:fill,stroke,fill-opacity;stroke:currentColor;fill:currentColor;fill-opacity:var(--toolbarbutton-icon-fill-opacity,.8);`; } frag.append(mitem); if (!separator) return; frag.append(doc.createXULElement("menuseparator")); }); popup.append(frag); popup.addEventListener("command", this); }, onBuild(doc) { var btn = doc.createXULElement("toolbarbutton"); btn.id = this.id; btn.className = "toolbarbutton-1 chromeclass-toolbar-additional"; btn.setAttribute("label", this.label); btn.setAttribute("tooltiptext", this.tooltiptext); btn.setAttribute("type", "menu"); btn.style.setProperty("list-style-image", `url("${image}")`); var mupp = doc.createXULElement("menupopup"); mupp.id = `${this.id}-popup`; mupp.addEventListener("popupshowing", this, {once: true}); btn.append(mupp); return btn; }, }))();
Добавлено 15-06-2024 16:57:37
А что вы на СКМ хотели повесить, какие мысли были?
На ваше усмотрение, можно добавить действие после case 1:
Отредактировано Vitaliy V. (15-06-2024 17:02:31)
Отсутствует
Vitaliy V.
Cпасибо за обе кнопки.
URL-bar History Dropmarker отвалился. Поправите?
Отсутствует
_zt
URL-bar History Dropmarker больше года назад исправлен здесь.
Замените только BrowserReload(); на BrowserCommands.reload();
Добавлено 15-06-2024 21:00:08
Vitaliy V.
Чудо чудесное. Теперь вкладка "Сайты" в Sidebar Tabs у меня активно используется!
Отредактировано xrun1 (15-06-2024 21:00:08)
Отсутствует