следует просто посмотреть как это делает сам браузер, и срисовать себе
С этим я пока не разобрался, хотя не помешало бы такую мелочь самому вычислить.
строго буквально «чтоб он закрывал текущую вкладку» и никак иначе
Да, как раз так и хотел, пункт "Выбрать все вкладки" не использую, и он у меня скрыт стилем. Скрипт собрал, всё работает
CustomizableUI.createWidget({ id: "Close-Tab", label: "Закрыть вкладку", tooltiptext: "Закрыть вкладку", defaultArea: CustomizableUI.AREA_NAVBAR, localized: false, onCreated(btn) { btn.render = this.render; btn._handleClick = this.close; btn.setAttribute("image", "chrome://devtools/skin/images/close.svg"); }, render() { delete this.render; this.render(); this.icon.style.setProperty("padding", "3px", "important"); }, close() { var gb = this.ownerGlobal.gBrowser; gb.removeTab(gb.selectedTab, {animate: true}); } });
Отсутствует
У меня кнопка "Закрыть вкладки..." такая, может кому пригодится. Кто-то помогал сделать, закреплённые вкладки, когда удаление слева или другие не удаляет. Я бы сам так не осилил. Работает, ucf у меня старый.
// Этот скрипт можно использовать для создания кнопок с помощью CustomizableUI.createWidget (() => { var loadscript = name => { try { Services.scriptloader.loadSubScript(`chrome://user_chrome_files/content/custom_scripts/${name}`, globalThis, "UTF-8"); } catch(e) {} }; loadscript("my_buttons.js"); })();
var {classes: Cc, interfaces: Ci, utils: Cu} = Components; var {console} = Cu.import("resource://gre/modules/Console.jsm", {}); try { CustomizableUI.createWidget({ id: "add-select-close-tabs-app", type: "custom", tooltiptext: [ "ЛКМ: Закрыть все вкладки", "Shift+ЛКМ: Закрыть другие вкладки", "Ctrl+ЛКМ: Закрыть слева", "Alt+ЛКМ: Закрыть справа", ].join("\n"), onBuild: function(document) { var toolbarbutton_0 = document.createXULElement("toolbarbutton"); toolbarbutton_0.id = this.id; toolbarbutton_0.tooltipText = this.tooltiptext; toolbarbutton_0.label = "Закрыть все вкладки"; toolbarbutton_0.setAttribute("context", false); toolbarbutton_0.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFLSURBVDhPYxg8wD5wy1y7gK1/7AO3/ncI2nq7uOnk3cq20//BuOP07b1Hnt09eurl/6OnXvwB0rOh2hAAphmGU0uOQDRD8ZrN94CaQQZADIFqQwBkzSAcnLTnVkLewWMgnFZy6Ep9z9kr3dMuHoNhqDYEQDeAEIZqQ4Dd937/JwVDtSEANkX4MFQbAmBThA9DtSEANkXIeM/t7/8vz1v9/1590//rE2f8/+pkIQ3VCgHYNMEwSPOLtOT/X1ws/n9xNvv/xRVIO5l9+OxsoQvVjt+AS/PXgDX/vXnt/4/q4v9/b1z9/y0tGmiY6S6odvwGgJwNshmk+f+fP/9/790JcQnQFVDt+A0A+RnsAqDNIM3/Prz//y0lEmTAZah2/OCrvZkM0LnvvqXFgG3+lgzUDAoHZ9N4qBLC4LOriQ7Qxt0gZwMNuQLRzMAAAAEG9BCOlZEaAAAAAElFTkSuQmCC"); toolbarbutton_0.addEventListener("click", function(event) { var win = event.target.ownerDocument.defaultView; if (event.button == 0) { if (event.shiftKey) { win.gBrowser.removeAllTabsBut(win.gBrowser.selectedTab); } else if (event.ctrlKey) { var ctab = win.gBrowser.selectedTab, tabs; if (ctab.multiselected) tabs = win.gBrowser.visibleTabs.filter(tab => !tab.multiselected && !tab.pinned); else tabs = win.gBrowser.visibleTabs.filter(tab => !tab.pinned); var index = tabs.indexOf(ctab); tabs = tabs.slice(0, (index != -1) ? index : tabs.length); tabs.forEach((tab) => { win.gBrowser.removeTab(tab); }); } else if (event.altKey) { var ctab = win.gBrowser.selectedTab, tabs; if (ctab.multiselected) tabs = win.gBrowser.visibleTabs.filter(tab => !tab.multiselected && !tab.pinned); else tabs = win.gBrowser.visibleTabs.filter(tab => !tab.pinned); var index = tabs.indexOf(ctab); tabs = tabs.slice((index != -1) ? (index + 1) : 0, tabs.length); tabs.forEach((tab) => { win.gBrowser.removeTab(tab); }); } else { win.gBrowser.selectAllTabs(); win.gBrowser.removeMultiSelectedTabs(); } } }, false); toolbarbutton_0.classList.add("toolbarbutton-1"); toolbarbutton_0.classList.add("chromeclass-toolbar-additional"); return toolbarbutton_0; } }); } catch(e) {}
Отредактировано xrun1 (15-12-2021 19:49:44)
Отсутствует
куда лучше подключить
Что значит лучше?
Либо добавить в custom_script.js или подобный, либо отдельным файлом.
Придумываешь название, создаёшь, и прописываешь в CustomStylesScripts.jsm
(это если использовать встроенный загрузчик)
var UcfStylesScripts = { /** ************************▼ Настройки ▼************************ */ ....... scriptsbackground: [ // В фоне [System Principal] ....... { path: "closeOtherTabs.js" }, ], /** ************************▲ Настройки ▲************************ */ };
никак не хочет работать
Что значит не хочет работать?
Открывает вкладки вместо того, чтобы закрывать?
id'шник проверь, чтоб уникальный был.
Иконки, кстати, такой как там у тебя может не быть, пропиши свою.
Кэш ещё может залипнуть, закрой браузер и удали папку startupCache руками.
Отсутствует
my_buttons.jsВыделить кодКод:
var {classes: Cc, interfaces: Ci, utils: Cu} = Components; var {console} = Cu.import("resource://gre/modules/Console.jsm", {}); try { CustomizableUI.createWidget({ id: "add-select-close-tabs-app", type: "custom", tooltiptext: [ "ЛКМ: Закрыть все вкладки", "Shift+ЛКМ: Закрыть другие вкладки", "Ctrl+ЛКМ: Закрыть слева", "Alt+ЛКМ: Закрыть справа", ].join("\n"), onBuild: function(document) { var toolbarbutton_0 = document.createXULElement("toolbarbutton"); toolbarbutton_0.id = this.id; toolbarbutton_0.tooltipText = this.tooltiptext; toolbarbutton_0.label = "Закрыть все вкладки"; toolbarbutton_0.setAttribute("context", false); toolbarbutton_0.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFLSURBVDhPYxg8wD5wy1y7gK1/7AO3/ncI2nq7uOnk3cq20//BuOP07b1Hnt09eurl/6OnXvwB0rOh2hAAphmGU0uOQDRD8ZrN94CaQQZADIFqQwBkzSAcnLTnVkLewWMgnFZy6Ep9z9kr3dMuHoNhqDYEQDeAEIZqQ4Dd937/JwVDtSEANkX4MFQbAmBThA9DtSEANkXIeM/t7/8vz1v9/1590//rE2f8/+pkIQ3VCgHYNMEwSPOLtOT/X1ws/n9xNvv/xRVIO5l9+OxsoQvVjt+AS/PXgDX/vXnt/4/q4v9/b1z9/y0tGmiY6S6odvwGgJwNshmk+f+fP/9/790JcQnQFVDt+A0A+RnsAqDNIM3/Prz//y0lEmTAZah2/OCrvZkM0LnvvqXFgG3+lgzUDAoHZ9N4qBLC4LOriQ7Qxt0gZwMNuQLRzMAAAAEG9BCOlZEaAAAAAElFTkSuQmCC"); toolbarbutton_0.addEventListener("click", function(event) { var win = event.target.ownerDocument.defaultView; if (event.button == 0) { if (event.shiftKey) { win.gBrowser.removeAllTabsBut(win.gBrowser.selectedTab); } else if (event.ctrlKey) { var ctab = win.gBrowser.selectedTab, tabs; if (ctab.multiselected) tabs = win.gBrowser.visibleTabs.filter(tab => !tab.multiselected && !tab.pinned); else tabs = win.gBrowser.visibleTabs.filter(tab => !tab.pinned); var index = tabs.indexOf(ctab); tabs = tabs.slice(0, (index != -1) ? index : tabs.length); tabs.forEach((tab) => { win.gBrowser.removeTab(tab); }); } else if (event.altKey) { var ctab = win.gBrowser.selectedTab, tabs; if (ctab.multiselected) tabs = win.gBrowser.visibleTabs.filter(tab => !tab.multiselected && !tab.pinned); else tabs = win.gBrowser.visibleTabs.filter(tab => !tab.pinned); var index = tabs.indexOf(ctab); tabs = tabs.slice((index != -1) ? (index + 1) : 0, tabs.length); tabs.forEach((tab) => { win.gBrowser.removeTab(tab); }); } else { win.gBrowser.selectAllTabs(); win.gBrowser.removeMultiSelectedTabs(); } } }, false); toolbarbutton_0.classList.add("toolbarbutton-1"); toolbarbutton_0.classList.add("chromeclass-toolbar-additional"); return toolbarbutton_0; } }); } catch(e) {}
Интересная кнопочка.
Только немешало бы в неё добавить "защиту от дурака" на все действия - подтверждение на закрытие вкладок.
Что-то типа такого:
Отредактировано unter_officer (15-12-2021 21:20:15)
«The Truth Is Out There»
Отсутствует
xrun1
Спасибо за кнопку"показа/скрытия панели закладок и доп.панели".
Win7
Отсутствует
Dumby
Посмотрите пожалуйста, я правильно отредактировал?
try { CustomizableUI.createWidget({ id: "additional-toolbars-button", type: "custom", label: "Доп. панели", tooltiptext: [ "ЛКМ: Переключить верт. панель", "ПКМ: Переключить доп. панель" ].join("\n"), localized: false, onBuild(doc) { var trbn = doc.createXULElement("toolbarbutton"); trbn.id = this.id; trbn.tooltipText = this.tooltiptext; trbn.label = this.label; trbn.className = "toolbarbutton-1 chromeclass-toolbar-additional"; trbn.setAttribute("context", false); trbn.setAttribute("image", "chrome://user_chrome_files/content/custom_styles/svg/layer-visible-off.svg"); trbn.addEventListener("click", function(e) { var pref = "browser.add.toolbars.visibility"; if (e.button == 0) { e.preventDefault(); e.stopPropagation(); CustomizableUI.setToolbarVisibility("ucf-additional-vertical-bar", doc.querySelector("#ucf-additional-vertical-bar").collapsed); } else if (e.button == 2) { e.preventDefault(); e.stopPropagation(); CustomizableUI.setToolbarVisibility("ucf-additional-top-bar", doc.querySelector("#ucf-additional-top-bar").collapsed); } }, false); return trbn; }, }); } catch(e) {}
Отсутствует
unter_officer
Для меня такое сделать нереально. Не представляю, как в кнопку прикрутить confirm()... Да и не нужно. Кнопка "Восстановить" из расширения ATB Vitaliy V. восстанавливает все закрытые вкладки моей кнопкой. Если сразу озаботиться, конечно.
kokoss
Я ещё для боковой панели менял кнопку "Закладки" для экономии места, вдруг пригодится.
try { CustomizableUI.createWidget({ id: "add-view-bookmarks-sidebar-button", type: "custom", label: "Закладки Библиотека История", tooltiptext: "ЛКМ: Показать / Скрыть Закладки\nСКМ: Открыть Библиотеки в табе\nПКМ: Показать / Скрыть Историю", localized: false, onBuild: function(doc) { var win = doc.defaultView; var trbn_0 = doc.createElementNS(ns_xul, "toolbarbutton"); trbn_0.id = "add-view-bookmarks-sidebar-button"; trbn_0.className = "toolbarbutton-1 chromeclass-toolbar-additional"; trbn_0.setAttribute("label", "Закладки Библиотека История"); trbn_0.setAttribute("context", "false"); trbn_0.setAttribute("tooltiptext", "ЛКМ: Показать / Скрыть Закладки\nСКМ: Открыть Библиотеки в табе\nПКМ: Показать / Скрыть Историю"); trbn_0.addEventListener("click", function(e) { if (e.button == 0) { if ("SidebarUI" in win) win.SidebarUI.toggle("viewBookmarksSidebar"); else if ("toggleSidebar" in win) win.toggleSidebar("viewBookmarksSidebar"); } else if (e.button == 1) { var url="chrome://browser/content/places/places.xhtml"; win.SidebarUI.hide(); /* Для CB, открывает "История" в окне "Библиотека" PlacesCommandHook.showPlacesOrganizer('History'); */ win.gBrowser.selectedTab = win.gBrowser.addTrustedTab(url); } else if (e.button == 2) { if ("SidebarUI" in win) win.SidebarUI.toggle("viewHistorySidebar"); else if ("toggleSidebar" in win) win.toggleSidebar("viewHistorySidebar"); } }); return trbn_0; } }); } catch(e) {}
Отсутствует
Посмотрите пожалуйста, я правильно отредактировал?
Не люблю я вопросы про «правильно», откуда мне знать что есть правильно.
Если работает, и страшных косяков нет (а их нет) — значит правильно.
Вот, например, в коде определяется переменная pref, но нигде не используется.
Или зачем e.preventDefault(); e.stopPropagation(); я же не знаю.
Превент может использоваться для предотвращения появления контекстного
меню при ПКМ (Windows), но там уже решено, что этого контекстного меню
не будет совсем никогда, поскольку установлен атрибут "context".
Или tooltiptext массивом. Когда там целая батарея подсказочных строк, то имеет смысл.
А парочку вполне можно и одной строкой записать. Это не вопрос правильности,
а вопрос предпочтения. Вот там widget создаётся как type: "custom", не знаю,
может это как-то внутренне оптимальнее, но чего не сделаешь, чтоб записать попроще, типа
(async () => CustomizableUI.createWidget({ label: "Доп. панели", tooltiptext: "ЛКМ: Переключить верт. панель\nПКМ: Переключить доп. панель", id: "additional-toolbars-button", localized: false, onCreated(btn) { btn.toggleAttribute("context"); btn.setAttribute("image", "chrome://user_chrome_files/content/custom_styles/svg/layer-visible-off.svg"); }, 0: "ucf-additional-vertical-bar", 2: "ucf-additional-top-bar", onClick(e) { var id = this[e.button]; id && CustomizableUI.setToolbarVisibility(id, e.view.document.getElementById(id).collapsed); } }))();
Отсутствует
Dumby
По мне судить не надо, судите по Vitaliy V., это его код.
Я в скриптах разбираюсь на уровне - что нибудь добавить/удалить по доступному примеру. (Сколько раз это повторить надо?) Поэтому и спросил. Спасибо за готовый код, это то что в итоге мне нужно было.
Отсутствует
my_buttons.jsВыделить кодКод:
var {classes: Cc, interfaces: Ci, utils: Cu} = Components; var {console} = Cu.import("resource://gre/modules/Console.jsm", {}); try { CustomizableUI.createWidget({ id: "add-select-close-tabs-app", type: "custom", tooltiptext: [ "ЛКМ: Закрыть все вкладки", "Shift+ЛКМ: Закрыть другие вкладки", "Ctrl+ЛКМ: Закрыть слева", "Alt+ЛКМ: Закрыть справа", ].join("\n"), onBuild: function(document) { var toolbarbutton_0 = document.createXULElement("toolbarbutton"); toolbarbutton_0.id = this.id; toolbarbutton_0.tooltipText = this.tooltiptext; toolbarbutton_0.label = "Закрыть все вкладки"; toolbarbutton_0.setAttribute("context", false); toolbarbutton_0.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFLSURBVDhPYxg8wD5wy1y7gK1/7AO3/ncI2nq7uOnk3cq20//BuOP07b1Hnt09eurl/6OnXvwB0rOh2hAAphmGU0uOQDRD8ZrN94CaQQZADIFqQwBkzSAcnLTnVkLewWMgnFZy6Ep9z9kr3dMuHoNhqDYEQDeAEIZqQ4Dd937/JwVDtSEANkX4MFQbAmBThA9DtSEANkXIeM/t7/8vz1v9/1590//rE2f8/+pkIQ3VCgHYNMEwSPOLtOT/X1ws/n9xNvv/xRVIO5l9+OxsoQvVjt+AS/PXgDX/vXnt/4/q4v9/b1z9/y0tGmiY6S6odvwGgJwNshmk+f+fP/9/790JcQnQFVDt+A0A+RnsAqDNIM3/Prz//y0lEmTAZah2/OCrvZkM0LnvvqXFgG3+lgzUDAoHZ9N4qBLC4LOriQ7Qxt0gZwMNuQLRzMAAAAEG9BCOlZEaAAAAAElFTkSuQmCC"); toolbarbutton_0.addEventListener("click", function(event) { var win = event.target.ownerDocument.defaultView; if (event.button == 0) { if (event.shiftKey) { win.gBrowser.removeAllTabsBut(win.gBrowser.selectedTab); } else if (event.ctrlKey) { var ctab = win.gBrowser.selectedTab, tabs; if (ctab.multiselected) tabs = win.gBrowser.visibleTabs.filter(tab => !tab.multiselected && !tab.pinned); else tabs = win.gBrowser.visibleTabs.filter(tab => !tab.pinned); var index = tabs.indexOf(ctab); tabs = tabs.slice(0, (index != -1) ? index : tabs.length); tabs.forEach((tab) => { win.gBrowser.removeTab(tab); }); } else if (event.altKey) { var ctab = win.gBrowser.selectedTab, tabs; if (ctab.multiselected) tabs = win.gBrowser.visibleTabs.filter(tab => !tab.multiselected && !tab.pinned); else tabs = win.gBrowser.visibleTabs.filter(tab => !tab.pinned); var index = tabs.indexOf(ctab); tabs = tabs.slice((index != -1) ? (index + 1) : 0, tabs.length); tabs.forEach((tab) => { win.gBrowser.removeTab(tab); }); } else { win.gBrowser.selectAllTabs(); win.gBrowser.removeMultiSelectedTabs(); } } }, false); toolbarbutton_0.classList.add("toolbarbutton-1"); toolbarbutton_0.classList.add("chromeclass-toolbar-additional"); return toolbarbutton_0; } }); } catch(e) {}
Dumby
Возможно ли в эту кнопку, на все действия, прикрутить горячие клавиши для клавиатуры, например Shift+1, Shift+2, Shift+3, Shift+4 ?
«The Truth Is Out There»
Отсутствует
Что значит лучше?
Либо добавить в custom_script.js или подобный, либо отдельным файлом.
Придумываешь название, создаёшь, и прописываешь в CustomStylesScripts.jsm
(это если использовать встроенный загрузчик)
Типа про это как раз и спрашивал, в какой из них лучше, в чём разница?
Что значит не хочет работать?
Открывает вкладки вместо того, чтобы закрывать?
В смысле, что она ваще не появлялась.
id'шник проверь, чтоб уникальный был.
Ага, это и было причиной, видно с чем-то совпало, после изменения id, кнопка появилась и работает. Спасибо.
Отсутствует
Я ещё для боковой панели менял кнопку "Закладки" для экономии места, вдруг пригодится.
скрытый текст
И как это работает? А то у меня в 95 не работает!
Отредактировано kokoss (16-12-2021 17:50:38)
Win7
Отсутствует
Возможно ли в эту кнопку, на все действия, прикрутить горячие клавиши для клавиатуры, например Shift+1, Shift+2, Shift+3, Shift+4 ?
Обязательно в кнопку?
Это же надо вмешиваться внутрь или цепляться снаружи.
Может сойдёт какой-нибудь аналог отдельным независимым кодом, например
(это для custom_script_win.js, и, я надеюсь, вопрос был не о Firefox 52)
(async anim => { var re = /^(?:Digit|Numpad)(1|2|3|4)$/; var funcs = { 1: () => { gBrowser.selectAllTabs(); gBrowser.removeMultiSelectedTabs(); }, 2: t => gBrowser.removeAllTabsBut(t), 3: t => gBrowser.removeTabsToTheStartFrom(t, anim), 4: t => gBrowser.removeTabsToTheEndFrom(t, anim), }; var args = ["keydown", e => { if ( e.ctrlKey || e.altKey || !re.test(e.code) || e.repeat || docShell.isCommandEnabled("cmd_insertText") ) return; var num = RegExp.$1; if (e.shiftKey || e.code.startsWith("N") && e.getModifierState("NumLock") && e.key != num) e.preventDefault(), funcs[num](gBrowser.selectedTab); }, true]; addEventListener(...args); var id = Symbol(), ucf = ucf_custom_script_win; ucf.unloadlisteners.push(id); ucf[id] = {destructor: () => removeEventListener(...args)}; })({animate: true});
у меня в 95 не работает!
Там ns_xul не определён, вот и не работает.
И иконки нет, но это уже мелочь.
Отсутствует
Обязательно в кнопку?
Это же надо вмешиваться внутрь или цепляться снаружи.
Может сойдёт какой-нибудь аналог отдельным независимым кодом, например
(это для custom_script_win.js, и, я надеюсь, вопрос был не о Firefox 52)скрытый текстВыделить кодКод:
(async anim => { var re = /^(?:Digit|Numpad)(1|2|3|4)$/; var funcs = { 1: () => { gBrowser.selectAllTabs(); gBrowser.removeMultiSelectedTabs(); }, 2: t => gBrowser.removeAllTabsBut(t), 3: t => gBrowser.removeTabsToTheStartFrom(t, anim), 4: t => gBrowser.removeTabsToTheEndFrom(t, anim), }; var args = ["keydown", e => { if ( e.ctrlKey || e.altKey || !re.test(e.code) || e.repeat || docShell.isCommandEnabled("cmd_insertText") ) return; var num = RegExp.$1; if (e.shiftKey || e.code.startsWith("N") && e.getModifierState("NumLock") && e.key != num) e.preventDefault(), funcs[num](gBrowser.selectedTab); }, true]; addEventListener(...args); var id = Symbol(), ucf = ucf_custom_script_win; ucf.unloadlisteners.push(id); ucf[id] = {destructor: () => removeEventListener(...args)}; })({animate: true});
Dumby, большое спасибо!
P.S. Вопрос конечно же был не о Firefox 52.
Отредактировано unter_officer (16-12-2021 22:34:18)
«The Truth Is Out There»
Отсутствует
Там ns_xul не определён, вот и не работает.
И иконки нет, но это уже мелочь.
Иконку то я прикрутил, только не мог понять почему у него работает, а у меня нет, теперь понятно. Спасибо за подсказку!
Win7
Отсутствует
kokoss
Это была не отдельная кнопка, я правил файл user_chrome.js. А для него иконки уже прописаны в vertical_top_bottom_bar\vertical_top_bottom_bar.css. Из-за этого, наверное, получилась неразбериха.
По мне судить не надо, судите по Vitaliy V., это его код.
Не, это мой код, он там двумя постами выше. Кнопку делал, когда только-только Vitaliy V. сделал ucf. Делал по аналогии c кнопками, которые уже были в ucf. Поэтому там и type: "custom". А e.preventDefault(); e.stopPropagation(); у меня затесались по старой памяти от CB.
Отсутствует
Может кому пригодится:
try { CustomizableUI.createWidget({ id: "add-personalization-button-app", type: "custom", tooltiptext: [ "ЛКМ: Персонализация", "СКМ: about:about", "ПКМ: about:support" ].join("\n"), onBuild: function(document) { var toolbarbutton_0 = document.createXULElement("toolbarbutton"); toolbarbutton_0.id = this.id; toolbarbutton_0.tooltipText = this.tooltiptext; toolbarbutton_0.label = "Персонализация about:about about:support"; toolbarbutton_0.image = "chrome://browser/content/robot.ico"; toolbarbutton_0.setAttribute("context", false); toolbarbutton_0.addEventListener("click", function(event) { var win = event.target.ownerDocument.defaultView; win.SidebarUI.hide(); if (event.button == 0) { win.gCustomizeMode.enter(); } if (event.button == 1) { win.gBrowser.selectedTab = win.gBrowser.addTrustedTab('about:about'); } if (event.button == 2) { win.gBrowser.selectedTab = win.gBrowser.addTrustedTab('about:support'); } }, false); toolbarbutton_0.classList.add("toolbarbutton-1"); toolbarbutton_0.classList.add("chromeclass-toolbar-additional"); return toolbarbutton_0; } }); } catch(e) {}
Отредактировано kokoss (17-12-2021 18:57:31)
Win7
Отсутствует
Dumby
Если не сложно, не могли бы вы сделать пример-заготовку для подобной кнопки?
Что-то вроде нескольких кнопок в одной.
для FF 91.
«The Truth Is Out There»
Отсутствует
Dumby
Уже порядочно долго использую Ваш скрипт для открытия новой вкладки двойным кликом на панели вкладок.
А можно ещё сделать скрипт, чтоб не происходил захват и перетаскивание окна при одиночном клике на панели вкладок?
А то бывает, как-то дрогнет что ли рука и происходит захват и сдвиг окна. Ну такая опция была и сейчас присутствует в новом Tab Mix Plus.
Очень хотелось бы вернуть эту функцию в виде скрипта
Отсутствует
А можно ещё сделать скрипт, чтоб не происходил захват и перетаскивание окна при одиночном клике на панели вкладок?
Возможно я ошибаюсь, но вроде это можно реализовать стилем. Что-то типа такого:
ID_ПАНЕЛИ { -moz-window-dragging: no-drag !important; }
«The Truth Is Out There»
Отсутствует
Возможно я ошибаюсь, но вроде это можно реализовать стилем. Что-то типа такого:
Нет, Вы не ошибаетесь, действительно можно стилем. Спасибо за подсказку
Сделал стилем, добавил ещё панель закладок, работает прекрасно, вопрос закрыт
Отсутствует
Если не сложно, не могли бы вы сделать пример-заготовку для подобной кнопки?
Ещё как сложно. Вопрос слишком общего характера.
Почти ничего не дано. Какой нужен уровень абстракции, какие там задачи,
что именно не получается, только гадать остаётся. Ладно, набрал простенький вариант.
Насколько далеко, и с какой стороны, это будет от желаемого — неизвестно.
Короче, лучше бы побольше конкретики.
(async () => CustomizableUI.createWidget({ label: "Some Label", tooltiptext: "Some Tooltip Text", id: "_some_unique_identifier_", localized: false, onCreated(btn) { btn.setAttribute("type", "menu"); btn.setAttribute("image", "chrome://global/skin/narrate/headphone-active.svg"); var doc = btn.ownerDocument; var popup = doc.createXULElement("menupopup"); popup.creator = this; popup.toggleAttribute("context"); popup.setAttribute("oncommand", "creator.cmd(event);"); popup.setAttribute("oncontextmenu", "hidePopup(); creator.cmd(event);"); for(var item of this.data) { if (!item) { popup.append(doc.createXULElement("menuseparator")); continue; } var menuitem = popup.appendChild(doc.createXULElement("menuitem")); menuitem.linkedItem = item; menuitem.setAttribute("label", item.lab || ""); item.ttt && menuitem.setAttribute("tooltiptext", item.ttt); if (item.img) menuitem.className = "menuitem-iconic", menuitem.setAttribute("image", item.img); } btn.prepend(popup); }, cmd(e) { var it = e.target.linkedItem; it && this[it.fnc](e, it.val); }, data: [ { lab: "Пункт 1", ttt: "Бла", img: "chrome://devtools/skin/images/fox-smiling.svg", fnc: "sayBla", }, { lab: "Пункт 2", ttt: "Трижды Бла", img: "chrome://devtools/skin/images/fox-smiling.svg", fnc: "sayBla", val: 3, }, null, // <= separator { lab: "Пункт 3", fnc: "alertLabel", }, { lab: "Пункт 4", fnc: "viewImgSource", img: "chrome://browser/skin/protections/resolved-breach.svg", }, null, { lab: "Пункт 5", ttt: "Default", img: "chrome://browser/skin/preferences/face-sad.svg", }, ], sayBla(e, val = 1) { Services.prompt.alert(null, null, "Бла ".repeat(val)); }, alertLabel(e) { e.view.alert(e.target.label); }, viewImgSource(e) { var gb = e.view.gBrowser; gb.selectedTab = gb.addTrustedTab( "view-source:" + e.target.image, {index: gb.selectedTab._tPos + 1} ); }, undefined(e) { Services.prompt.alert(null, "Method missing!", "event.button = " + e.button); } }))();
Отсутствует
Короче, лучше бы побольше конкретики.
На многих кнопках вешаются разные действия на клик мыши с модификаторами (Shift+ЛКМ, Ctrl+ПКМ и тому подобное).
Мне тяжеловато запоминать все эти варианты, особенно когда кнопок много, а с моим неважным зрением постоянно вглядываться во всплывающие подсказки тоже тяжело.
Мне проще сделать одну кнопку и добавлять в неё по мере необходимости нужные действия.
Абстрактный пример: "Пункт 1 - Закрыть все вкладки", "Пункт 2 - Восстановить закрытую вкладку", "Пункт 3 - Открыть консоль браузера" и т.д. и т.п.
P.S. Dumby, большое спасибо за кнопку.
Отредактировано unter_officer (18-12-2021 15:16:58)
«The Truth Is Out There»
Отсутствует
Случайно поднял глаза и заметил. В кнопке для адресной строки "Копировать ссылку" в 95 сменился значок. Теперь такой iconURL: "chrome://global/skin/icons/link.svg"
Отсутствует