Dumby
на ff 107 заметил, что перестал работать скрипт SwitchKeyboardLayout
try {(keybUtils => CustomizableUI.createWidget({ type: "custom", id: "SwitchKeyboardLayout", onBuild(doc) { var btn = doc.createXULElement("toolbarbutton"); btn.id = this.id; btn.label = btn.tooltipText = "Switch Keyboard Layout"; btn.image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAk1BMVEX///8/Pz8BAQF8fHwJCQkCAgIJCQl8fHx9fX0AAABJSUkBAQENDQ0wMDBVVVUAAABra2t0dHR7e3thYWEBAQEAAAAAAAABAQEAAAAgICABAQEBAQH8/Pzw8PDp6en39/fj4+Pe3t41V9I/YeWKioqDg4N9fX0jRa8wUrVoaGhkhuxWeNx1dXVCZMhvb28kRqsqTL4KidXxAAAAHHRSTlMAAABndwAAAAA0blVZcm1naWhNa6hrcJ8AAKRU4jk/3gAAAHVJREFUeF6FyMUCwjAUBdEbaQupUMOjqMv/fx1dQN6yZ3aDcWnyw6ezoRWNYc15kqKQZCFlgTKQQwgllL/dn5f3+bPb+6P3CpWNw56srdCZOMzDmA61i8O9nKvRaHLVukEryFKIFtnkj7ENYxmNdd5v+5xj1BcJ/w9Kj6K7ZAAAAABJRU5ErkJggg=="; btn.setAttribute("oncommand", "linkedObj.switch(document);"); btn.className = "toolbarbutton-1 chromeclass-toolbar-additional"; btn.linkedObj = this; return btn; }, switch(doc) { var br = doc.activeElement; br && br.localName == "browser" && br.isRemoteBrowser ? br.messageManager.loadFrameScript(this.url, false) : this.keybUtils.switchSelKeybLayout(); }, get url() { delete this.url; return this.url = `data:;charset=utf-8,(${ encodeURIComponent(keybUtils) }).switchSelKeybLayout()`; }, get keybUtils() { delete this.keybUtils; var def = "let{KeyEvent,HTMLInputElement,HTMLTextAreaElement}=Cu.getGlobalForObject(Services);"; var url = `data:;charset=utf-8,${def}%0Athis.keybUtils=${encodeURIComponent(keybUtils)}`; Services.scriptloader.loadSubScript(url, this); var {id} = this; this.keybUtils.getFocusedElement = function(_subCall, _focusFixed) { var window = Services.focus.activeWindow, {document} = window; var button = document.getElementById(id); if( !_focusFixed && "closeMenus" in window && document.commandDispatcher.focusedElement == button ) { window.closeMenus(button); window.setTimeout(function(_this) { _this.switchSelKeybLayout(_subCall, true); }, 0, this); return; } return document.commandDispatcher.focusedElement; } return this.keybUtils; } }))(`{ //== Options noSelBehavior: { // Shift+Home ctrlKey: false, altKey: false, shiftKey: true, metaKey: false, keyCode: KeyEvent.DOM_VK_HOME, charCode: 0 }, // 0 - do nothing // 1 - convert all text // Or use object like following to simulate "keypress" event: convTableForward: { // ru -> en "\\"": "@", ":": "^", ";": "$", "?": "&", ",": "?", "/": "|", ".": "/", "э": "'", "б": ",", "ю": ".", "Ж": ":", "ж": ";", "Б": "<", "Ю": ">", "Э": "\\"", "х": "[", "ъ": "]", "ё": "\`", "Х": "{", "Ъ": "}", "Ё": "~", "№": "#", "Ф": "A", "ф": "a", "И": "B", "и": "b", "С": "C", "с": "c", "В": "D", "в": "d", "У": "E", "у": "e", "А": "F", "а": "f", "П": "G", "п": "g", "Р": "H", "р": "h", "Ш": "I", "ш": "i", "О": "J", "о": "j", "Л": "K", "л": "k", "Д": "L", "д": "l", "Ь": "M", "ь": "m", "Т": "N", "т": "n", "Щ": "O", "щ": "o", "З": "P", "з": "p", "Й": "Q", "й": "q", "К": "R", "к": "r", "Ы": "S", "ы": "s", "Е": "T", "е": "t", "Г": "U", "г": "u", "М": "V", "м": "v", "Ц": "W", "ц": "w", "Ч": "X", "ч": "x", "Н": "Y", "н": "y", "Я": "Z", "я": "z", __proto__: null }, //== End of options get convTableBackward() { var ctb = { __proto__: null }; var ctf = this.convTableForward; for(var c in ctf) ctb[ctf[c]] = c; delete this.convTableBackward; return this.convTableBackward = ctb; }, inPrimaryLayout: function(s) { for(var i = 0, l = s.length; i < l; ++i) { var c = s.charAt(i); /* if(c in this.convTableForward) return true; if(c in this.convTableBackward) return false; */ var primary = c in this.convTableForward; if(primary ^ c in this.convTableBackward) return primary; } return false; }, switchKeybLayout: function(s, convTable) { var res = ""; for(var i = 0, l = s.length; i < l; ++i) { var c = s.charAt(i); res += c in convTable ? convTable[c] : c; } return res; }, getFocusedElement: function() { return Cc["@mozilla.org/focus-manager;1"].getService(Ci.nsIFocusManager) .getFocusedElementForWindow(content, true, {}); }, switchSelKeybLayout: function(_subCall, _focusFixed) { var fe = this.getFocusedElement(_subCall, _focusFixed); if(!fe) return; if(fe instanceof HTMLInputElement || fe instanceof HTMLTextAreaElement) { var ta = fe; try { var val = ta.value; var sel = val.substring(ta.selectionStart, ta.selectionEnd); } catch(e) { // Non-text HTMLInputElement return; } if(!sel && val && this.noSelBehavior && !_subCall) { if(this.noSelBehavior == 1) { ta.selectionStart = 0; ta.selectionEnd = val.length; sel = val; } else { this.handleNoSel(ta); return; } } if(!sel) return; var res = this.switchKeybLayout( sel, this.inPrimaryLayout(sel) ? this.convTableForward : this.convTableBackward ); if(res != sel) this.insertText(ta, res); } else if(fe.contentEditable == "true") { var doc = fe.ownerDocument; var docURI = doc.documentURI; if( docURI.substr(0, 5) == "data:" && docURI.indexOf("chrome://browser/skin/devtools/") != -1 ) { //~ todo: seems like we only can use paste from clipboard here... return; } var sel = doc.defaultView.getSelection(); var rng = sel.rangeCount && sel.getRangeAt(0); var tmpNode; if(!rng || rng.collapsed) { if(!this.noSelBehavior || _subCall) return; if(this.noSelBehavior == 1) { var r = doc.createRange(); r.selectNodeContents(fe); sel.removeAllRanges(); sel.addRange(r); tmpNode = fe.cloneNode(true); } else { this.handleNoSel(fe); return; } } else { tmpNode = doc.createElementNS("http://www.w3.org/1999/xhtml", "div"); tmpNode.appendChild(rng.cloneContents()); } var orig = tmpNode.innerHTML; var convTable = this.inPrimaryLayout(tmpNode.textContent) ? this.convTableForward : this.convTableBackward; var _this = this; var parseChildNodes = function(node) { if(node instanceof Element) { var childNodes = node.childNodes; for(var i = childNodes.length - 1; i >= 0; --i) parseChildNodes(childNodes[i]); } else if(node.nodeType == node.TEXT_NODE) { var text = node.nodeValue; var newText = _this.switchKeybLayout(node.nodeValue, convTable); if(newText != text) node.parentNode.replaceChild(doc.createTextNode(newText), node); } } parseChildNodes(tmpNode); var res = tmpNode.innerHTML; if(res != orig) doc.execCommand("insertHTML", false, res); } }, handleNoSel: function(node) { this.select(node); this.switchSelKeybLayout(true); }, select: function(node) { var e = this.noSelBehavior; if(!e || typeof e != "object") return; /* var evt = new node.ownerGlobal.KeyboardEvent( "keypress", {bubbles: true, cancelable: true, ...e} ); node.dispatchEvent(evt); }, */ if(ChromeUtils.domProcessChild.childID) { var cmd = this.beh2cmd[e.ctrlKey + "_" + e.shiftKey + "_" + e.keyCode]; cmd && docShell.doCommand(cmd); } else node.dispatchEvent(new node.ownerGlobal.KeyboardEvent( "keypress", {bubbles: true, cancelable: true, ...e} )); }, beh2cmd: { // Ctrl_Shift_VK false_true_36: "cmd_selectLinePrevious", // Shift+Home }, insertText: function(ta, text) { //var editor = ta.QueryInterface(Components.interfaces.nsIDOMNSEditableElement).editor var editor = ta.editor .QueryInterface(Components.interfaces.nsIPlaintextEditor || Ci.nsIEditor); if(editor.flags & editor.eEditorReadonlyMask) return; var sTop = ta.scrollTop; var sHeight = ta.scrollHeight; var sLeft = ta.scrollLeft; // var sWidth = ta.scrollWidth; if(text) editor.insertText(text); else editor.deleteSelection(0, 0); ta.scrollTop = sTop + (ta.scrollHeight - sHeight); ta.scrollLeft = sLeft; // + (ta.scrollWidth - sWidth); } }`)} catch(ex) {Cu.reportError(ex);}
Отредактировано Inko7 (07-12-2022 23:23:38)
Отсутствует
на ff 107 заметил, что перестал работать скрипт
Не вижу на 107.0.1 такого.
Но, x instanceof *Element лучше заменить на *Element.isInstance(x)
Там три вхождения (поиск по «instanceof»).
Отсутствует
не долго радовался((
скопировал правленый файл скрипта, принес с работы домой, заменил им текущий нерабочий, перегрузил FF с очисткой кэша - не заработало!
начал разбираться:
оказывается, если тыцкать саму кнопку, то раскладка слов исправляется! не работает код на горячую клавишу F8
// Назначить клавишу F8 для исправления раскладки введенного текста // код SwitchKeyboardLayout в файле custom_script.js try {(id => { var listener = { get obj() { var obj = document.getElementById(id); if (obj) obj = obj.linkedObj; else { obj = Cu.import("resource:///modules/CustomizableUI.jsm", {}) .gPalette.get(id); if (obj) obj = obj.implementation; else { Services.console.logStringMessage(id + " not found"); return this.destroy() || {switch() {}}; } } delete this.obj; return this.obj = obj; }, handleEvent(e) { if (e.key != "F8" || e.ctrlKey || e.shiftKey || e.altKey || e.repeat) return; //e.preventDefault(); //e.stopPropagation(); this.obj.switch(document); }, destroy: function destroy() { removeEventListener("keydown", this, true); removeEventListener("unload", destroy); } }; addEventListener("keydown", listener, true); addEventListener("unload", listener.destroy); })("SwitchKeyboardLayout");} catch(ex) {Cu.reportError(ex);}
Dumby
извиняюсь, что не верно и не разобравшись озвучил суть проблемы
почини пожалуйста эту переключалку по F8
Отсутствует
почини пожалуйста эту переключалку по F8
Затруднительно починить то, что не сломано.
Добавил код в custom_script_win.js, топаю по адресу
data:text/html;charset=utf-8,<textarea spellcheck="false">qwerty</textarea>
фосус в конец поля, жму F8, и вижу переключение qwerty <—> йцукен
перегрузил FF с очисткой кэша
Кодом? Увы, это не всегда срабатывает.
Чтобы быть уверенным, следует, при закрытом браузере,
удалить папку startupCache собственноручно.
Отсутствует
Чтобы быть уверенным, следует, при закрытом браузере,
удалить папку startupCache собственноручно.
помогло
раньше как-то до этого не доходило
спасибо
Отсутствует
собственноручно
Кнопку + батник для себя не делали?
По поводу окна кук:
У меня окно кук в 102 растет по вертикали после каждого запуска с удалением, в итоге после нескольких запусков кнопки удаления уезжают под панель задач.
Скрипт вызова здесь или:
(this.viewcookieswithrightclick = { init(that) { var star = this.star = document.querySelector("#star-button-box"); if (!star) return; star.addEventListener("contextmenu", this, true); star.addEventListener("click", this, true); that.unloadlisteners.push("viewcookieswithrightclick"); }, handleEvent(e) { if (e.button != 2) return; e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); if (e.type != "click") return; this.viewCookies(); }, getETDL(uri) { var eTLD = ""; try { eTLD = Services.eTLD.getBaseDomain(uri); } catch (e) { try { eTLD = uri.asciiHost; } catch (e) {} } return eTLD; }, async viewCookies() { var uri = gBrowser.selectedBrowser.currentURI; try { let _uri = ReaderMode.getOriginalUrl(uri.spec); if (_uri) uri = Services.io.newURI(_uri); } catch(e) {} uri = this.getETDL(uri); var type = "Browser:SiteDataSettings", id = "SiteDataSettingsDialog"; var _win = Services.wm.getMostRecentWindow(type); await SiteDataManager.updateSites(); if (!_win) { let url = "chrome://browser/content/preferences/dialogs/siteDataSettings.xhtml", xs = Services.xulStore; let sx = xs.getValue(url, id, "screenX"); let sy = xs.getValue(url, id, "screenY"); let wh = xs.getValue(url, id, "width"); let ht = xs.getValue(url, id, "height"); let sm = xs.getValue(url, id, "sizemode"); let features = `chrome,dialog=no,resizable,${sx && sy ? `screenX=${sx !== "0" ? sx : "1"},screenY=${sy !== "0" ? sy : "1"}` : "centerscreen"}${wh && ht ? `,width=${wh},height=${ht}` : ""}`; _win = openDialog(url, type, features); await new Promise(resolve => { _win.windowRoot.addEventListener("DOMContentLoaded", () => { _win.windowRoot.addEventListener("MozUpdateWindowPos", () => { if (sm === "maximized") _win.maximize(); }, { once: true, capture: true }); resolve(); }, { once: true }); }); } else if ("_gSiteDataSettings" in _win) _win._gSiteDataSettings(); else { Services.scriptloader.loadSubScript("data:," + encodeURIComponent(` var _gSiteDataSettings = gSiteDataSettings._gSiteDataSettings = (function() { SiteDataManager.getSites().then(sites => { this._sites = sites; var sortCol = document.querySelector("treecol[data-isCurrentSortCol=true]"); this._sortSites(this._sites, sortCol); this._buildSitesList(this._sites); }); }).bind(gSiteDataSettings); _gSiteDataSettings(); var updateSetInterval = setInterval(async () => { await SiteDataManager.updateSites(); _gSiteDataSettings(); }, 5000); let removeBtns = document.querySelectorAll("#removeSelected, #removeAll"); var updateClearInterval = () => { clearInterval(updateSetInterval); for (let btn of removeBtns) btn.removeEventListener("command", updateClearInterval); updateClearInterval = null; }; for (let btn of removeBtns) btn.addEventListener("command", updateClearInterval); `), _win, "UTF-8"); _win.addEventListener("unload", () => { _win.updateClearInterval?.(); }, { once: true }); } var doc = _win.document; var docEl = doc.documentElement; docEl.setAttribute("windowtype", type); docEl.id = id; docEl.setAttribute("persist", "screenX screenY width height sizemode"); _win.focus(); var filter = doc.querySelector("#searchBox"); if (!filter) return; filter.value = uri; filter.focus(); filter.dispatchEvent(new _win.Event("input", { bubbles: true })); }, destructor() { this.star.removeEventListener("contextmenu", this, true); this.star.removeEventListener("click", this, true); }, }).init(this);
решилось созданием нового профиля
Сомневаюсь. Просто не запустили нужное кол-во раз.
Отредактировано _zt (09-12-2022 22:02:24)
Отсутствует
У меня окно кук в 102 растет по вертикали после каждого запуска с удалением, в итоге после нескольких запусков кнопки удаления уезжают под панель задач.
Я в 108 бетке "приколотил высоту гвоздями". Вроде пока нормально.
В userChrome.css:
@-moz-document url-prefix("chrome://browser/content/preferences/dialogs/siteDataSettings.x") { #SiteDataSettingsDialog { max-height: 465px !important; } #sitesList { height: 25em !important; } } @-moz-document url-prefix("chrome://browser/content/preferences/dialogs/siteDataRemoveSelected.x") { #SiteDataRemoveSelectedDialog { max-height: 450px !important; } #removalList { height: 25em !important; } }
Отредактировано unter_officer (09-12-2022 23:07:00)
«The Truth Is Out There»
Отсутствует
unter_officer
Спасибо. Добавил, пока не увеличивается, посмотрим.
xrun1
Спасибо. Работает вроде.
динамическая хром-регистрация
Спасибо.
Отредактировано _zt (15-12-2022 03:21:03)
Отсутствует
Кнопку + батник для себя не делали?
Нет, не делал.
У меня окно кук в 102 растет по вертикали после каждого запуска с удалением
Да, есть такое.
Можно скопировать xhtml'ку в UCF, дописать persist'а и windowtype,
и загружать уже этот адрес. Ну и почистить код, соответственно.
Или динамическая хром-регистрация, viewCookies() типа
async viewCookies() { var sds = "chrome://ucfsdswnd/content/sds.xhtml"; var type = "Browser:SiteDataSettings", g = Cu.getGlobalForObject(Cu); if (!Object.hasOwn(g, sds)) { var xhtml = (await (await fetch("chrome://browser/content/preferences/dialogs/siteDataSettings.xhtml")).text()) .replace(/(persist=".+)"/, `$1 screenX screenY sizemode" windowtype="${type}"`); g[sds] = Cc["@mozilla.org/addons/addon-manager-startup;1"] .getService(Ci.amIAddonManagerStartup).registerChrome( Services.io.newFileURI(Services.dirsvc.get("ProfD", Ci.nsIFile)), [["override", sds, "data:application/xhtml+xml," + encodeURIComponent(xhtml)]] ); } (this.viewCookies = async () => { var uri = gBrowser.selectedBrowser.currentURI; try { let _uri = ReaderMode.getOriginalUrl(uri.spec); if (_uri) uri = Services.io.newURI(_uri); } catch(e) {} uri = this.getETDL(uri); var _win = Services.wm.getMostRecentWindow(type); await SiteDataManager.updateSites(); if (!_win) await new Promise(resolve => (_win = openDialog(sds, type, "chrome,dialog=no,resizable")) .addEventListener("DOMContentLoaded", resolve, {once: true}) ); else if ("_gSiteDataSettings" in _win) _win._gSiteDataSettings(); else { Services.scriptloader.loadSubScript("data:," + encodeURIComponent(` var _gSiteDataSettings = gSiteDataSettings._gSiteDataSettings = (function() { SiteDataManager.getSites().then(sites => { this._sites = sites; var sortCol = document.querySelector("treecol[data-isCurrentSortCol=true]"); this._sortSites(this._sites, sortCol); this._buildSitesList(this._sites); }); }).bind(gSiteDataSettings); _gSiteDataSettings(); var updateSetInterval = setInterval(async () => { await SiteDataManager.updateSites(); _gSiteDataSettings(); }, 5000); let removeBtns = document.querySelectorAll("#removeSelected, #removeAll"); var updateClearInterval = () => { clearInterval(updateSetInterval); for (let btn of removeBtns) btn.removeEventListener("command", updateClearInterval); updateClearInterval = null; }; for (let btn of removeBtns) btn.addEventListener("command", updateClearInterval); `), _win); _win.addEventListener("unload", () => { _win.updateClearInterval?.(); }, { once: true }); } _win.focus(); var filter = _win.document.getElementById("searchBox"); if (!filter) return; filter.value = uri; filter.focus(); filter.dispatchEvent(new _win.Event("input", { bubbles: true })); })(); },
Отсутствует
Dumby а что надо исправить в этой кнопке Переключить куки что бы окно не росло по вертикали в 107.0.1?
//Переключить Куки try {(() => { var id = "ucf-cookie-toggle", label = "Переключить Куки", tooltiptext = "ЛКМ: Переключить Куки\nСКМ: Удалить куки домена текущей страницы\nПКМ: Управление куками", gpref = "network.cookie.cookieBehavior", img = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='32'><path style='fill:none;stroke:context-fill;stroke-opacity:context-fill-opacity;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round;' d='M12.5 10.5v-1h-1v1h1m-4-4h1v1h-1v-1m0 7h1v-1h-1v1m-6-7h1v1h-1v-1m4 4v-1h-1v1h1m-3 3v-1h-1m3-9h1v1h-1v-1M8 .6C8 5 11 8 15.4 8c0 4-3.4 7.4-7.4 7.4S.6 12 .6 8 4 .6 8 .6M12.5 26.5v-1h-1v1h1m-4-4h1v1h-1v-1m0 7h1v-1h-1v1m-6-7h1v1h-1v-1m4 4v-1h-1v1h1m-3 3v-1h-1m3-9h1v1m2-3.5v.5h1V17m2 2.5v1h1v-1h-1m3.5 3h-.5v1h.5m-8.5-3h-1v-1M8 16.6c4 0 7.4 3.4 7.4 7.4S12 31.4 8 31.4.6 28 .6 24 4 16.6 8 16.6'/></svg>"; var tbarbtns = { initialised: false, get network_cookie_cookieBehavior() { delete this.network_cookie_cookieBehavior; try { return this.network_cookie_cookieBehavior = Services.prefs.getIntPref(gpref); } catch(e) { } return this.network_cookie_cookieBehavior = null; }, init() { if (this.initialised) return; this.initialised = true; Services.prefs.addObserver(gpref, this); }, prefToggleNumber(pref, next) { Services.prefs.setIntPref(pref, next[Services.prefs.getIntPref(pref)]); }, getETDL(uri) { var eTLD = ""; try { eTLD = Services.eTLD.getBaseDomain(uri); } catch (e) { try { eTLD = uri.asciiHost; } catch (e) {} } return eTLD; }, async viewCookies(win) { var uri = win.gBrowser.selectedBrowser.currentURI; try { let _uri = win.ReaderMode.getOriginalUrl(uri.spec); if (_uri) uri = Services.io.newURI(_uri); } catch(e) {} uri = this.getETDL(uri); var type = "Browser:SiteDataSettings", id = "SiteDataSettingsDialog"; var _win = Services.wm.getMostRecentWindow(type); if (!_win) { await win.SiteDataManager.updateSites(); let url = "chrome://browser/content/preferences/dialogs/siteDataSettings.xhtml", xs = Services.xulStore; let sx = xs.getValue(url, id, "screenX"); let sy = xs.getValue(url, id, "screenY"); let wh = xs.getValue(url, id, "width"); let ht = xs.getValue(url, id, "height"); let sm = xs.getValue(url, id, "sizemode"); let features = `chrome,dialog=no,resizable,${sx && sy ? `screenX=${sx !== "0" ? sx : "1"},screenY=${sy !== "0" ? sy : "1"}` : "centerscreen"}${wh && ht ? `,width=${wh},height=${ht}` : ""}`; _win = win.openDialog(url, type, features); await new Promise(resolve => { _win.windowRoot.addEventListener("DOMContentLoaded", () => { _win.windowRoot.addEventListener("MozUpdateWindowPos", () => { if (sm === "maximized") _win.maximize(); }, { once: true, capture: true }); resolve(); }, { once: true }); }); } var doc = _win.document; var docEl = doc.documentElement; docEl.setAttribute("windowtype", type); docEl.id = id; docEl.setAttribute("persist", "screenX screenY width height sizemode"); _win.focus(); var filter = doc.querySelector("#searchBox"); if (!filter) return; filter.value = uri; filter.focus(); filter.dispatchEvent(new _win.Event("input", { bubbles: true })); }, callWithEachWindow(buttonID, atr) { var getW = CustomizableUI.getWidget(buttonID); if (getW.instances.length) for (let {node} of getW.instances) { if (!node) continue; for (let a in atr) node.setAttribute(a, atr[a]); } else for (let win of CustomizableUI.windows) { let node = getW.forWindow(win).node; if (!node) continue; for (let a in atr) node.setAttribute(a, atr[a]); } }, observe(subject, topic, pref) { if (pref == gpref) { delete this.network_cookie_cookieBehavior; let network_cookie_cookieBehavior = this.network_cookie_cookieBehavior = Services.prefs.getIntPref(pref); this.callWithEachWindow(id, {badge: network_cookie_cookieBehavior, badgeStyle: `background: ${network_cookie_cookieBehavior !== 2 ? "#0074e8" : "#e31b5d"}; color: #ffffff; font-size: 10px; line-height: 10px; box-shadow: none; text-shadow: none; padding-block: 0 1px !important; padding-inline: 2px !important; min-width: 0 !important;`}); } }, uninit() { if (!this.initialised) return; Services.prefs.removeObserver(gpref, this); this.initialised = false; }, }; CustomizableUI.createWidget({ id: id, type: "custom", label: label, tooltiptext: tooltiptext, localized: false, defaultArea: CustomizableUI.AREA_NAVBAR, onBuild(document) { var win = document.defaultView, trbn = document.createXULElement("toolbarbutton"); trbn.id = id; trbn.className = "toolbarbutton-1 chromeclass-toolbar-additional badged-button"; trbn.setAttribute("badged", "true"); trbn.setAttribute("constrain-size", "true"); trbn.setAttribute("label", label); trbn.setAttribute("context", "false"); trbn.setAttribute("tooltiptext", tooltiptext); var cookieBehavior = tbarbtns.network_cookie_cookieBehavior; if (cookieBehavior !== null) { trbn.setAttribute("badge", cookieBehavior); trbn.setAttribute("badgeStyle", `background: ${cookieBehavior !== 2 ? "#0074e8" : "#e31b5d"}; color: #ffffff; font-size: 10px; line-height: 10px; box-shadow: none; text-shadow: none; padding-block: 0 1px !important; padding-inline: 2px !important; min-width: 0 !important;`); trbn.addEventListener("click", e => { if (e.button == 0) tbarbtns.prefToggleNumber(gpref, [1,2,3,4,5,0]); else if (e.button == 1) { if (!win.gIdentityHandler?._uriHasHost || win.gIdentityHandler._pageExtensionPolicy) return; let baseDomain = win.SiteDataManager.getBaseDomainFromHost(win.gIdentityHandler._uri.host); win.SiteDataManager.hasSiteData(baseDomain).then(hasData => { if (hasData && win.SiteDataManager.promptSiteDataRemoval(win, [baseDomain])) win.SiteDataManager.remove(baseDomain); }); } else if (e.button == 2) { e.preventDefault(); e.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}[badge="0"] { -moz-image-region: rect(16px, 16px, 32px, 0px) !important; } #${id}[badge="2"] { fill: color-mix(in srgb, currentColor 20%, #e31b5d) !important; } `); try { win.windowUtils.loadSheetUsingURIString(btnstyle, win.windowUtils.USER_SHEET); } catch (e) {} tbarbtns.init(); return trbn; }, onDestroyed(doc) { tbarbtns.uninit(); }, }); })();} catch(e) {}
_zt Вы правы
Отсутствует
а что надо исправить в этой кнопке Переключить куки что бы окно не росло по вертикали в 107.0.1?
Ну тоже что-то сделать с методом viewCookies().
Например, заменить на такой
// async viewCookies(win) { var func = async sds => { await document.documentReadyForIdle; var upd, box = document.getElementById("searchBox"); (upd = site => box.setUserInput(site, box.focus()))(window.arguments[0]); var attr = "data-isCurrentSortCol", sel = `treecol[${attr}=true]`; window.updSearch = async site => { var sites = sds._sites = await SiteDataManager.getSites(); var col = document.querySelector(sel); col.removeAttribute(attr); sds._sortSites(sites, col); sds._buildSitesList(sites); window.focus(upd(site)); } } var type = "Browser:SDS"; var xhtml = (await (await win.fetch("chrome://browser/content/preferences/dialogs/siteDataSettings.xhtml")).text()) .replace(/(persist=".+)"/, `$1 screenX screenY sizemode" windowtype="${type}"`) .replace(/<script .+>/, `$&\n <script>(${func})(gSiteDataSettings);\n </script>\n${ ["globalOverlay", "editMenuOverlay"] .map(n => ` <script src="chrome://global/content/${n}.js"/>`).join("\n") }`); var sds = "chrome://ucfsdswnd/content/sds.xhtml"; this.cr = Cc["@mozilla.org/addons/addon-manager-startup;1"] .getService(Ci.amIAddonManagerStartup).registerChrome( Services.io.newFileURI(Services.dirsvc.get("ProfD", Ci.nsIFile)), [["override", sds, "data:application/xhtml+xml," + encodeURIComponent(xhtml)]] ); (this.viewCookies = async win => { var uri = win.gBrowser.selectedBrowser.currentURI; try { var u = win.ReaderMode.getOriginalUrl(uri.spec); if (u) uri = Services.io.newURI(u); } catch {} uri = this.getETDL(uri); await win.SiteDataManager.updateSites(); var w = Services.wm.getMostRecentWindow(type); w ? w.updSearch(uri) : win.openDialog(sds, type, "chrome,dialog=no,resizable", uri); })(win); },
Отсутствует
Ну тоже что-то сделать с методом viewCookies().
Например, заменить на такой
Спасибо Огромное!!!
Отсутствует
Отсутствует
xhtml на xul заменил, результат отрицательный
Этого недостаточно. Надо ещё от этого оператора избавиться,
его поддержка добавлена в Firefox только с версии 74 (в Mypal68, видимо, она есть).
Правки можно по-разному записать. Допустим, такой вариант
/* var listener = e => { var doc = e.target || ({}); load_scripts_by_url[doc.documentURI]?.(doc.defaultView); }; */ var listener = e => load_scripts_by_url.x(e.target.ownerGlobal);
/* if (win.arguments?.find(f => f === "Downloads" || f === "History" || f === "Tags")) return; */ if (/^(?:Downloads|History|Tags)(?:,|$)/.test(String(win.arguments))) return;
/* }; load_scripts_by_url[location.href]?.(window); */ x(win) { var func = this[win.location.href]; func && func(win); } }; load_scripts_by_url.x(window);
Отсутствует
Надо ещё от этого оператора избавиться
Да, именно на "?." консоль ругалась, а как правильно сделать, естественно, не знал, поэтому и обратился к профессионалу. Тупое удаление оператора вопрос не решало, писать про это не стал, чтобы еще глупее не выглядеть.
Допустим, такой вариант
Отличный вариант, спасибо.
Отсутствует
https://hg.mozilla.org/mozilla-central/rev/49cefc94b9bd
https://github.com/xiaoxiaoflood/firefox-scripts/commit/33c69b5b959b84d3982eb6f72aefd1cca14e3ad3#diff-c8669a0b709ab73f8751d7e079d6c3b98ac1c464b5a9e1592f28e91ab7a63de7
Отсутствует
Я дико извиняюсь, на чистоустановленного лиса, залил архив из первого сообщения этой темы https://forum.mozilla-russia.org/viewto … 26#p791126, все по полочкам, пытаюсь прикрутить к нему скрипт про ненужные папки https://forum.mozilla-russia.org/viewto … 25#p777225 , а у меня, к сожалению, ничего не выходит.... Если кому не сложно скиньте свой файл заведомо рабочий, для такого криворукого идиота я
З.Ы : лис 108
Отредактировано mfrost (24-12-2022 00:06:47)
Отсутствует
Не пойму может я идиот, но у меня все равно не работает
// Скрипт для документа окна браузера [ChromeOnly] var ucf_custom_script_win = { initialized: false, get unloadlisteners() { delete this.unloadlisteners; window.addEventListener("unload", this, { once: true }); return this.unloadlisteners = []; }, load() { if (this.initialized) return; this.initialized = true; /* ************************************************ */ // Здесь может быть ваш код который сработает по событию "load" ((type, listener) => { addEventListener(type, listener); addEventListener("unload", () => removeEventListener(type, listener), {once: true}); })("MozBeforeInitialXULLayout", { handleEvent(e) { e.target.documentURI.endsWith(this.ends) && Object.defineProperty(e.target.getElementById("bookmarks-view"), "place", this); }, get ends() { delete this.ends; return this.ends = `/bookmarksSidebar.x${ parseInt(Services.appinfo.platformVersion) >= 73 ? "htm" : "u" }l`; }, configurable: true, set() { delete this.place; this.place = "place:parent=menu________"; } }); /* ************************************************ */ }, handleEvent(e) { this[e.type](e); }, unload() { this.unloadlisteners.forEach(str => { try { this[str].destructor(); } catch (e) {} }); }, }; /* ************************************************ */ // Здесь может быть ваш код который сработает по событию "DOMContentLoaded"
Отредактировано mfrost (24-12-2022 01:15:33)
Отсутствует
Может я что в настройках не включил?
Кстати, вполне возможно. Типа эту галку
Включить скрипты:
[ ] В фоне [System Principal]
[✔] Для докум. окна браузера [ChromeOnly] ◄◄◄◄◄◄◄
[ ] Для докум. всех окон [ChromeOnly]
Отредактировано Dumby (24-12-2022 01:39:12)
Отсутствует
Dumby, посмотрите, пожалуйста, можно ли "оживить" этот древний скрипт, а еще лучше адаптировать dav_LinkifiesLocationBar.uc.js для 68esr. Для первого "зачистка" по вашей рекомендации у меня не помогает, для второго замены в стр.14 chrome://browser/content/browser.xhtml на xul явно недостаточно.
Отсутствует
а еще лучше адаптировать dav_LinkifiesLocationBar.uc.js для 68esr
Ууу, копаться в этом радости мало.
замены в стр.14 chrome://browser/content/browser.xhtml на xul явно недостаточно
Если код в custom_script_win.js, то «стр.14» не нужна как таковая, убери её.
Чтобы как-то завелось, можно попробовать заменить пару строк
/* var urlBarInput = getWindow().document.querySelector("#urlbar-input").value; */ var urlBarInput = gURLBar.value; /* var urlbarInput = getWindow().document.querySelector("#urlbar-input"); */ var urlbarInput = gURLBar.inputField;
Отсутствует
Ууу, копаться в этом радости мало
Извиняюсь за отнятое время.
Чтобы как-то завелось, можно попробовать заменить пару строк
Завелось и работает, благодарю!
Отсутствует
mfrost пишетМожет я что в настройках не включил?
Кстати, вполне возможно. Типа эту галку
Включить скрипты:
[ ] В фоне [System Principal]
[✔] Для докум. окна браузера [ChromeOnly] ◄◄◄◄◄◄◄
[ ] Для докум. всех окон [ChromeOnly]
Товарищи, подскажите где это включить в настройках не нашел
Отсутствует