А почему не установить расширение
Для меня «из дополнения сделать скрипт для UCF»
звучит как задача сделать так,
чтобы работало именно минуя лисью аддонскую машинерию.
Хотя да, согласен, задача странная. Вот, попробовал так, но,
что-то не уверен, и особо тестировать это не охота.
Создаём папку, кладём туда .xpi файл расширения (как есть).
И создаём в ней startup.js, который подключаем в сандбокс.
(async () => { var fn = Components.stack.filename; var folder = fn.slice(0, fn.lastIndexOf("/") + 1); var dir = Cc["@mozilla.org/chrome/chrome-registry;1"] .getService(Ci.nsIXULChromeRegistry) .convertChromeURL(Services.io.newURI(folder)) .QueryInterface(Ci.nsIFileURL); for(var {leafName} of dir.file.directoryEntries) if (leafName.endsWith(".xpi")) break; var rootURI = `jar:${dir.spec + leafName}!/`; var sym = "llc about br"; var read = async sub => (await fetch(rootURI + sub)).text(); var opts = await read("options.xhtml"); var what = "llc"; var flags = Ci.nsIAboutModule.ALLOW_SCRIPT; var factory = { newChannel(...args) { var nc = Services.io.newChannelFromURIWithLoadInfo; opts = opts.replace(/((?:href|src)=")(.+?")/g, `$1${rootURI}$2`).replace(/<\/head>/, ` <script>var browser = windowRoot.ownerGlobal.UcfPrefs.customSandbox[Symbol.for("${sym}")];</script>\n $&` ); var uri = Services.io.newURI("data:application/xhtml+xml," + encodeURIComponent(opts)); var sysp = Services.scriptSecurityManager.getSystemPrincipal(); return (this.newChannel = (u, loadInfo) => { var channel = nc(uri, loadInfo); channel.owner = sysp; return channel; })(...args); }, getURIFlags: () => flags, createInstance: () => factory, QueryInterface: ChromeUtils.generateQI(["nsIAboutModule"]) }; Components.manager.QueryInterface(Ci.nsIComponentRegistrar).registerFactory( Components.ID("{747e75d6-3146-4c55-b241-f751fa2e73b5}"), null, "@mozilla.org/network/protocol/about;1?what=" + what, factory ); var locData = Object.create(null); var locs = Array.from((await read("_locales/")).match(/\n201: .+?\//g), s => s.slice(6, -1)); for(var loc of locs) locData[loc] = JSON.parse(await read(`_locales/${loc}/messages.json`)); var getMessage = msg => (locData[Services.locale.appLocaleAsBCP47] || locData["en-US"])[msg].message; var obj = {ExtensionAPI: class {}}; obj.ExtensionAPI.prototype.extension = { resourceURL: rootURI, localeData: {localizeMessage: getMessage} }; Services.scriptloader.loadSubScript(rootURI + "parent.js", obj); var LLC = obj.LongLeftClick.prototype; var br = globalThis[Symbol.for(sym)] = {i18n: {getMessage}}; Object.assign(br, LLC.getAPI()); var {getPref} = br.LongLeftClick; br.LongLeftClick.getPref = async arr => getPref(arr); Services.scriptloader.loadSubScript("data:,var llcc = longLClick;", obj); var {lgltck} = obj, proto = obj.llcc.prototype; Object.assign(proto, eval(`({${proto.openLink}})`.replace( "addListeners();", "$&\n if (this.maybeSelectTab(link, win)) return;" ))); // Options var b_tabs = "tabs"; // "tabs" or "visibleTabs" var b_equals = "equals"; // "equals" or "equalsExceptRef" var b_allWins = false; var b_skipContainerTabs = true; var wins = b_allWins ? win => new Set([win, ...Services.wm.getEnumerator("navigator:browser")]) : win => [win]; proto.maybeSelectTab = (link, win) => { var uri = Services.io.newURI(link); for(var w of wins(win)) for(var tab of w.gBrowser[b_tabs]) try { if (b_skipContainerTabs && tab.userContextId) continue; if (uri[b_equals](tab.linkedBrowser.currentURI)) return w != win && w.focus(), w.gBrowser.selectedTab = tab; } catch {}; } LLC.onStartup(); })();
В сайдбаре, производишь долгий клик по закладке — открывается вкладка.
Отпускаешь мышь — открывается ещё одна.
Это в смысле, что включена настройка browser.tabs.loadBookmarksInTabs
иначе симптомы другие, но есть.
Лечится удалением из parent.js всех mozSystemGroup: true
Зачем они там — понять не смог.
Ещё, похоже, контейнер, в котором отрывается вкладка,
привязан к контейнеру активной вкладки. Для контента — это правильно.
Но для браузера — это немного странно. В самом Firefox такой привязки нет,
а для открытия закладок в контейнере есть специальный пункт в контекстном меню.
И, в parent.js замечен toolbar#add-additional-vertical-bar
что слегка несовременно.
Отсутствует
А закрывать по щелчку в поле контента нельзя?
Проверяйте
Лечится удалением из parent.js всех mozSystemGroup: true
Зачем они там — понять не смог.
Это нужно для panel'ей , без системных слушателей не перехватываются события от мыши и они закрываются, а этого не нужно если не включена соответствующая настройка
За сайдбар спасибо, исправил теперь для сайдбара без mozSystemGroup.
Но для браузера — это немного странно
Мне так надо было, добавил настройку.
в parent.js замечен toolbar#add-additional-vertical-bar
что слегка несовременно.
Да прикольно, исправил на просто toolbar, так не устареет, наверно
Добавлено 29-06-2024 12:05:43
только плитки на новой вкладе открывается постоянно новые
Ну я так в расширении делать не буду для правильной работы нужно учитывать перенаправления а для этого нужен сетевой запрос, что слегка долго
Отредактировано Vitaliy V. (29-06-2024 12:05:43)
Отсутствует
у меня с обновленным расширением вообще перестал работать клик на закладках
Ну а вы как хотели, не буду же я после каждого обновления расширения проверять работает ли оно с нестандартным загрузчиком, если используете то не обновляйте.
startup.js -> строка 67 заменить win на this.win
Отсутствует
egorsemenov06
Вы понимаете, что в отличии от вас на этом форуме люди поиском по версии для печати пользуется? Хватит засерать ветку никому не нужным цитированием. Вы ведете себя как дикарь впервые попавший в город. Это тот что ссыт и срет там где ему приспичило, а не в специально отведенных местах. Цитирование, ограниченное, а не всего поста, допустимо только тогда, когда собеседник может не понять о чем речь в вашем текущем посте.
Отсутствует
Dummy, I need your help. I want to remove the blue line in the box (Show as follow picture)
Here's the script
// ==UserScript== // @name UnifiedExtensionsSearch.uc.js // @description 在扩展面板中搜索扩展 // @author Ryan // @include main // @version 0.1 // @compatibility Firefox 126 // @destroy window.UnifiedExtensionsSearch.onUnload(); // @homepageURL https://github.com/benzBrake/FirefoxCustomize // ==/UserScript== (window.UnifiedExtensionsSearch = { timer: [], init: function (v, c) { if (!v) return; this.view = v; var pi = document.createProcessingInstruction( 'xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(c) + '"' ); this.style = document.insertBefore(pi, document.documentElement); ["ViewHiding"].forEach(t => v.addEventListener(t, this, false)); window.addEventListener("unload", this, false); // Corrected line let w = document.createElement('html:div'); for (let [k, v] of Object.entries({ id: 'unified-extensions-search-input-container', class: 'unified-extensions-search-input-container', role: 'searchbox', })) { w.setAttribute(k, v) } let i = document.createElement('html:div'); for (let [k, v] of Object.entries({ id: 'unified-extensions-search-input', class: 'unified-extensions-search-input', role: 'search', contenteditable: true, empty: true })) { i.setAttribute(k, v) } this.input = w.appendChild(i); ['input', 'change', 'keypress'].forEach(e => i.addEventListener(e, this, false)); let cl = document.createElement('html:button'); for (let [k, v] of Object.entries({ id: 'unified-extensions-search-clear', class: 'unified-extensions-search-clear', role: 'button', })) { cl.setAttribute(k, v) } this.btn = w.appendChild(cl); cl.addEventListener('click', this, false); v.querySelector('.panel-subview-body[context="unified-extensions-context-menu"]').before(w); }, handleEvent (event) { const { type } = event; // 防止回车换行 if (type == 'keypress' && event.keyCode == 13) { event.preventDefault(); event.stopPropagation(); return; } if (this.timer[type]) clearTimeout(this.timer[type]); this.timer[type] = setTimeout(() => { this.timer[type] = null; let fnName = 'on' + type[0].toUpperCase() + type.slice(1); if (this[fnName]) this[fnName](event); else console.log(`UnifiedExtensionsSearch.uc.js: Unhandled event: ${type}`) }, 100); }, onViewHiding () { this.input.textContent = ''; this.input.setAttribute("empty", true); this.resetExtensions(); }, onInput () { let val = this.input.textContent; if (val) { this.input.setAttribute("empty", false); this.searchExtensions(); } else { this.input.setAttribute("empty", true); this.input.innerHTML = ''; this.resetExtensions(); } }, searchExtensions () { let val = this.input.textContent.trim(); if (val) { let search = val.toLowerCase(); let items = this.view.querySelectorAll('.unified-extensions-item'); for (let item of items) { let name = item.querySelector('.unified-extensions-item-name').textContent.toLowerCase(); if (name.includes(search)) { item.removeAttribute("hidden"); } else { item.setAttribute("hidden", true); } } } }, resetExtensions () { let items = document.querySelectorAll('.unified-extensions-item'); for (let item of items) { item.removeAttribute("hidden"); } }, onClick () { if (this.input.getAttribute('empty') === "true") return; this.input.innerHTML = ''; this.input.setAttribute("empty", true); this.resetExtensions(); }, onUnload () { window.removeEventListener('unload', this, false); if (this.style && this.style.parentNode) { this.style.parentNode.removeChild(this.style); this.style = null; } ["ViewHiding"].forEach(t => this.view.removeEventListener(t, this, false)); let c = view.querySelector('#unified-extensions-search-input-container'); if (c && c.parentNode) c.parentNode.removeChild(c); delete window.UnifiedExtensionsSearch; } }).init(gUnifiedExtensions.panel && PanelMultiView.getViewNode( document, "unified-extensions-view" ), ` #unified-extensions-search-input-container { min-height: 20px; margin:5px 10px; border: 1px solid var(--panel-border-color); display: flex; flex-direction: row; overflow: hidden; } #unified-extensions-search-input { flex-grow: 1; height: 100%; padding: 5px; line-height: 20px; font-size: 16px; max-width: calc(100% - 40px); &[empty="true"] { &+#unified-extensions-search-clear { background-position: -30px 50%, 8px 50%; } } } #unified-extensions-search-clear { width: 20px; height: 20px; padding: 5px; flex-shrink: 0; background-image: url(chrome://global/skin/icons/close.svg), url(chrome://global/skin/icons/search-glass.svg); background-position: 8px 50%, 30px 50%; background-repeat: no-repeat no-repeat; transition: background-position 0.2s ease-in-out; } .unified-extensions-item[hidden=true] { display: none; visibility: collapse; opacity: 0; } `);
Отредактировано brake (29-06-2024 17:07:24)
Отсутствует
Это нужно для panel'ей
О! Теперь увидел, на примере кнопки «Библиотека» (#library-button).
для правильной работы нужно учитывать перенаправления а для этого нужен сетевой запрос, что слегка долго
Чисто теоретически, можно опрашивать child actor
на предмет window.docShell.currentDocumentChannel.originalURI
Но, даже если работает — хрен не слаще редьки, наверно.
if (node.matches(":is(menupopup,panel) :scope:is(menuitem,toolbarbutton)")) {
Похоже, отвалился кейс #PlacesToolbarItems > toolbarbutton.bookmark-item:not([type=menu])
может Dumby мод сделает
Можно попробовать добавить ещё насилия.
Имеет смысл, только если в about:llc постоянно включена галка
[✔] Включить "долгий" клик для ссылок
После LLC.onStartup();
// await new Promise(ChromeUtils.idleDispatch); // works without, but ... var m = "resource://long_left_click/LLCWinActorParent.mjs"; try {var actorProto = ChromeUtils.importESModule(m).LLCWinActorParent.prototype;} catch {return;} var lazy = globalThis, re = /^about:(?:newtab|home)$/; Object.assign(actorProto, eval(`({${actorProto.receiveMessage}})`.replace( "var tab ", "if (re.test(browser.currentURI.spec) && proto.maybeSelectTab(link, browser.ownerGlobal)) return;\n $&" )));
I want to remove the blue line in the box (Show as follow picture)
outline: none;
for
#unified-extensions-search-input
Отредактировано Dumby (29-06-2024 17:13:49)
Отсутствует
ReferenceError: xulns is not defined
Ну, можно заменить xulns собственно на сам неймспейс
"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
или node.namespaceURI == xulns на XULElement.isInstance(node)
Отсутствует
при этих настройках
пропадают пкнкты
Уж не знаю, при каких таких «этих настройках»,
но, не сочиняй, там всё совсем не так, а сложнее.
Первое — эти пункты не расчитаны на autopopup-фичу.
И, в фиче торчит document.popupNode, которого давно нет.
Однако, в этой кнопке нет и никакого контекста.
Поэтому, удаляем строку if(!isContextOpened())
и делаем такую замену
/* function isContextOpened() { return inBtn(document.popupNode); } function inBtn(node) { for(; node; node = node.parentNode) if(node == self) return true; return false; } */ (desc => { var {set} = desc; desc.set = val => { if (val) delete this.open, this.onmousedown?.({}); set.call(this, val); } Object.defineProperty(this, "open", desc); })(Object.getOwnPropertyDescriptor(MozElements.ButtonBase.prototype, "open"));
/* var df = MozXULElement.parseXULToFragment(` <menugroup orient="vertical"> <menuseparator/> <menuitem class="menuitem-iconic" image="data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path style='fill:context-fill rgb(142, 142, 152);fill-opacity:context-fill-opacity' d='M13.946 2.353c.273 0 .498.23.498.513v10.262l-.156-.209-4.233-5.647a.737.737 0 0 0-1.183 0l-2.584 3.446-.95-1.37a.732.732 0 0 0-1.214.003l-2.49 3.594-.14.199V2.866c0-.282.224-.513.498-.513h11.954zM1.992.813C.893.813 0 1.732 0 2.865v10.268c0 1.133.893 2.054 1.992 2.054h11.954c1.098 0 1.992-.921 1.992-2.054V2.866c0-1.133-.894-2.054-1.992-2.054H1.992zm2.49 6.16a1.494 1.54 0 1 0 0-3.08 1.494 1.54 0 1 0 0 3.08z'/></svg>" label="Сохранить всю страницу как PNG" value="all"/> <menuitem class="menuitem-iconic" image="data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path style='fill:context-fill rgb(142, 142, 152);fill-opacity:context-fill-opacity' d='M13.946 2.353c.273 0 .498.23.498.513v10.262l-.156-.209-4.233-5.647a.737.737 0 0 0-1.183 0l-2.584 3.446-.95-1.37a.732.732 0 0 0-1.214.003l-2.49 3.594-.14.199V2.866c0-.282.224-.513.498-.513h11.954zM1.992.813C.893.813 0 1.732 0 2.865v10.268c0 1.133.893 2.054 1.992 2.054h11.954c1.098 0 1.992-.921 1.992-2.054V2.866c0-1.133-.894-2.054-1.992-2.054H1.992zm2.49 6.16a1.494 1.54 0 1 0 0-3.08 1.494 1.54 0 1 0 0 3.08z'/></svg>" label="Сохранить видимую часть страницы как PNG" value="page"/> <menuitem class="menuitem-iconic" image="data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><g style='fill:context-fill rgb(142, 142, 152);fill-opacity:context-fill-opacity'><path d='M11.108 8.852c.327 0 .591-.27.591-.602a.596.596 0 0 0-.59-.602c-.327 0-.591.27-.591.602 0 .332.264.602.59.602z'/><path d='M4.808 7.047c0-.665.53-1.203 1.182-1.203h6.3c.652 0 1.18.538 1.18 1.203v4.01c0 .665-.528 1.203-1.18 1.203h-6.3a1.192 1.192 0 0 1-1.182-1.203v-4.01zm1.182 0v3.524l1.639-1.808a.972.972 0 0 1 1.446 0l2.074 2.287-.008.007h1.149v-4.01h-6.3zm2.362 2.691-1.195 1.32h2.39l-1.195-1.32z'/><path d='M3.036 1.833C1.406 1.833.083 3.18.083 4.841v6.818c0 1.661 1.323 3.008 2.953 3.008h9.844c1.631 0 2.953-1.347 2.953-3.008V4.84c0-1.661-1.322-3.008-2.953-3.008H3.036zM1.265 4.841c0-.997.793-1.805 1.771-1.805h9.844c.979 0 1.772.808 1.772 1.805v6.818c0 .997-.793 1.805-1.772 1.805H3.036c-.978 0-1.771-.808-1.771-1.805V4.84z'/></g></svg>" label="Сохранить выбранный элемент страницы как PNG" value="click"/> <menuitem class="menuitem-iconic" image="data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='context-fill' fill-opacity='context-fill-opacity'><path fill-rule='evenodd' d='M2.63 1.255c-.76 0-1.375.616-1.375 1.375v2.685a.625.625 0 0 1-1.25 0V2.63A2.625 2.625 0 0 1 2.63.005h2.685a.625.625 0 1 1 0 1.25H2.63ZM10.06.63c0-.345.28-.625.625-.625h2.685a2.625 2.625 0 0 1 2.625 2.625v2.685a.625.625 0 1 1-1.25 0V2.63c0-.76-.616-1.375-1.375-1.375h-2.685A.625.625 0 0 1 10.06.63Zm5.31 9.43c.345 0 .625.28.625.625v2.685a2.625 2.625 0 0 1-2.625 2.625h-2.685a.625.625 0 1 1 0-1.25h2.685c.76 0 1.375-.616 1.375-1.375v-2.685c0-.345.28-.625.625-.625ZM2.729 7.3c-.79 0-1.43.64-1.43 1.429v4.542c0 .79.64 1.43 1.43 1.43H7.27c.79 0 1.43-.64 1.43-1.43V8.73c0-.79-.64-1.43-1.43-1.43H2.73ZM0 8.728A2.729 2.729 0 0 1 2.729 6H7.27A2.729 2.729 0 0 1 10 8.729v4.542A2.729 2.729 0 0 1 7.271 16H2.73A2.729 2.729 0 0 1 0 13.271V8.73Z' clip-rule='evenodd'/><path d='M6.9 14.005H2.73a.5.5 0 0 1-.372-.835l2.085-2.317a.5.5 0 0 1 .744 0l2.085 2.317a.5.5 0 0 1-.371.835ZM8 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z'/></svg>" label="Сохранить выбранную область страницы как PNG" value="clipping"/> </menugroup> `); */ var df = MozXULElement.parseXULToFragment(` <menugroup orient="vertical"> <menuseparator/> <menuitem class="menuitem-iconic" image="data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path style='fill:context-fill rgb(142, 142, 152);fill-opacity:context-fill-opacity' d='M13.946 2.353c.273 0 .498.23.498.513v10.262l-.156-.209-4.233-5.647a.737.737 0 0 0-1.183 0l-2.584 3.446-.95-1.37a.732.732 0 0 0-1.214.003l-2.49 3.594-.14.199V2.866c0-.282.224-.513.498-.513h11.954zM1.992.813C.893.813 0 1.732 0 2.865v10.268c0 1.133.893 2.054 1.992 2.054h11.954c1.098 0 1.992-.921 1.992-2.054V2.866c0-1.133-.894-2.054-1.992-2.054H1.992zm2.49 6.16a1.494 1.54 0 1 0 0-3.08 1.494 1.54 0 1 0 0 3.08z'/></svg>" label="Сохранить всю страницу как PNG" value="all"/> <menuitem class="menuitem-iconic" image="data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path style='fill:context-fill rgb(142, 142, 152);fill-opacity:context-fill-opacity' d='M13.946 2.353c.273 0 .498.23.498.513v10.262l-.156-.209-4.233-5.647a.737.737 0 0 0-1.183 0l-2.584 3.446-.95-1.37a.732.732 0 0 0-1.214.003l-2.49 3.594-.14.199V2.866c0-.282.224-.513.498-.513h11.954zM1.992.813C.893.813 0 1.732 0 2.865v10.268c0 1.133.893 2.054 1.992 2.054h11.954c1.098 0 1.992-.921 1.992-2.054V2.866c0-1.133-.894-2.054-1.992-2.054H1.992zm2.49 6.16a1.494 1.54 0 1 0 0-3.08 1.494 1.54 0 1 0 0 3.08z'/></svg>" label="Сохранить видимую часть страницы как PNG" value="page"/> <menuitem class="menuitem-iconic" image="data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><g style='fill:context-fill rgb(142, 142, 152);fill-opacity:context-fill-opacity'><path d='M11.108 8.852c.327 0 .591-.27.591-.602a.596.596 0 0 0-.59-.602c-.327 0-.591.27-.591.602 0 .332.264.602.59.602z'/><path d='M4.808 7.047c0-.665.53-1.203 1.182-1.203h6.3c.652 0 1.18.538 1.18 1.203v4.01c0 .665-.528 1.203-1.18 1.203h-6.3a1.192 1.192 0 0 1-1.182-1.203v-4.01zm1.182 0v3.524l1.639-1.808a.972.972 0 0 1 1.446 0l2.074 2.287-.008.007h1.149v-4.01h-6.3zm2.362 2.691-1.195 1.32h2.39l-1.195-1.32z'/><path d='M3.036 1.833C1.406 1.833.083 3.18.083 4.841v6.818c0 1.661 1.323 3.008 2.953 3.008h9.844c1.631 0 2.953-1.347 2.953-3.008V4.84c0-1.661-1.322-3.008-2.953-3.008H3.036zM1.265 4.841c0-.997.793-1.805 1.771-1.805h9.844c.979 0 1.772.808 1.772 1.805v6.818c0 .997-.793 1.805-1.772 1.805H3.036c-.978 0-1.771-.808-1.771-1.805V4.84z'/></g></svg>" label="Сохранить выбранный элемент страницы как PNG" value="click"/> <menuitem class="menuitem-iconic" image="data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='context-fill' fill-opacity='context-fill-opacity'><path fill-rule='evenodd' d='M2.63 1.255c-.76 0-1.375.616-1.375 1.375v2.685a.625.625 0 0 1-1.25 0V2.63A2.625 2.625 0 0 1 2.63.005h2.685a.625.625 0 1 1 0 1.25H2.63ZM10.06.63c0-.345.28-.625.625-.625h2.685a2.625 2.625 0 0 1 2.625 2.625v2.685a.625.625 0 1 1-1.25 0V2.63c0-.76-.616-1.375-1.375-1.375h-2.685A.625.625 0 0 1 10.06.63Zm5.31 9.43c.345 0 .625.28.625.625v2.685a2.625 2.625 0 0 1-2.625 2.625h-2.685a.625.625 0 1 1 0-1.25h2.685c.76 0 1.375-.616 1.375-1.375v-2.685c0-.345.28-.625.625-.625ZM2.729 7.3c-.79 0-1.43.64-1.43 1.429v4.542c0 .79.64 1.43 1.43 1.43H7.27c.79 0 1.43-.64 1.43-1.43V8.73c0-.79-.64-1.43-1.43-1.43H2.73ZM0 8.728A2.729 2.729 0 0 1 2.729 6H7.27A2.729 2.729 0 0 1 10 8.729v4.542A2.729 2.729 0 0 1 7.271 16H2.73A2.729 2.729 0 0 1 0 13.271V8.73Z' clip-rule='evenodd'/><path d='M6.9 14.005H2.73a.5.5 0 0 1-.372-.835l2.085-2.317a.5.5 0 0 1 .744 0l2.085 2.317a.5.5 0 0 1-.371.835ZM8 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z'/></svg>" label="Сохранить выбранную область страницы как PNG" value="clipping"/> </menugroup> `);
Отсутствует
а поставил SVG'шки те что были все заработало
Ой, прошу прощения, у меня код, создающий кнопку, оказался не тот.
поменял
Не-не, вот этот кусок
(desc => { var {set} = desc; desc.set = val => { if (val) delete this.open, this.onmousedown?.({}); set.call(this, val); } Object.defineProperty(this, "open", desc); })(Object.getOwnPropertyDescriptor(MozElements.ButtonBase.prototype, "open"));
Кстати, file picker не поправлен
/* fp.init(popup.ownerGlobal, "Укажите путь к программе", fp.modeOpen); */ fp.init(popup.ownerGlobal.browsingContext, "Укажите путь к программе", fp.modeOpen);
Отсутствует
All
Кнопка для sidebar_tabs обновлена.
Теперь одна команда открытия/закрытия для обоих режимов и убраны тайминги при открытии/закрытии по кнопке.
При открытии по кнопке, с включенным AutoHide, закрывать панель необязательно, можно просто щелкнуть в поле контента.
Открытие/закрытие по наведению отключается --v-sidebar-min-width: 0px;
Работает с актуальным UCF
Отредактировано _zt (02-07-2024 17:48:29)
Отсутствует
All
Вот только это не для всех, данная кнопка нерекомендуемый способ, т.е. костыль, кому надо переключать урезанное AutoHide. С остальным лучше справится кнопка в составе Sidebar Tabs.
Отсутствует
Подскажите пожалуйста как поставить и где взять вертикальную панель на 115.12.0
Взять здесьhttps://github.com/Aris-t2/CustomJSforF … ical.uc.js Активировать методом Aris-t2 https://forum.ru-board.com/topic.cgi?fo … art=1360#1 (шапка).
Это без UCF. Если же используете UCF, то в него входит свой вертикальный тулбар.
Отредактировано fuchsfan (03-07-2024 08:10:05)
Отсутствует
Есть ли вариант сделать так, чтобы открытые в sidebar_tabs сайты учитывали настройку браузера в части предпочитаемой цветовой схемы для страниц?
Отредактировано Den199 (03-07-2024 09:47:09)
Firefox 128 (64-bit) on windows 10 (64-bit).
Отсутствует
А они учитывают, проверьте на сайте поддерживающем эту технологию, например YouTube.
Я и проверил
https://github.com/VitaliyVstyle/VitaliyVstyle.github.io - в обычной вкладке отображается в темной цветовой схеме.
А во вкладке "Sites" в sidebar_tabs в светлой.
Вкладки "Bookmarks" и "History" в sidebar_tabs с тёмным фоном. Вкладки "Downloads" и "Add-ons" в sidebar_tabs со светлым фоном, хотя при их открытии в обычном окне - фон тёмный.
В настройках браузера выбрана темная тема и темная цветовая схема для сайтов.
Firefox 128 (64-bit) on windows 10 (64-bit).
Отсутствует
Den199
Ну и я проверил, иначе советовать бы не стал.
Менеджер профилей - создание, удаление и переключение профилей Firefox | Справка Firefox
Отсутствует
В настройках браузера выбрана темная тема и темная цветовая схема для сайтов.
У меня системная, которая светлая.
Но, выставил как сказано, и ... разреши подтвердить.
Вкладки "Bookmarks" и "History" в sidebar_tabs с тёмным фоном.
Да.
Вкладки "Downloads" и "Add-ons" в sidebar_tabs со светлым фоном
Да.
Синтетическая file:/// страница во вкладке «Sites»
с @media (prefers-color-scheme: dark) {…} — тоже идёт лесом, остаётся светлой.
Отсутствует
https://github.com/VitaliyVstyle/VitaliyVstyle.github.io - в обычной вкладке отображается в темной цветовой схеме.
А во вкладке "Sites" в sidebar_tabs в светлой.
2024.07.04_013909.png 2024.07.04_014101.png
Вкладки "Downloads" и "Add-ons" в sidebar_tabs со светлым фоном
Но стили подхватываются. @media (prefers-color-scheme: dark) работает.
2024.07.04_015016.png 2024.07.04_015248.png 2024.07.04_015454.png
Dumby
Скрипт бы какой, что б заставить во вкладке "Сайты" хотя бы некоторые расширения работать, Dark Reader например.
Отсутствует
Вкладки "Downloads" и "Add-ons" в sidebar_tabs со светлым фоном
Да.
В вообще не воспроизводится, посмотрел в действительно так.
Чтобы включить цветовую схему требуется объявить для browser color-scheme: light dark;
Отсутствует
хотя бы некоторые расширения работать, Dark Reader например
Ну, Stylus, например, работает.
А Dark Reader хочет того, чего нет.
Как подсунуть ему фейк — увы, я не знаю.
Чтобы включить цветовую схему требуется объявить для browser color-scheme: light dark;
Ух ты!
Добавил в userChrome.css
browser {
color-scheme: light dark;
}
И, теперь, во вкладках «Downloads» и «Add-ons» — контент тёмный.
Более того, синтетическая file:/// страница во вкладке «Sites»
с @media (prefers-color-scheme: dark) {…}
и начальная about:neterror «Мы не можем подключиться к серверу github.com.»
(что, в моём случае, совершенно нормально)
тоже стали тёмными.
Таким образом — похоже, решение найдено.
Просто чего я подорвался: зт закошмарил дэна,
словно он какое-то фуфло прогоняет, а это не так.
Отсутствует
Dumby
Вот не надо/ И он, и я, о сайтах говорили, которые поддерживают переключение темы в зависимости от настроек браузера.
Есть ли вариант сделать так, чтобы открытые в sidebar_tabs сайты учитывали настройку браузера в части предпочитаемой цветовой схемы для страниц?
https://github.com/VitaliyVstyle/VitaliyVstyle.github.io - в обычной вкладке отображается в темной цветовой схеме.
А во вкладке "Sites" в sidebar_tabs в светлой.
Это я потом уже, после вашего поста, скринов налепил и с сайтами и без.
И вообще, ну нет у меня, поиском не ищется, никакой части
browser {
color-scheme: light dark;
}
однако все темное (за исключением сайтов без адаптивных тем).
Vitaliy V.
Зачем они так сделали, настройка layout.css.light-dark.enabled тогда зачем?
Отсутствует
Зачем они так сделали, настройка layout.css.light-dark.enabled тогда зачем?
Что сделали? Настройка для поддержки или неподдержки сайтов например с функцией light-dark
Для стилей браузера настройка не влияет.
Отредактировано Vitaliy V. (04-07-2024 17:31:36)
Отсутствует
Вот не надо/ И он, и я, о сайтах говорили
Хорошо, не буду.
Действительно, херли я встрял?
Если ты считаешь, что Den199 просто врёт,
то я не тот человек, который может это рассудить.
Тем не менее, commit есть.
Отсутствует