Мне не важно, где код. Главное, что работает. Осталось вот так
ну если в custom_script_all_win.js больше нет ничего и не будет то логичнее перенести код в custom_script_win.js
можно изменить по быстрому
load_scripts_by_url[location.href]?.(window);
на
load_scripts_by_url["chrome://browser/content/browser.xhtml"](window);
Сделайте пожалуйста еще для этих, желательно так же, что бы можно было файлы в подпапку кинуть:
Extension Options Menu
этот для custom_script.js подходит, изменил, добавил там кое-чего
https://forum.mozilla-russia.org/viewto … 29#p784529
MemoryMinimizationButton
этот подключайте к "chrome://browser/content/browser.xhtml"
а кнопку так же как с SidebarModoki.uc.js
И эту как угодно - ViewImageInTab
это тоже к "chrome://browser/content/browser.xhtml" или в custom_script_win.js
document.querySelector("#context-viewimage").setAttribute("oncommand", 'openWebLinkIn(gContextMenu.imageURL,"tab")');
сделайте пожалуйста для user_chrome_files еще одну кнопку "Переключить Куки" из add_toolbar_buttons
Ну все расширение по частям разберут, вам же вроде Dumby делал для Куки?
razoo
Да можно сделать но не сочетается такое расположение с моим скриптом, так что только без него
Добавлено 29-08-2020 00:21:23
Подскажите для custom_script_win шаблон?
а шаблон почти тот же см. выше для xrun1 это если есть скрипты для боковой панели
а так и старый шаблон годится, только не каждый скрипт подойдет
Отредактировано Vitaliy V. (07-09-2020 12:13:04)
Отсутствует
Vitaliy V. пишет
Да можно сделать но не сочетается такое расположение с моим скриптом, так что только без него
Да просто отлично было бы и без скрипта. Если возможно.
Хотя бы понять, почему селектор #PersonalToolbar не работает.
Отсутствует
Vitaliy V.
MemoryMinimizationButton и ViewImageInTab подключил.
С ExtensionOptionsMenu проблемы.
Значки в конце строк не подхватываются, вместо "+" квадратик, "-" вообще нет.
Ниже скрины вашего и моего скриптов, обратите внимание, что у меня квадратик - символ, а в вашем варианте квадратик-кракозабрик, так как я ни чего в вашем варианте для скриншота не менял. Но для себя попробовал изменить символы на свои, картинка та же, не подхватываются.
// ==UserScript== // @name s_ExtensionOptionsMenu.rus // @include main // @startup UC.extensionOptionsMenu.exec(win); // @shutdown UC.extensionOptionsMenu.destroy(); // @onlyonce // ==/UserScript== // original: https://addons.mozilla.org/en-US/firefox/addon/extension-options-menu/ (function () { 'use strict'; UC.extensionOptionsMenu = { exec: function (win) { var document = win.document; var sspi = document.createProcessingInstruction( 'xml-stylesheet', 'type="text/css" href="data:text/css,' + encodeURIComponent(UC.extensionOptionsMenu.style) + '"' ); document.insertBefore(sspi, document.documentElement); UC.extensionOptionsMenu.styles.push(sspi); }, // config showVersion: true, showHidden: true, showDisabled: true, autoRestart: false, enabledFirst: false, blackListArray: [], populateMenu: function (event) { var prevState; var showItem = true; var popup = event.currentTarget; var document = event.view.document; while (popup.hasChildNodes()) popup.removeChild(popup.firstChild); var addons; (async () => { addons = await AddonManager.getAddonsByTypes(['extension']); })(); var thread = Services.tm.mainThread; while (addons === undefined) thread.processNextEvent(true); addons.sort((a, b) => { var enabledFirst = UC.extensionOptionsMenu.enabledFirst; var ka = (enabledFirst ? a.isActive ? '0' : '1' : '') + ' ' + a.name.toLowerCase(); var kb = (enabledFirst ? b.isActive ? '0' : '1' : '') + ' ' + b.name.toLowerCase(); return (ka < kb) ? -1 : 1; }).forEach(addon => { if (!addon.appDisabled && ((addon.isActive && addon.optionsURL) || ((addon.userDisabled && UC.extensionOptionsMenu.showDisabled) || (!addon.hidden || UC.extensionOptionsMenu.showHidden)))) { var state = addon.isActive; if (UC.extensionOptionsMenu.enabledFirst && (prevState && state !== prevState)) popup.appendChild(document.createXULElement('menuseparator')); prevState = state; var mi = document.createXULElement('menuitem'); var label = addon.name; if (UC.extensionOptionsMenu.showVersion) label = label += ' ' + addon.version; mi.setAttribute('label', label); mi.setAttribute('class', 'menuitem-iconic'); mi.setAttribute('tooltiptext', addon.description + '\nID : ' + addon.id + '\n\nЛКМ : Настройки\nПКМ : Откл. / Включить\nСКМ : Домашняя страница\nCtrl + ЛКМ : Открыть архив\nCtrl + ПКМ : Деинсталлировать\nCtrl + СКМ : Копировать ID'); var icon = addon.iconURL || addon.iconURL64 || UC.extensionOptionsMenu.iconURL || ''; mi.setAttribute('image', icon); mi.addEventListener('click', UC.extensionOptionsMenu.handleClick); mi._Addon = addon; UC.extensionOptionsMenu.setDisable(mi, addon, 0); if (UC.extensionOptionsMenu.blackListArray) { for (var i = 0; i < UC.extensionOptionsMenu.blackListArray.length; i++) { if (UC.extensionOptionsMenu.blackListArray[i] == addon.id.toLowerCase()) { showItem = false; break; } else { showItem = true; } } } if (showItem) popup.appendChild(mi); } }); }, handleClick: function(event) { var win = event.view; var mi = event.currentTarget; if (!('_Addon' in mi)) { return; } var addon = mi._Addon; var pending = addon.pendingOperations & AddonManager.PENDING_UNINSTALL; var hasMdf = event.ctrlKey || event.shiftKey || event.altKey || event.metaKey; switch (event.button) { case 0: if (addon.optionsURL && !hasMdf) UC.extensionOptionsMenu.openAddonOptions(addon, win); else if (event.ctrlKey) UC.extensionOptionsMenu.browseDir(addon); break; case 1: if (addon.homepageURL && !hasMdf) { openURL(addon.homepageURL); closeMenus(mi); } else if (event.ctrlKey) { Cc['@mozilla.org/widget/clipboardhelper;1'].getService(Ci.nsIClipboardHelper).copyString(addon.id); closeMenus(mi); } break; case 2: if (!hasMdf) { if (addon.userDisabled) addon.enable(); else addon.disable(); UC.extensionOptionsMenu.setDisable(mi, addon, 1); if (addon.operationsRequiringRestart && UC.extensionOptionsMenu.autoRestart) if ('BrowserUtils' in window) BrowserUtils.restartApplication(); else Application.restart(); } else if (event.ctrlKey) { if (Services.prompt.confirm(null, null, 'Delete ' + addon.name + ' permanently?')) { if (pending) addon.cancelUninstall(); else { addon.uninstall(); return; } cls.remove('restartless'); cls.remove('enabling'); cls.remove('disabling'); cls.add('uninstalling'); cls.add('disabled'); } } } }, setDisable: function (mi, addon, toggling) { var cls = mi.classList; if (!addon.operationsRequiringRestart) { cls.add('restartless'); if (toggling) { if (addon.isActive) { if (addon.optionsURL) cls.remove('noOptions'); cls.remove('disabled'); cls.remove('disabling'); cls.add('enabling'); } else { cls.remove('enabling'); cls.add('disabling'); } } } else { if (toggling) if (addon.userDisabled) if (addon.isActive) cls.add('disabling'); else cls.remove('enabling'); else if (addon.isActive) cls.remove('disabling'); else cls.add('enabling'); else if (addon.userDisabled && addon.isActive) cls.add('disabling'); else if (!addon.userDisabled && !addon.isActive) cls.add('enabling'); } if (!addon.isActive) cls.add('disabled'); if (!addon.optionsURL) cls.add('noOptions'); }, openAddonOptions: function (addon, win) { var optionsURL = addon.optionsURL; if (!addon.isActive || !optionsURL) return; switch (Number(addon.optionsType)) { case 2: case 5: BrowserOpenAddonsMgr('addons://detail/' + encodeURIComponent(addon.id) + '/preferences'); break; case 3: 'switchToTabHavingURI' in win ? win.switchToTabHavingURI(optionsURL, true) : openTab('contentTab', { contentPage: optionsURL }); break; default: openDialog(optionsURL, addon.name, 'chrome,titlebar,toolbar,resizable,scrollbars,centerscreen,dialog=no,modal=no'); } }, browseDir: function (addon) { var dir = Services.dirsvc.get('ProfD', Ci.nsIFile); var nsLocalFile = Components.Constructor('@mozilla.org/file/local;1', 'nsIFile', 'initWithPath'); dir.append('extensions'); dir.append(addon.id); if (!dir.exists()) { dir = dir.parent; dir.append(addon.id + '.xpi'); } dir.launch(); }, iconURL: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABaUlEQVQ4y6WTW0sCQRiG/SEpVBDUVVfphbAEhWAlqYhrLWUlER2IIgrqYkEp6SBmudWiFf0SiSCwpAI7bJnprq6H/sTbGhJiEyt28fAN7zfz8DHDaABo/oPqBpovX7j4T1gOS6dNCcYiZbhOSrCHi2hugqNCwskVYNmXbxoSuPkCN3NWhCdahLLGKCfDcSBjOJiHeTeHPr8EyifCwGb9RMF0RIaHl+E+zoMJ5+AM5WALSBjaEWHayqLXm4GR/YB+Iw2iYIKTMB6WwIRE0EER9r0s+r1pGNZT6F55ReeigPb5F7TOPpMFTDCDkUAGA753GFYFdC08QedJEvkR2DbfzuntFBz+1K2ZFdCz9Ii2qQfo3Pck2MoZpVI/AqtXQAXjchIdk3fQMok/Ib6CaS0Z1c8pdlc8pqXjUOF7AqVSxDvQOq7RKERBi/UKdbDVnK3vkQWWS9Si1vstGIyxCqiBquZUXc429BfU+AL9Tqy8Q2Za8AAAAABJRU5ErkJggg==', style: ` @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); .restartless label:after { font-size: 18px; content:"☑"; } .enabling label:after { content:"☑" !important; } .disabling label:after { content:"☐" !important; } .uninstalling label:after { content: '!' !important; } .noOptions label { color: gray; } .disabled label { color: orange; font-style: italic; } .disabled label:after { content:"☐" !important; } `, styles: [], init: function() { CustomizableUI.createWidget({ id: 'eom-button', type: 'custom', defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function (aDocument) { var toolbaritem = aDocument.createXULElement('toolbarbutton'); var props = { id: 'eom-button', label: 'Extension Options Menu', tooltiptext: 'Extension Options Menu', type: 'menu', class: 'toolbarbutton-1 chromeclass-toolbar-additional', style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABaUlEQVQ4y6WTW0sCQRiG/SEpVBDUVVfphbAEhWAlqYhrLWUlER2IIgrqYkEp6SBmudWiFf0SiSCwpAI7bJnprq6H/sTbGhJiEyt28fAN7zfz8DHDaABo/oPqBpovX7j4T1gOS6dNCcYiZbhOSrCHi2hugqNCwskVYNmXbxoSuPkCN3NWhCdahLLGKCfDcSBjOJiHeTeHPr8EyifCwGb9RMF0RIaHl+E+zoMJ5+AM5WALSBjaEWHayqLXm4GR/YB+Iw2iYIKTMB6WwIRE0EER9r0s+r1pGNZT6F55ReeigPb5F7TOPpMFTDCDkUAGA753GFYFdC08QedJEvkR2DbfzuntFBz+1K2ZFdCz9Ii2qQfo3Pck2MoZpVI/AqtXQAXjchIdk3fQMok/Ib6CaS0Z1c8pdlc8pqXjUOF7AqVSxDvQOq7RKERBi/UKdbDVnK3vkQWWS9Si1vstGIyxCqiBquZUXc429BfU+AL9Tqy8Q2Za8AAAAABJRU5ErkJggg==)', onclick: 'if (event.button === 1) BrowserOpenAddonsMgr("addons://list/extension");' }; for (var p in props) { toolbaritem.setAttribute(p, props[p]); } var mp = toolbaritem.appendChild(document.createXULElement('menupopup')); mp.setAttribute('id', 'eom-button-popup'); mp.setAttribute('onclick', 'event.preventDefault(); event.stopPropagation(); setTimeout(function () { document.getElementById("toolbar-context-menu").hidePopup(); }, 0);'); mp.addEventListener('popupshowing', UC.extensionOptionsMenu.populateMenu); return toolbaritem; } }); }, destroy: function () { CustomizableUI.destroyWidget('eom-button'); UC.extensionOptionsMenu.styles.forEach(s => s.parentNode.removeChild(s)); delete UC.extensionOptionsMenu; } } UC.extensionOptionsMenu.init(); })()
Отсутствует
В about:config создать числовой параметр ui.prefersReducedMotion — 0
спасибо. за бегающую точку в место песочных часов.
Отредактировано katari4688908 (29-08-2020 14:29:17)
Отсутствует
ulver73
Здравствуйте, как удалить с контекстного меню пункт { исследовать свойства поддержки доступности}
Здравствуйте. Решение под последним спойлером, в созданной вчера теме.
отключить Службу поддержки доступности не помогает
Ну да, не помогает. Это в 78 "поможет", потому что данного пункта меню там нет и в помине.
Отредактировано sandro79 (30-08-2020 01:52:18)
Отсутствует
razoo
@-moz-document url("chrome://browser/content/browser.xhtml") { *|*:root { --v-toolbar-menubar-height: 28px; /* высота панели меню, только чётные числа не меньше 20px, если изменяете эту переменную то и в --v-toolbar-menubar-height-content - атрибут height= нужно установить ровно в 4 раза больше*/ --v-toolbar-menubar-height-content: url("data:image/svg+xml,<svg width='28' height='112' xmlns='http://www.w3.org/2000/svg'><rect x='0' y='0' width='100%' height='100%' style='fill:transparent;'/></svg>"); /* height='4 * --v-toolbar-menubar-height' */ } #navigator-toolbox { border-top: none !important; box-shadow: none !important; padding-top: 0 !important; -moz-appearance: none !important; appearance: none !important; } *|*:root:not([inFullscreen])[tabsintitlebar] #navigator-toolbox { position: relative !important; } #navigator-toolbox > toolbar { -moz-box-ordinal-group: 10 !important; } #navigator-toolbox > #nav-bar { -moz-box-ordinal-group: 2 !important; } #navigator-toolbox > #PersonalToolbar { margin-block: 0 !important; box-shadow: none !important; -moz-box-ordinal-group: 0 !important; padding-inline: 0 !important; background: none !important; border: none !important; color: inherit !important; } *|*:root:not(:is([inFullscreen],[chromehidden~="menubar"])) #navigator-toolbox::before { content: "" !important; display: -moz-box !important; height: var(--v-toolbar-menubar-height) !important; -moz-box-ordinal-group: 0 !important; visibility: visible !important; } *|*:root:not([inFullscreen])[tabsintitlebar] > *|body::before { content: var(--v-toolbar-menubar-height-content) !important; display: -moz-box !important; -moz-box-flex: 0 !important; -moz-box-orient: vertical !important; -moz-box-pack: start !important; -moz-box-align: stretch !important; -moz-box-ordinal-group: 0 !important; margin-bottom: calc(-4 * var(--v-toolbar-menubar-height)) !important; box-sizing: content-box !important; } *|*:root:not([inFullscreen])[tabsintitlebar][sizemode="normal"] > *|body::before { -moz-appearance: -moz-window-titlebar !important; appearance: -moz-window-titlebar !important; } *|*:root:not([inFullscreen])[tabsintitlebar][sizemode="maximized"] > *|body::before { -moz-appearance: -moz-window-titlebar-maximized !important; appearance: -moz-window-titlebar-maximized !important; } *|*:root:not([inFullscreen])[tabsintitlebar]:-moz-lwtheme > *|body::before { visibility: hidden !important; } #navigator-toolbox > #titlebar { -moz-appearance: none !important; appearance: none !important; position: static !important; -moz-box-ordinal-group: 1 !important; } #navigator-toolbox::after { -moz-box-ordinal-group: 100 !important; } #toolbar-menubar { padding-block: 0 !important; margin-block: 0 !important; border: none !important; background: none !important; --toolbarbutton-outer-padding: 0px !important; --toolbarbutton-inner-padding: calc((var(--v-toolbar-menubar-height) - 16px) / 2) !important; -moz-appearance: none !important; appearance: none !important; } *|*:root:not(:is([inFullscreen],[chromehidden~="menubar"])) #toolbar-menubar { position: absolute !important; top: 0 !important; left: 0 !important; right: 0 !important; display: flex !important; flex-wrap: nowrap !important; flex-direction: row !important; align-items: stretch !important; justify-content: flex-start !important; min-height: 0 !important; height: var(--v-toolbar-menubar-height) !important; overflow: hidden !important; } #toolbar-menubar *|*.toolbarbutton-badge { margin-inline-end: calc(-1 * (var(--toolbarbutton-outer-padding) + var(--toolbarbutton-inner-padding))) !important; } *|*:root:not([inFullscreen]) #toolbar-menubar > :is(toolbaritem,toolbarbutton) { align-self: center !important; } *|*:root:not([inFullscreen]) #toolbar-menubar > :is(#menubar-items,#wrapper-menubar-items,.titlebar-buttonbox-container) { align-self: flex-start !important; } *|*:root:not([inFullscreen]) #toolbar-menubar > * { padding-block: 0 !important; margin-block: 0 !important; } *|*:root:not([inFullscreen]) #toolbar-menubar[autohide="true"][inactive="true"]:not([customizing="true"]) > *:not(.titlebar-buttonbox-container) { opacity: 0 !important; pointer-events: none !important; } *|*:root[inFullscreen] #toolbar-menubar { visibility: collapse !important; } *|*:root:not([inFullscreen]) #toolbar-menubar > :is(*[style*="-moz-box-ordinal-group: 1000;"],.titlebar-buttonbox-container) { order: 1000 !important; } *|*:root:not([inFullscreen]) #toolbar-menubar > :is(toolbarspring,spacer,[id^="wrapper-customizableui-special-spring"]) { flex-grow: 1 !important; } *|*:root:not([inFullscreen]) #toolbar-menubar > :is(#search-container,#wrapper-search-container) { flex-grow: 100 !important; } #toolbar-menubar #search-container { padding-block: 0 !important; } #toolbar-menubar #searchbar { min-height: calc(var(--v-toolbar-menubar-height) - 2px) !important; } #TabsToolbar { -moz-appearance: none !important; appearance: none !important; padding-block: 0 !important; margin-block: 0 !important; } #TabsToolbar #tabbrowser-tabs { padding-bottom: 0 !important; margin-bottom: 0 !important; } #TabsToolbar > .toolbar-items { padding-top: 0 !important; margin-top: 0 !important; } #TabsToolbar .tab-background { border-top-style: solid !important; } #TabsToolbar .titlebar-buttonbox-container, #TabsToolbar::after, #TabsToolbar .titlebar-spacer:is([type="pre-tabs"],[type="post-tabs"]) { display: none !important; } @media (-moz-os-version: windows-win7), (-moz-os-version: windows-win8) { @media (-moz-windows-classic: 0) { *|*:root:not([inFullscreen])[sizemode="normal"] #toolbar-menubar:not([autohide="true"]) > #menubar-items { margin-top: 1px !important; } } } @media (-moz-windows-classic) { *|*:root:not([inFullscreen])[tabsintitlebar][sizemode="normal"] #navigator-toolbox::before { height: calc(var(--v-toolbar-menubar-height) + 4px) !important; } *|*:root:not([inFullscreen])[tabsintitlebar][sizemode="normal"]:-moz-lwtheme #navigator-toolbox::before { background-image: linear-gradient(to bottom, ThreeDLightShadow 0, ThreeDLightShadow 1px, ThreeDHighlight 1px, ThreeDHighlight 2px, ActiveBorder 2px, ActiveBorder 4px, transparent 4px) !important; } *|*:root:not([inFullscreen])[tabsintitlebar][sizemode="normal"] #toolbar-menubar { margin-top: 4px !important; } } }
egorsemenov06
try { (() => { var id = "ucf-cookie-toggle", label = "Переключить Куки", tooltiptext = "ЛКМ: Переключить Куки\nСКМ: Удалить куки домена текущей страницы\nПКМ: Управление куками", img = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' height='80' width='16' viewBox='0 0 48 240'><g><rect x='0' y='0' width='48' height='48' rx='3' ry='3' style='fill:rgb(243, 135, 37);'/><path style='opacity:0.25;fill:black;' d='M 18.9,48 11,40.1 5,22 14,8 28,5 40,10 48,18 V 45 C 48,46.7 46.7,48 45,48 Z'/><path style='fill:white;' d='M 40.6,23.2 C 31,20.5 31,20.5 31.8,10 24,16.2 24,16.2 15.2,10 17,18.8 17,18.8 7.38,23.2 16.2,27.5 16.2,27.5 15.2,38 24,32.8 24,32.8 31.8,37.7 31.8,27.5 31.8,27.5 40.6,23.2 Z M 45,23.2 C 45,34.5 35.4,45 24,45 12.6,45 3,34.5 3,23.2 3,11.8 12.6,3 24.1,3 35.4,3 45,11.8 45,23.2' /><path style='fill:white;' d='M 16,24.1 C 16,19.5 19.5,16 24.1,16 28.5,16 32,19.5 32,24.1 32,28.5 28.5,32 24,32 19.5,32 16,28.5 16,24.1' /><rect x='0' y='48' width='48' height='48' rx='3' ry='3' style='fill:rgb(243, 135, 37);'/><path style='opacity:0.25;fill:black;' d='M 19,96 10,87 4,70 12,56 30,51.8 48,69.8 V 93 C 48,94.7 46.7,96 45,96 Z'/><path style='fill:white;' d='M 24.6,58 C 24.6,58 24.6,63.2 15.6,58 17.4,67.6 17.4,67.6 7.5,71.2 16.5,75.5 16.5,75.5 15.6,86 24.6,80.8 24.6,86 24.6,86 Z M 24.6,51 C 27.3,51 30,51.8 30,51.8 V 92.2 C 30,92.2 27.3,93 24.6,93 12.9,93 3,82.5 3,71.2 3,59.8 12.9,51 24.6,51' /><path style='fill:white;' d='M 16,72 C 16,68 20.4,64 25,64 V 80 C 20.5,80 16,77 16,72' /><rect x='0' y='96' width='48' height='48' rx='3' ry='3' style='fill:rgb(209, 8, 3);'/><path style='opacity:0.25;fill:black;' d='M 18.7,144 11,136 4,119 13,103 28,100 41,107 48,114 V 141 C 48,142.7 46.7,144 45,144 Z'/><path style='fill:white;' d='M 40.6,120 C 32.8,116 32.8,116 31.8,106 24,111 24,111 15.2,106 15.2,116 15.2,116 7.38,120 15.2,124 15.2,124 15.2,134 24,129 24,129 31.8,134 32.8,124 32.8,124 40.6,120 Z M 45,120 C 45,131 35.4,141 24,141 12.6,141 3,131 3,120 3,107 12.6,99 24.1,99 35.4,99 45,107 45,120' /><path style='fill:none;stroke:white;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;' d='M 30,126 18,114' /><path style='fill:none;stroke:white;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;' d='M 18,126 30,114' /><rect x='0' y='144' width='48' height='48' rx='3' ry='3' style='fill:rgb(243, 135, 37);'/><path style='opacity:0.25;fill:black;' d='M 18.5,192 9.3,183 4,166 13,151 28,148 39.2,153 48,162 V 189 C 48,190.7 46.7,192 45,192 Z'/><path style='fill:white;' d='M 40.6,168 C 31,164 31,164 31.8,154 24,159 24,159 15.2,154 16.2,164 16.2,164 7.38,168 16.2,171 16.2,171 15.2,182 24.8,178 24,184 24,184 24,175 31,168 40.6,168 Z M 45,168 C 45,169 44.2,172 44.2,172 32.8,172 29.2,177 29.2,188 29.2,188 26.6,189 24,189 12.6,189 3,179 3,168 3,155 12.6,147 24.1,147 35.4,147 45,155 45,168' /><path style='fill:white;' d='M 16,168 C 16,164 19.5,160 24.1,160 28.4,160 32,164 32,168 32,173 28.5,176 24,176 19.5,176 16,173 16,168' /><rect x='0' y='192' width='48' height='48' rx='3' ry='3' style='fill:rgb(243, 135, 37);'/><path style='opacity:0.25;fill:black;' d='M 18.5,240 9.3,231 4,214 13,199 29.2,196 48,215 V 237 C 48,239 46.7,240 45,240 Z'/><path style='fill:white;' d='M 40.6,216 C 31,220 31,220 31.8,230 24,225 24,225 15.2,230 16.2,220 16.2,220 7.38,216 16.2,213 16.2,213 15.2,202 24.8,206 24,200 24,200 24,209 31,216 40.6,216 Z M 45,216 C 45,214 44.2,212 44.2,212 32.8,212 29.2,207 29.2,196 29.2,196 26.6,195 24,195 12.6,195 3,205 3,216 3,229 12.6,237 24.1,237 35.4,237 45,229 45,216' /><path style='fill:white;' d='M 16,216 C 16,212 19.5,208 24.1,208 28.4,208 32,212 32,216 32,221 28.5,224 24,224 19.5,224 16,221 16,216' /></g></svg>"; var tbarbtns = { initialised: false, get network_cookie_cookieBehavior() { delete this.network_cookie_cookieBehavior; try { return this.network_cookie_cookieBehavior = Services.prefs.getIntPref("network.cookie.cookieBehavior"); } catch(e) { } return this.network_cookie_cookieBehavior = null; }, init: function() { if (this.initialised) return; Services.prefs.addObserver("network.cookie.cookieBehavior", this); this.initialised = true; }, prefToggleNumber: function(pref, next) { Services.prefs.setIntPref(pref, next[Services.prefs.getIntPref(pref)]); }, getETDL: function(uri) { var eTLD; try { eTLD = Services.eTLD.getBaseDomain(uri); } catch (e) { eTLD = uri.asciiHost; } return eTLD; }, viewCookies: function(win) { var uri = win.gBrowser.selectedBrowser.currentURI; try { let _uri; if (_uri = win.ReaderMode.getOriginalUrl(uri.spec)) uri = Services.io.newURI(_uri); } catch(e) {} uri = this.getETDL(uri); var _win = Services.wm.getMostRecentWindow("Browser:SiteDataSettings"); var _setFilter = () => { var filter = _win.document.querySelector("#searchBox"); if (!filter) return; filter.value = uri; filter.focus(); filter.dispatchEvent(new _win.Event("input", { bubbles: true })); }; if (_win) { _win.focus(); _setFilter(); } else { win.SiteDataManager.updateSites().then(() => { _win = win.openDialog("chrome://browser/content/preferences/dialogs/siteDataSettings.xhtml", "Browser:SiteDataSettings", "chrome,dialog=no,centerscreen,resizable"); _win.addEventListener("DOMContentLoaded", function DOMLoad() { _setFilter(); }, { once: true }); }); } }, observe: function(aSubject, aTopic, aData) { if (aData == "network.cookie.cookieBehavior") { let network_cookie_cookieBehavior = tbarbtns.network_cookie_cookieBehavior = Services.prefs.getIntPref(aData), getW = CustomizableUI.getWidget(id); if (getW.instances.length) for(let {node} of getW.instances) try { node.setAttribute("activated", network_cookie_cookieBehavior); } catch(e) {} else for (let win of CustomizableUI.windows) try { getW.forWindow(win).node.setAttribute("activated", network_cookie_cookieBehavior); } catch(e) {} } }, uninit: function() { if (!this.initialised) return; Services.prefs.removeObserver("network.cookie.cookieBehavior", this); this.initialised = false; }, }; CustomizableUI.createWidget({ id: id, type: "custom", label: label, tooltiptext: tooltiptext, localized: false, defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(document) { var win = document.defaultView, toolbarbutton = document.createXULElement("toolbarbutton"); toolbarbutton.id = id; toolbarbutton.className = "toolbarbutton-1 chromeclass-toolbar-additional"; toolbarbutton.setAttribute("label", label); toolbarbutton.setAttribute("context", "false"); toolbarbutton.setAttribute("tooltiptext", tooltiptext); var cookieBehavior = tbarbtns.network_cookie_cookieBehavior; if (cookieBehavior !== null) { toolbarbutton.setAttribute("activated", cookieBehavior); toolbarbutton.addEventListener("click", function(event) { if (event.button == 0) tbarbtns.prefToggleNumber("network.cookie.cookieBehavior", [1,2,3,4,0]); else if (event.button == 1) { (this._clearSiteData || ("gIdentityHandler" in win && "clearSiteData" in win.gIdentityHandler && (this._clearSiteData = win.eval(`(${`${win.gIdentityHandler.clearSiteData}`.replace(/^.*clearSiteData/, "async function clearSiteData").replace(/this\s*\./g, "gIdentityHandler.").replace(/PanelMultiView\.hidePopup.+;|event\.stopPropagation.+;/g, "")})`))) || (this._clearSiteData = function() {}))(event); } else if (event.button == 2) { event.preventDefault(); event.stopPropagation(); tbarbtns.viewCookies(win); } }); } var btnstyle = "data:text/css;charset=utf-8," + encodeURIComponent(` #${id} { list-style-image: url("${img}") !important; -moz-image-region: rect(0px, 16px, 16px, 0px) !important; } #${id}[activated="1"] { -moz-image-region: rect(16px, 16px, 32px, 0px) !important; } #${id}[activated="2"] { -moz-image-region: rect(32px, 16px, 48px, 0px) !important; } #${id}[activated="3"] { -moz-image-region: rect(48px, 16px, 64px, 0px) !important; } #${id}[activated="4"] { -moz-image-region: rect(64px, 16px, 80px, 0px) !important; } `); try { win.windowUtils.loadSheetUsingURIString(btnstyle, win.windowUtils.USER_SHEET); } catch (e) {} tbarbtns.init(); return toolbarbutton; }, onDestroyed: function(doc) { tbarbtns.uninit(); }, }); })(); } catch(e) {}
_zt
Не вижу там никаких крякозябров, когда проверяете нужно отключать другой скрипт и стили заодно, т.к. очевидно что ваши квадратики попали на мой.
Забыл я селекторы изменить.
А "+" или "-" присутствуют, разумеется не всегда а только при переключении.
Мне понравилось, что вы разрешения добавили
Добавил также отключение системных расширений, просмотр их файлов во вкладке
Отредактировано Vitaliy V. (01-09-2020 15:13:37)
Отсутствует
Как убрать значки папок из панели закладок?
Отсутствует
Vitaliy V.
Это супер! Всё работает как надо. Плюс полезные ремарки в коде - сразу уменьшил высоту меню.
Ещё погоняю в разных режимах, допишу свои мелочи, но думаю ничего не сломается - тут виден компетентный подход.
Огромное Спасибо.
Но, только заметил что вы для 68 спрашивали, этот стиль для 78 +, смысл в 68?
Вы правы, смысла нет.
Ещё раз благодраю.
Отсутствует
Xvost пишетКак убрать значки папок из панели закладок?
скрытый текст
Хорошо, с этим разобрались. Теперь: нужно заменить текст у определённой папки на иконку. Я использую код:
#personal-bookmarks .bookmark-item[container][label="ПВ"] > .toolbarbutton-text { display: url('pv.bmp') !important; }
Результата нет. Поправите меня, пожалуйста.
Отсутствует
Теперь: нужно заменить текст у определённой папки на иконку. Я использую код:
Замените display на list-style-image
Если не поможет, то не знаю где ещё может быть ошибка, и вообще возможно ли такое. Может лучше иконку взять в .ico вместо .bmp
Отредактировано sandro79 (30-08-2020 01:09:19)
Отсутствует
Vitaliy V.
А отдельным файлом можно подключить и Ctrl+ЛКМ: Просмотр источника где должно открываться?
Отсутствует
Vitaliy V.
Да, вы правы, другой стиль мешался.
Фрагмент стиля
#${id}-popup .noOptions { color: gray; }
#${id}-popup .disabled { color: gray; font-style: italic; }
у меня не работает, только с label.
Нельзя ли вернуть отображение :after всегда? Как это было у меня. Там был .restartless, который здесь не работает, нужен .enabled какой нибудь.
Ну и другие просьбы, если можно. uuid и ярлыки.
Отсутствует
А отдельным файлом можно подключить и Ctrl+ЛКМ: Просмотр источника где должно открываться?
Зачем отдельным? Просмотр должен открыться в ассоциированной с .xpi файлом программе, в архиваторе например.
_zt
Проверяйте, вроде все сделал как просили, в тултипе отображается только доступные операции и инфа
try {(() => { var id = "ucf-eom-button", label = "Настройки расширений", tooltiptext = "Настройки расширений", img = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' height='16' width='16' viewBox='0 0 48 48'><g><rect x='0' y='0' width='48' height='48' rx='3' ry='3' style='fill:rgb(0, 120, 173);'/><path style='opacity:0.25;fill:black;' d='M 24,4.5 18,12 3,23.7 12,32.7 3.9,44.1 7.8,48 H 45 C 46.7,48 48,46.7 48,45 V 26.1 L 34.8,12.9 31.8,12.3 Z'/><path style='fill:white;' d='M 19.88,3 C 16.93,3 14.55,4.662 14.55,6.701 14.63,7.474 15.11,8.438 15.37,8.762 16.59,10.41 16.59,11.44 16.29,12.06 H 6.299 C 4.476,12.06 3,13.53 3,15.35 V 23.68 C 3.625,24 4.65,24 6.299,22.77 6.625,22.52 7.587,22.02 8.363,21.94 10.4,21.94 12.06,24.35 12.06,27.29 12.06,30.24 10.4,32.65 8.363,32.65 7.725,32.63 6.774,32.07 6.299,31.82 4.65,30.59 3.625,30.59 3,30.91 V 41.71 C 3,43.53 4.476,45 6.299,45 H 19.58 C 19.88,44.38 19.88,43.35 18.65,41.71 18.4,41.38 17.91,40.42 17.82,39.65 17.82,37.6 20.23,35.94 23.18,35.94 26.14,35.94 28.55,37.6 28.55,39.65 28.53,40.28 27.97,41.23 27.71,41.71 26.47,43.35 26.47,44.38 26.79,45 H 32.65 C 34.47,45 35.96,43.53 35.96,41.71 V 32.55 C 36.56,32.23 37.59,32.23 39.23,33.47 39.72,33.73 40.68,34.29 41.29,34.29 43.35,34.29 45,31.91 45,28.94 45,25.99 43.35,23.59 41.29,23.59 40.54,23.67 39.58,24.17 39.23,24.41 37.59,25.65 36.56,25.65 35.96,25.33 V 15.35 C 35.96,13.53 34.47,12.06 32.65,12.06 H 23.49 C 23.19,11.44 23.19,10.41 24.41,8.762 24.66,8.287 25.22,7.337 25.23,6.713 25.23,4.662 22.85,3 19.88,3' /></g></svg>", showVersion = true, userPermissions = true, showHidden = true, showDisabled = true, enabledFirst = true, blackListSet = new Set([ ]); if (!("AddonManager" in this)) ChromeUtils.defineModuleGetter(this, "AddonManager", "resource://gre/modules/AddonManager.jsm"); if (!("GlobalManager" in this)) XPCOMUtils.defineLazyGetter(this, "GlobalManager", () => { const { GlobalManager } = ChromeUtils.import("resource://gre/modules/Extension.jsm", null); return GlobalManager; }); var extensionOptionsMenu = { populateMenu: async function(e) { var prevState, popup = e.target, doc = e.view.document; while (popup.hasChildNodes()) popup.firstChild.remove(); var addons = await AddonManager.getAddonsByTypes(["extension"]); addons.filter(a => !(a.iconURL || "").startsWith("resource://search-extensions/")).sort((a, b) => { var ka = (enabledFirst ? a.isActive ? "0" : "1" : "") + a.name.toLowerCase(); var kb = (enabledFirst ? b.isActive ? "0" : "1" : "") + b.name.toLowerCase(); return (ka < kb) ? -1 : 1; }).forEach(addon => { if (!blackListSet.has(addon.id) && (!addon.hidden || showHidden) && (!addon.userDisabled || showDisabled)) { if (showDisabled && enabledFirst && prevState && addon.isActive != prevState) popup.append(doc.createXULElement("menuseparator")); prevState = addon.isActive; let extension = GlobalManager.extensionMap.get(addon.id); let mi = doc.createXULElement("menuitem"), permissions, uuid, props = { label: `${addon.name}${showVersion ? ` ${addon.version}` : ""}`, class: "menuitem-iconic", tooltiptext: `${addon.description ? `${addon.description}\n` : ""}ID: ${addon.id}${addon.isActive && (uuid = extension?.uuid) ? `\nUUID: ${uuid}` : ""}${(userPermissions && (permissions = addon.userPermissions?.permissions)?.length) ? `\nРазрешения: ${permissions.join(", ")}` : ""}\n${addon.optionsURL ? `\nЛКМ: Настройки` : ""}\nCtrl+ЛКМ: Копировать ID${uuid ? `\nShift+ЛКМ: Копировать UUID` : ""}${addon.creator?.url ? `\nCtrl+Shift+ЛКМ: Автор` : ""}${addon.homepageURL ? `\nСКМ: Домашняя страница` : ""}\nCtrl+СКМ: Просмотр источника\nShift+СКМ: Просмотр источника во вкладке\nПКМ: Включить/Отключить${(!addon.isSystem && !addon.isBuiltin) ? `\nCtrl+ПКМ: Удалить` : ""}`, image: addon.iconURL || img, }; for (let p in props) mi.setAttribute(p, props[p]); mi.addEventListener("click", (e) => { extensionOptionsMenu.handleClick(e); }); mi._Addon = addon; mi._Extension = extension; this.setDisable(mi, addon, 0); popup.append(mi); } }); }, handleClick: function(e) { var win = e.view, mi = e.target; if (!("_Addon" in mi) || !("_Extension" in mi)) return; var addon = mi._Addon, extension = mi._Extension; var hasMdf = e.ctrlKey || e.shiftKey || e.altKey || e.metaKey; switch (e.button) { case 0: if (!hasMdf && addon.optionsURL) this.openAddonOptions(addon, win); else if (e.ctrlKey && e.shiftKey && addon.creator?.url) win.gBrowser.selectedTab = this.addTab(win, addon.creator.url); else if (e.ctrlKey) Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper).copyString(addon.id); else if (e.shiftKey && extension?.uuid) Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper).copyString(extension.uuid); win.closeMenus(mi); break; case 1: if (!hasMdf && addon.homepageURL) win.gBrowser.selectedTab = this.addTab(win, addon.homepageURL); else if (e.ctrlKey && !e.shiftKey) this.browseDir(addon); else if (e.shiftKey && !e.ctrlKey) this.browseDir(addon, win); win.closeMenus(mi); break; case 2: if (!hasMdf) { let endis = addon.userDisabled ? "enable" : "disable"; if (addon.id == "screenshots@mozilla.org") Services.prefs.setBoolPref("extensions.screenshots.disabled", !addon.userDisabled); addon[endis]({ allowSystemAddons: true }).then(() => { this.setDisable(mi, addon, 1); }, err => { console.error(err); }); } else if (e.ctrlKey && !addon.isSystem && !addon.isBuiltin && Services.prompt.confirm(null, null, `Удалить ${addon.name}?`)) { if (addon.pendingOperations & AddonManager.PENDING_UNINSTALL) addon.cancelUninstall(); else { addon.uninstall(); return; } let cls = mi.classList; cls.remove("ucf-enabling"); cls.remove("ucf-disabling"); cls.add("ucf-uninstalling"); cls.add("ucf-disabled"); } break; } }, setDisable: function(mi, addon, toggling) { var cls = mi.classList; if (toggling) { if (addon.isActive) { if (addon.optionsURL) cls.remove("ucf-notoptions"); cls.remove("ucf-disabled"); cls.remove("ucf-disabling"); cls.add("ucf-enabling"); } else { cls.remove("ucf-enabling"); cls.add("ucf-disabling"); } } if (!addon.isActive) cls.add("ucf-disabled"); if (!addon.optionsURL) cls.add("ucf-notoptions"); if (addon.isSystem) cls.add("ucf-system"); }, openAddonOptions: function(addon, win) { if (!addon.isActive || !addon.optionsURL) return; switch (Number(addon.optionsType)) { case 5: win.BrowserOpenAddonsMgr("addons://detail/" + encodeURIComponent(addon.id) + "/preferences"); break; case 3: win.switchToTabHavingURI(addon.optionsURL, true); break; } }, browseDir: function(addon, win) { try { if (!win) { let file = Services.io.getProtocolHandler("file") .QueryInterface(Ci.nsIFileProtocolHandler) .getFileFromURLSpec(addon.getResourceURI().QueryInterface(Ci.nsIJARURI).JARFile.spec); if (file.exists()) file.launch(); } else win.gBrowser.selectedTab = this.addTab(win, addon.getResourceURI().spec); } catch (e) {} }, addTab: function(win, url, params = {}) { params.triggeringPrincipal = Services.scriptSecurityManager.getSystemPrincipal(); params.relatedToCurrent = true; return win.gBrowser.addTab(url, params); }, }; CustomizableUI.createWidget({ id: id, type: "custom", label: label, tooltiptext: tooltiptext, localized: false, defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(doc) { var btn = doc.createXULElement("toolbarbutton"), win = doc.defaultView, props = { id: id, label: label, tooltiptext: tooltiptext, type: "menu", class: "toolbarbutton-1 chromeclass-toolbar-additional", }; for (let p in props) btn.setAttribute(p, props[p]); btn.addEventListener("click", (e) => { if (e.button == 1) win.BrowserOpenAddonsMgr("addons://list/extension"); }); var mp = doc.createXULElement("menupopup"); mp.id = `${id}-popup`; mp.addEventListener("click", (e) => { e.preventDefault(); e.stopPropagation(); }); mp.addEventListener("contextmenu", (e) => { e.preventDefault(); e.stopPropagation(); }); mp.addEventListener("popupshowing", (e) => { extensionOptionsMenu.populateMenu(e); }); btn.append(mp); var btnstyle = "data:text/css;charset=utf-8," + encodeURIComponent(` #${id} { list-style-image: url("${img}") !important; } #${id}-popup menuitem::after { display: -moz-box !important; -moz-box-align: center !important; -moz-box-pack: center !important; font-style: normal !important; height: 20px !important; width: 20px !important; line-height: 20px !important; font-size: 20px !important; overflow: hidden !important; } #${id}-popup menuitem:not(.ucf-disabled)::after, #${id}-popup menuitem.ucf-enabling::after { content: "\\2611" !important; color: #0074e8 !important; } #${id}-popup menuitem.ucf-disabled::after, #${id}-popup menuitem.ucf-disabling::after { content: "\\2610" !important; color: #cccccc !important; } #${id}-popup menuitem.ucf-enabling::after { color: #cccccc !important; } #${id}-popup menuitem.ucf-uninstalling::after { content: "\\0021" !important; } #${id}-popup menuitem.ucf-notoptions, #${id}-popup menuitem.ucf-notoptions > * { color: gray !important; } #${id}-popup menuitem.ucf-disabled, #${id}-popup menuitem.ucf-disabled > * { color: gray !important; font-style: italic !important; } #${id}-popup menuitem.ucf-system > * { text-decoration: underline !important; text-decoration-style: dotted !important; } `); try { win.windowUtils.loadSheetUsingURIString(btnstyle, win.windowUtils.USER_SHEET); } catch (e) {} return btn; }, }); })();} catch (e) {}
Отредактировано Vitaliy V. (31-08-2020 09:28:09)
Отсутствует
Как при запуске Firefox убрать белый цвет вкладки(или изменить цвет на серый)?
Первую вкладку убрал так:
R.S Дополнение - оказывается этот короткое появление белой вкладки везде при запуске любой вкладки(ссылки на сайт).
Отредактировано sibirnik (30-08-2020 17:53:20)
Отсутствует
Vitaliy V.
Да, это действительно то, что я просил и даже больше. Спасибо большое, шикарная кнопка получилась.
Последнее:
Как первую строку разрешений ограничить, например, 60 символов (без заголовка), далее перенос на вторую строку (по словам)?
И как blackListSet заполнять правильно?
Оставил себе так, немного стили поправил и описание убрал:
// ExtensionOptionsMenu ucf try {(() => { var id = "ucf-eom-button", label = "Extension Options Menu", tooltiptext = "Меню расширений", img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABaUlEQVQ4y6WTW0sCQRiG/SEpVBDUVVfphbAEhWAlqYhrLWUlER2IIgrqYkEp6SBmudWiFf0SiSCwpAI7bJnprq6H/sTbGhJiEyt28fAN7zfz8DHDaABo/oPqBpovX7j4T1gOS6dNCcYiZbhOSrCHi2hugqNCwskVYNmXbxoSuPkCN3NWhCdahLLGKCfDcSBjOJiHeTeHPr8EyifCwGb9RMF0RIaHl+E+zoMJ5+AM5WALSBjaEWHayqLXm4GR/YB+Iw2iYIKTMB6WwIRE0EER9r0s+r1pGNZT6F55ReeigPb5F7TOPpMFTDCDkUAGA753GFYFdC08QedJEvkR2DbfzuntFBz+1K2ZFdCz9Ii2qQfo3Pck2MoZpVI/AqtXQAXjchIdk3fQMok/Ib6CaS0Z1c8pdlc8pqXjUOF7AqVSxDvQOq7RKERBi/UKdbDVnK3vkQWWS9Si1vstGIyxCqiBquZUXc429BfU+AL9Tqy8Q2Za8AAAAABJRU5ErkJggg==", showVersion = true, userPermissions = true, showHidden = true, showDisabled = true, enabledFirst = false, blackListSet = new Set([ ]); if (!("AddonManager" in this)) ChromeUtils.defineModuleGetter(this, "AddonManager", "resource://gre/modules/AddonManager.jsm"); if (!("GlobalManager" in this)) XPCOMUtils.defineLazyGetter(this, "GlobalManager", () => { const { GlobalManager } = ChromeUtils.import("resource://gre/modules/Extension.jsm", null); return GlobalManager; }); var extensionOptionsMenu = { populateMenu: async function(e) { var prevState, popup = e.target, doc = e.view.document; while (popup.hasChildNodes()) popup.firstChild.remove(); var addons = await AddonManager.getAddonsByTypes(["extension"]); addons.filter(a => !(a.iconURL || "").startsWith("resource://search-extensions/")).sort((a, b) => { var ka = (enabledFirst ? a.isActive ? "0" : "1" : "") + a.name.toLowerCase(); var kb = (enabledFirst ? b.isActive ? "0" : "1" : "") + b.name.toLowerCase(); return (ka < kb) ? -1 : 1; }).forEach(addon => { if (!blackListSet.has(addon.id) && (!addon.hidden || showHidden) && (!addon.userDisabled || showDisabled)) { if (showDisabled && enabledFirst && prevState && addon.isActive != prevState) popup.append(doc.createXULElement("menuseparator")); prevState = addon.isActive; let extension = GlobalManager.extensionMap.get(addon.id); let mi = doc.createXULElement("menuitem"), permissions, uuid, props = { label: `${addon.name}${showVersion ? ` ${addon.version}` : ""}`, class: "menuitem-iconic", tooltiptext: `ID : ${addon.id}${addon.isActive && (uuid = extension?.uuid) ? `\nUUID : ${uuid}` : ""}${(userPermissions && (permissions = addon.userPermissions?.permissions)?.length) ? `\n\n${permissions.join(", ")}` : ""}\n${addon.optionsURL ? `\nЛКМ : Настройки` : ""}\nCtrl+ЛКМ : Копировать ID${uuid ? `\nShift+ЛКМ : Копировать UUID` : ""}${addon.creator?.url ? `\nCtrl+Shift+ЛКМ : Автор, страница на AMO` : ""}\nПКМ : Включить/Отключить${(!addon.isSystem && !addon.isBuiltin) ? `\nCtrl+ПКМ : Удалить` : ""}${addon.homepageURL ? `\nСКМ : Домашняя страница` : ""}\nCtrl+СКМ : Просмотр источника\nShift+СКМ : Просмотр источника во вкладке`, image: addon.iconURL || img, }; for (let p in props) mi.setAttribute(p, props[p]); mi.addEventListener("click", (e) => { extensionOptionsMenu.handleClick(e); }); mi._Addon = addon; mi._Extension = extension; this.setDisable(mi, addon, 0); popup.append(mi); } }); }, handleClick: function(e) { var win = e.view, mi = e.target; if (!("_Addon" in mi) || !("_Extension" in mi)) return; var addon = mi._Addon, extension = mi._Extension; var hasMdf = e.ctrlKey || e.shiftKey || e.altKey || e.metaKey; switch (e.button) { case 0: if (!hasMdf && addon.optionsURL) this.openAddonOptions(addon, win); else if (e.ctrlKey && e.shiftKey && addon.creator?.url) win.gBrowser.selectedTab = this.addTab(win, addon.creator.url); else if (e.ctrlKey) Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper).copyString(addon.id); else if (e.shiftKey && extension?.uuid) Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper).copyString(extension.uuid); win.closeMenus(mi); break; case 1: if (!hasMdf && addon.homepageURL) win.gBrowser.selectedTab = this.addTab(win, addon.homepageURL); else if (e.ctrlKey && !e.shiftKey) this.browseDir(addon); else if (e.shiftKey && !e.ctrlKey) this.browseDir(addon, win); win.closeMenus(mi); break; case 2: if (!hasMdf) { let endis = addon.userDisabled ? "enable" : "disable"; if (addon.id == "screenshots@mozilla.org") Services.prefs.setBoolPref("extensions.screenshots.disabled", !addon.userDisabled); addon[endis]({ allowSystemAddons: true }).then(() => { this.setDisable(mi, addon, 1); }, err => { console.error(err); }); } else if (e.ctrlKey && !addon.isSystem && !addon.isBuiltin && Services.prompt.confirm(null, null, `Удалить ${addon.name}?`)) { if (addon.pendingOperations & AddonManager.PENDING_UNINSTALL) addon.cancelUninstall(); else { addon.uninstall(); return; } let cls = mi.classList; cls.remove("ucf-enabling"); cls.remove("ucf-disabling"); cls.add("ucf-uninstalling"); cls.add("ucf-disabled"); } break; } }, setDisable: function(mi, addon, toggling) { var cls = mi.classList; if (toggling) { if (addon.isActive) { if (addon.optionsURL) cls.remove("ucf-notoptions"); cls.remove("ucf-disabled"); cls.remove("ucf-disabling"); cls.add("ucf-enabling"); } else { cls.remove("ucf-enabling"); cls.add("ucf-disabling"); } } if (!addon.isActive) cls.add("ucf-disabled"); if (!addon.optionsURL) cls.add("ucf-notoptions"); }, openAddonOptions: function(addon, win) { if (!addon.isActive || !addon.optionsURL) return; switch (Number(addon.optionsType)) { case 5: win.BrowserOpenAddonsMgr("addons://detail/" + encodeURIComponent(addon.id) + "/preferences"); break; case 3: win.switchToTabHavingURI(addon.optionsURL, true); break; } }, browseDir: function(addon, win) { try { if (!win) { let file = Services.io.getProtocolHandler("file") .QueryInterface(Ci.nsIFileProtocolHandler) .getFileFromURLSpec(addon.getResourceURI().QueryInterface(Ci.nsIJARURI).JARFile.spec); if (file.exists()) file.launch(); } else win.gBrowser.selectedTab = this.addTab(win, addon.getResourceURI().spec); } catch (e) {} }, addTab: function(win, url, params = {}) { params.triggeringPrincipal = Services.scriptSecurityManager.getSystemPrincipal(); params.relatedToCurrent = true; return win.gBrowser.addTab(url, params); }, }; CustomizableUI.createWidget({ id: id, type: "custom", label: label, tooltiptext: tooltiptext, localized: false, defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(doc) { var btn = doc.createXULElement("toolbarbutton"), win = doc.defaultView, props = { id: id, label: label, tooltiptext: tooltiptext, type: "menu", class: "toolbarbutton-1 chromeclass-toolbar-additional", }; for (let p in props) btn.setAttribute(p, props[p]); btn.addEventListener("click", (e) => { if (e.button == 1) win.BrowserOpenAddonsMgr("addons://list/extension"); }); var mp = doc.createXULElement("menupopup"); mp.id = `${id}-popup`; mp.addEventListener("click", (e) => { e.preventDefault(); e.stopPropagation(); }); mp.addEventListener("contextmenu", (e) => { e.preventDefault(); e.stopPropagation(); }); mp.addEventListener("popupshowing", (e) => { extensionOptionsMenu.populateMenu(e); }); btn.append(mp); var btnstyle = "data:text/css;charset=utf-8," + encodeURIComponent(` #${id} { list-style-image: url("${img}") !important; } #${id}-popup menuitem::after { display: -moz-box !important; -moz-box-align: center !important; -moz-box-pack: center !important; font-style: normal !important; height: 18px !important; width: 18px !important; line-height: 18px !important; font-size: 18px !important; overflow: hidden !important; margin: 0 6px 0 0 !important; } #${id}-popup menuitem:not(.ucf-disabled)::after, #${id}-popup menuitem.ucf-enabling::after { content: "\\2611" !important; color: #6CBE6C !important; } #${id}-popup menuitem.ucf-disabled::after, #${id}-popup menuitem.ucf-disabling::after { content: "\\2610" !important; color: orange !important; } #${id}-popup menuitem.ucf-enabling::after { color: #cccccc !important; } #${id}-popup menuitem.ucf-uninstalling::after { content: "\\0021" !important; } #${id}-popup menuitem.ucf-notoptions, #${id}-popup menuitem.ucf-notoptions label { color: gray !important; } #${id}-popup menuitem.ucf-disabled, #${id}-popup menuitem.ucf-disabled label { color: orange !important; font-style: italic !important; } `); try { win.windowUtils.loadSheetUsingURIString(btnstyle, win.windowUtils.USER_SHEET); } catch (e) {} return btn; }, }); })();} catch (e) {}
Отсутствует
Зачем отдельным?
Это у меня там два разных вопроса, очевидно я их не очень удачно задал. Я имел ввиду, можно ваш скрипт поместить в отдельный файл, а не в общий custom_script.js? На мой взгляд так удобнее их искать, отключать, подключать...
Отсутствует
Vitaliy V.
Поддерживаю voqabuhe, тоже хотелось бы вынести крупные скрипты из custom_script.js в отдельные файлы. Как импорт сделать по аналогии с импортом custom_script_all_win.js и custom_script_win.js? А то уже 65кб, неудобно искать/управлять ими.
Отредактировано _zt (30-08-2020 18:39:52)
Отсутствует
R.S Дополнение - оказывается этот короткое появление белой вкладки везде при запуске любой вкладки(ссылки на сайт)
Попробуйте код отсюда. Я использую такие коды:
/* цвет при загрузке страницы */ @-moz-document url-prefix("chrome://browser/content/browser.x") { #tabbrowser-tabpanels, tabbrowser#content, :-moz-any(#tabbrowser-tabpanels, tabbrowser#content) .browserStack > browser { -moz-appearance: none !important; background: #2A2A2E !important; } }
userContent.css
/* цвет пустой страницы */ @-moz-document url("about:blank") { :root { background: #2A2A2E !important; } }
Отсутствует
sandro79
Спасибо за примеры - они работают, но не решили , что я просил:
короткое появление белой вкладки на секунду при запуске любой вкладки(ссылки на сайт)
и особенно заметно при первом запуске браузера: вначале тёмный фон, затем на секунду светлый и только потом Speed Dial.
Вот этот секундный светлый фон и хотелось бы убрать, если можно???
Отсутствует