Alex_one
как добавить в кнопку BBCode пункт Нумерованный список?
У меня так работает
NumList|Нумерованный список|list|1||data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA/UlEQVQ4Ea3RMWsCMRjG8Xh2KQdqp6NuOru7CAoiSJ0KhW7iKrj7IXQQN7+C4CcoHRwcRNwcxaGTi5NoRUH957ik4ZDenSjPL2+Se3NEFeLvYzOt4K68c2qCESIl7nXvqSdkMMR/KfPwiC2EJQf8YIkw6dP0ATeWO0YbYrTrc3rCpvwKO2qkPBnd38wlSviYNwh/yuh86AuyvLiIZ/jzykYdZhwWDfUb5Fl0MUcbbzDjsBggB/kvpKljrOGmxViAhQ1i8KfKxi/Onik1CR15mx4riXIz8mYHnsyQgk6C2ReaCEpJCPECN+qqHVY1LHDBJ0JFvcCh24bKSk2C6hUBwSHi/YrJMAAAAABJRU5ErkJggg==
Отсутствует
Возможно ли получить куки ответа сервера? В заголовках ответа есть set-cookie, но там не полное содержание кук, нет httpOnline.
Чтобы сделать запрос, использую var XMLHttpRequest = Components.Constructor("@mozilla.org/xmlextras/xmlhttprequest;1");
Отредактировано Азат55555 (03-07-2021 19:47:21)
Отсутствует
harryk
У меня так работает
Уже, что-то прорисовывается, спасибо.
Но всё равно цифры не хочет ставить. У меня сейчас так:
Dumby, Наведите на путь истинный, пжа.
Отсутствует
Можно сделать код для экспорта закладок в формате HTML в назначенную папку без запроса?
ChromeUtils.import("resource://gre/modules/BookmarkHTMLUtils.jsm") .BookmarkHTMLUtils.exportToFile("D:\\test\\sub\\bexp.html");
Наведите на путь истинный
Ага, речь про кнопку — самой кнопки нет,
написано «Чтобы вышло примерно так» — не написано вышло из чего.
Вот такой bb-код, чтобы вышло
Отсутствует
Dumby
Вот такой bb-код, чтобы вышло
А в этот код https://forum.mozilla-russia.org/viewtopic.php?pid=788982#p788982 его можно вставить? У меня не выходит, вот так вставлено
3.0.17.NumList|Нумерованный список[list=1] [*]ТЕКСТ [*]ТЕКСТ [*]ТЕКСТ [/list]|data:image...
Отсутствует
А в этот код https://forum.mozilla-russia.org/viewtopic.php?pid=788982#p788982 его можно вставить?
Нет, нельзя. Это ведь уже результат, а не описательная строка для результата.
Кстати, в первом посте того топика, у _zt в кнопке есть что-то подобное.
В смысле, если имеется в виду сплит по строкам, тогда, выделяем текст,
жмём на горизонтальной панели кнопку «List», затем, на выпавшей вертикальной,
жмём кнопку «ItemTag» и кнопку «NumList».
Отсутствует
Можно ли поправить Автоматически добавлять выделенный текст в SearchBar http://forum.mozilla-russia.org/viewtop … 56#p708256 , для работы на 84.0.2 и выше.
Отсутствует
Dumby подскажи есть код
// Редактировать размеры поля выбора вкладок в окне добавления закладки звёздочки. ............. ((css, panel) => ({ init() { panel = document.getElementById("editBookmarkPanel"); if (panel) { addEventListener("popupshowing", this, false, panel); this.destroy && this.destroy(); return; } else if (this.destroy) return; var mo = new MutationObserver(this.init.bind(this)); mo.observe(document.getElementById("mainPopupSet"), {childList: true}); addDestructor(this.destroy = reason => { mo.disconnect(); if (reason) return; self._destructors.splice(self._destructors.findIndex( d => d.destructor == this.destroy ), 1); delete this.destroy; }); }, pref: "CB.editBMPanel_folderTreeRow_WidthHeight", handleEvent(e) { css = encodeURIComponent(css.replace(/;/g, " !important;")); var args = ["data:text/css," + css, windowUtils.USER_SHEET]; windowUtils.loadSheetUsingURIString(...args); var row = this.row = document.getElementById("editBMPanel_folderTreeRow"); addEventListener("popuphidden", this, false, panel); addDestructor(reason => { windowUtils.removeSheetUsingURIString(...args); row.removeAttribute("width"); row.removeAttribute("height"); reason == "delete" && Services.prefs.clearUserPref(this.pref); }); this.handleEvent = e => e.target == panel && this[e.type](); this.popupshowing(); }, popupshowing() { var [width, height] = Services.prefs.getStringPref(this.pref, "332 184").split(" "); this.row.width = width; this.row.height = height; gEditItemOverlay.toggleFolderTreeVisibility(); gEditItemOverlay._paneInfo.visibleRows.add("keywordRow"); gEditItemOverlay._element("keywordRow").collapsed = false; gEditItemOverlay._initKeywordField().catch(Cu.reportError); }, popuphidden() { var {width, height} = this.row; Services.prefs.setStringPref(this.pref, width + " " + Math.max(184, height)); } }).init())(` #editBookmarkPanel #editBMPanel_folderTreeRow { resize: both; overflow: hidden; min-width: 332px; } #editBookmarkPanel box.panel-header { padding: 0; border: none; } #editBookmarkPanel #editBookmarkPanelRows { padding-top: 0; } #editBookmarkPanel #editBMPanel_locationRow { visibility: visible; } #editBookmarkPanel #editBMPanel_tagsRow > hbox, #editBookmarkPanel #editBMPanel_folderRow > hbox, #editBookmarkPanel #editBookmarkPanelRows > vbox:not([id*="folderTree"]):not([id*="tagsSelector"]) { display: flex; align-items: center; } #editBookmarkPanel #editBMPanel_tagsField, #editBookmarkPanel #editBMPanel_folderMenuList, #editBookmarkPanel #editBookmarkPanelRows > vbox > label:first-child + * { flex-grow: 1; } #editBookmarkPanel moz-input-box { width: 100%; } `);
gCBNotepad = this; // global obj ({ title: "Блокнот", url: "data:text/html;base64," + window.btoa(unescape(encodeURIComponent( this.Help ))), icon: "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAgAAAAApKSlRRkZGh0BAQHxBQUF+QUFBfkFBQX5BQUF+QEBAfEZGRogaGho1AAAAAAABAAECAgICAgICAgQEBAUAAAAAMTEwWeLi4f//////+vr6//r6+v/6+vr//Pz8//v7+//5+fn++/v7/7CwsPdNTU2hAQEBAgAAAAAAAAAAAwMDBAAAAABvbm+x8vHy/+Df4Pfi4+P76ubr++Lh4vvk5OT7/f39+/////v////77/Dv/aysrP8BEAElKngnxDCDLdEvgSzOLX8qy0GTPu1Zq1b/WatW/lasU/9op2f/xcPF/8PEw//i5+L/8vfx//H27//p6+n/qqqq/ESaQOS67a7/teip/rbpqv+36qv/suSm/6zfoP+s36D/teOo/4bNfP93s3b/39bf/9XY1f/5/Pj/+Pv2/+vs6/+qqar/T6RK8bvjsP6t2qT8sNym/LDcpvyx3af+st6o/7LeqP+w3ab/vuaz/1mqVP+2w7b/3dvd//D07//4+/f/6+zr/6qqqv8BNwFvndiU/8Djt/y34a//ueGw/7nhsP+54bD/ueGw/7jgr//B5Lj/mtSS/3q1ev/WzNb/4ufh//f79f/p6+n/qqqq/wAAAANHk0Pbzu/F/73gtP3A47f/wOO3/8Djt//A47f/wOO4/73itf/D5rn/Y7Je/7/MwP/k4eP/+f35/+vs6/+qqqr/AAAAAAAzAGap4KP/zebG+8Tkvv/G5b//xuS//8blv//F5b7/vuK2/8LkuP+U0Yv/ZaBl/97W3v/u9e3/6+3r/6qqqv8DAQMAAAAABE6XS+Db8dT/yuPD/czmxv/N5sf/zObG/8blv//A47j/t+Cu/7vjsP9nuWP/uMW5/+zr6//s7+z/qamq/wACAAQAAAAAATQBZrTir//a6dX70ufN/9Pozv/N5sf/xuS//8Djt/+44K//u+Ow/4zNgv9uqW7/6+Tr/+ru6v+qqar/AAAAAQMBAwAAAAAHVJhS2Or25v/W59L91OjP/8zmxv/G5b//wOO3/7rhsP+w3ab/tuSp/1isU/+vva//6+rq/6qqqv8AAAAAAQIBAwAAAAAENQRkv+S7/+Pr3vvR58z/zObG/8bkv/+/4rf/ueCw/7Hep/+z4Kf/h818/3Kucv/r4uv/qKqo/gAAAAAAAAABAwEDAAAAAApVl1TU7Pbo/9HlzP3P58j/xuS//8Ljuf+64bH/s9+p/6vcoP+t4KD/Wq5U/8bSx/23tLf9AAAAAAAAAAABAgEDAAAAAAk3CWaq36b/1unR+cLjvPzF5r78t+Cv/LXgrP2w36b8odmW/Kzgn/1yxGf7gLKA/52Sne0AAAAAAAAAAAAAAAECAQIAAAEADUOCQcdwt23/Zati82GrXvVjrWD4XKlY9FqpVvZaqlX3UqZN81OnTvxYbFndGxcbNAAAAAAAAAAAAAAAAAABAQEAAAAAFBAUHTAzMGcqKipRJSclUS8wL14nJyZNKCspVy4uLlsiJCJKNjU2aQQABAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", init() { var trg = document.getElementById("browser"); trg && addEventListener("DOMContentLoaded", this, false, trg); var id = "viewCBNotepadLoader"; var menuitem = this.element("menuitem", { type: "checkbox", label: this.title, id: "menu_browserCBNotepadLoader", oncommand: `SidebarUI.toggle("${id}");` }, document.getElementById("viewSidebarMenu")); var btn = this.element("toolbarbutton", { type: "checkbox", label: this.title, id: "sidebar-switcher-CBNotepadLoader", oncommand: `SidebarUI.show("${id}");`, class: "subviewbutton subviewbutton-iconic" }); document.querySelector( 'toolbarbutton[id^="sidebar-switcher-"] + toolbarseparator' ).before(btn); SidebarUI.sidebars.set(id, { url: this.url, buttonId: btn.id, title: this.title, menuId: menuitem.id }); SidebarUI.isOpen && SidebarUI.currentID == id && SidebarUI.selectMenuItem(id); var popupset = this.popupset = this.element("popupset", { id: `CB${_id.slice(20)}-browserConsole-popupset` }, document.documentElement); var css = `\ #${btn.id} > .toolbarbutton-icon, #sidebar-box[sidebarcommand="${id}"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon { width: 16px; height: 16px; opacity: 0.8; fill: currentColor; -moz-context-properties: fill; list-style-image: url(${this.icon}); }`; var str = (cbu.cb || "") + "data:text/css," + encodeURIComponent(css), type = windowUtils.USER_SHEET; windowUtils.loadSheetUsingURIString(str, type); addDestructor(() => { SidebarUI.sidebars.delete(id); btn.remove(); menuitem.remove(); popupset.remove(); windowUtils.removeSheetUsingURIString(str, type); }); parseInt(Services.appinfo.platformVersion) < 73 && "insertFTLIfNeeded" in MozXULElement && MozXULElement.insertFTLIfNeeded("toolkit/main-window/editmenu.ftl"); var leftClick = () => { var msg = _id + ":NotepadPageShowAndPaste"; var url = "data:," + encodeURIComponent(`addEventListener("pageshow", () => { content.document.getElementById("req_message").focus(); docShell.doCommand("cmd_paste"); sendAsyncMessage("${msg}"); }, {once: true})`); var busy = 0, clip, listener = () => { if (clip) clip = gClipboard.write(clip); busy = 0; } messageManager.addMessageListener(msg, listener); addDestructor(() => messageManager.removeMessageListener(msg, listener)); var openTab = () => gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTrustedTab(this.url) ).messageManager.loadFrameScript(url, false); (leftClick = () => { if (busy && Date.now() - busy < 4e3) return; busy = Date.now(); // запомнить текст из буфера обмена и скопировать текст на странице .... clip = gClipboard.read(); goDoCommand("cmd_copy"); // открыть блокнот в новой вкладке setTimeout(openTab, 50); })(); } self.onclick = e => { if (e.button == 0) { if (gMultiProcessBrowser){ leftClick(); } else { // запомнить текст из буфера обмена и скопировать текст на странице .... var clip = gClipboard.read(); goDoCommand("cmd_copy"); // открыть блокнот в новой вкладке gBrowser.selectedTab = gBrowser.addTrustedTab(this.url); gBrowser.addEventListener("pageshow", function(event) { this.removeEventListener("pageshow", arguments.callee, true); content.document.getElementById("req_message").value = gClipboard.read(); if (clip) gClipboard.write(clip); }, true); } ; } if (e.button == 1) return SidebarUI.toggle(id); } // Обработчик следит за изменениями табов и меняет название и иконку нужного таба ...................................................... gBrowser.tabContainer.addEventListener("TabAttrModified", function(event) { // очистить адресную строку если это блокнот .... if ( gBrowser.currentURI.spec == this.url) gURLBar.value = "Notepad"; }, true); if (!btn.hasAttribute("checked")) return; var doc = SidebarUI.browser.contentDocument; if (doc.documentURI != this.url) btn.doCommand(); else if (doc.readyState == "complete") this.defineDocPopupset(doc); }, defineDocPopupset(doc) { this.definePopupset( doc.querySelector("popupset") || doc.documentElement.appendChild(doc.createXULElement("popupset")) ); }, get definePopupset() { var append = customElements.get("menuitem") ? popup => { this.popupset.appendChild(popup); popup.setAttribute("oncommand", "event.target.cmd()"); for(var node of [...popup.querySelectorAll("menuitem")]) { var menuitem = document.importNode(node, true); menuitem.cmd = Services.els.getListenerInfoFor(node) .find(inf => inf.type == "command").listenerObject; popup.replaceChild(menuitem, node); } return popup; } : this.popupset.appendChild.bind(this.popupset); delete this.definePopupset; return this.definePopupset = popupset => popupset.appendChild = append; }, lss: Services.scriptloader.loadSubScript, async handleEvent({target: doc}) { if (!doc || doc.documentURI != this.url) return; var win = doc.defaultView; if ( win.docShell.name == "toolbox-panel-iframe-webconsole" || doc.DOMContentLoadedEventHandled ) return; doc.DOMContentLoadedEventHandled = true; "custombuttonsConsole" in win || this.lss( "chrome://custombuttons/content/consoleOverlay.js", win ); var cw = win.isChromeWindow, bc; if (!cw) { if (doc.visibilityState == "hidden") { var {focus} = win; win.focus = () => win.focus = focus; } doc.title = this.title; var link = doc.createElement("link"); link.setAttribute("rel", "shortcut icon"); link.setAttribute("href", this.icon); doc.head.prepend(link); var br = win.docShell.chromeEventHandler; var cmAttr = br.getAttribute("contextmenu"); cmAttr && br.removeAttribute("contextmenu"); win.onbeforeunload = () => { if (bc) bc.chromeWindow = {close() {}}; cmAttr && br.setAttribute("contextmenu", cmAttr); } } bc = await this.console(win); }, get console() { // Bug 1579090 - WebConsole should handle ObjectFront when needed (for non-primitive Console API args + Evaluation results) (Firefox 73+) // https://bugzilla.mozilla.org/show_bug.cgi?id=1579090 var vers = parseInt(Services.appinfo.platformVersion); this.bug1579090 = vers > 73 || (vers == 73 && !( "_setCurrentURI" in gBrowser.selectedBrowser // https://bugzil.la/1431214 )); delete this.console; return this.console = this.bug1579090 ? async win => { await this.loader.bcm._browserConsoleInitializing; var key = "CBBrowserConsolePromise", {wins} = this.loader; win[key] = win.Object.create(null); win[key].promise = new win.Promise(resolve => win[key].resolve = resolve); win[key].destroy = () => { win[key].resolve(); delete win[key]; wins.splice(wins.indexOf(win), 1); } wins.unshift(win); wins.length > 1 && await wins[1][key].promise; var bc = await new this.loader.console(win).toggleBrowserConsole(); win[key].destroy(); return bc; } : async win => { this.loader.Services.ww.wins.push(win); return await new this.loader.HUDService().toggleBrowserConsole(); } }, get loader() { delete this.loader; var url = "resource://devtools/shared/Loader.jsm"; if (this.bug1579090) { var g = Cu.import(url, {}), key = "CBBrowserConsoleLoader"; addDestructor(reason => reason[5] == e && key in g && g[key].destroy()); if (key in g) return this.loader = g[key]; var {BrowserConsoleManager} = g.require( "devtools/client/webconsole/browser-console-manager" ); return this.loader = g[key] = { wins: [], bcm: BrowserConsoleManager, console: class extends BrowserConsoleManager.constructor { constructor(win) { super(); this.win = win; } openWindow() { var {win} = this; win.addEventListener("unload", () => { win.CBBrowserConsolePromise && win.CBBrowserConsolePromise.destroy(); this.closeBrowserConsole.call(this); }, {once: true}); delete this.win; return win; } }, destroy() { this.wins = null; delete g[key]; } }; } var id = _id + "-browser-console"; url += "?" + id; var loader = {exports: {}}, nsvo = Cu.import(url, loader); addDestructor(reason => reason[5] == "e" && Cu.unload(url)); if (id in nsvo) return this.loader = nsvo[id]; var dir = "resource://devtools/client/webconsole/"; try { this.lss(dir + "hudservice.js", loader); } catch(ex) { // Bug 1570320 - Rename hudservice.js into browser-console-manager.js (Firefox 70+) // https://bugzilla.mozilla.org/show_bug.cgi?id=1570320 this.lss(dir + "browser-console-manager.js", loader); this.lss("data:,this.HUDService=BrowserConsoleManager", loader); } var e = new CustomEvent("DOMContentLoaded", {bubbles: false}), ww = loader.Services.ww; loader.Services.ww = Cu.getGlobalForObject(nsvo).Object.create(ww, { wins: {value: []}, openWindow: {value: function() { var win = this.wins.shift(); win.setTimeout(() => win.dispatchEvent(e), 0); return win; }} }); return this.loader = nsvo[id] = loader; }, element(name, attrs, parent) { var node = document.createXULElement(name); for(var attr in attrs) node.setAttribute(attr, attrs[attr]); parent && parent.append(node); return node; } }).init(); //Всплывающие подсказки this.tooltipText = "\n\ ЛКМ: открыть в новой вкладке с текстом( выделенным или из буфера )\n\n\ СКМ: открыть в боковой панели\n\n\ ПКМ: меню кнопки\n\n";
Отредактировано Andrey_Krropotkin (05-07-2021 23:44:54)
Отсутствует
Можно ли поправить Автоматически добавлять выделенный текст в SearchBar http://forum.mozilla-russia.org/viewtop … 56#p708256 , для работы на 84.0.2 и выше.
Под «поправить», наверно, приблизительно подошло бы
через буфер обмена перегонять, но что-то мне не очень.
Попробовал JSM'ку для ucf сочинить, и, даже не знаю,
ну посмотри, вдруг подойдёт.
Создать в папке custom_scripts текстовый файл SelectionToSearchbar.jsm
var EXPORTED_SYMBOLS = ["SelectionToSearchbarChild", "SelectionToSearchbarParent"]; if (!ChromeUtils.domProcessChild.childID) { if (typeof Services != "object") var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm"); var {prefs, obs} = Services; var pref = "ucf.selection-to-searchbar.enabled"; var enabled = prefs.getBoolPref.bind(null, pref, true); var SelectionToSearchbarParent = class extends JSWindowActorParent { msg(msg, win = this.browsingContext.topChromeWindow) { var sb = win.document.getElementById("searchbar"); if (sb) sb.value = msg.data; } receiveMessage(msg) { var win = this.browsingContext.topChromeWindow; win.toolbar.visible ? (this.receiveMessage = this.msg).call(this, msg, win) : this.sendAsyncMessage("", false); } } var name = "SelectionToSearchbar"; var id = "ucf-selection-to-searchbar"; var check = (btn, state) => btn.toggleAttribute("checked", state); var cui = ChromeUtils.import("resource:///modules/CustomizableUI.jsm").CustomizableUI; cui.createWidget({ id, label: "Автоматически добавлять выделенный текст в SearchBar", tooltiptext: " Автоматически добавлять выделенный текст в SearchBar", image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAVCAYAAACt4nWrAAADQklEQVQ4ja3V/08adxzHcf+t/bT90HTLtmT7F5Ym/XUsy4Uu7mdKYiawudaq04DWjVoFxWgRrU5txDL5clKkIDVBVpE77j5wgPW45LkfTMgOf1gb98Pjt/fr+fntbkAIgdfrxel04nA4bszpdOL1ehFCMHDf7cbn81GtVrEs68aq1So+n4/7bjcDkiRRq9UwTZNms3ljpmlSq9WQJIkBh8OBZVnXjlRVJZFIMB9eZPr3IMG5efb399E07T8fsCwLh8NxFe92uzQajZ5qtcrCUoRYKkv8TGfzbZtQ7oyxyBaBQIBarWa779ftdu1xIQRCCBRFYSES4ZWic37Z5fTCJK29Y+20RfC14NHzQ6ZnHqPrem/T71pc13V0XSeZTLL0UqbSucToWpxemCS1dzwrGwRfCyZljeHAArlcrrfpZ4ubpkm9XqderxNaWiZaUik0LjluXpLSLtg+axE5aTKT05jMaDxYP2RlZaW36Weapj2uqiqqqvI4OEe4JNh+a7B71mLz7xbLJ02CeZ3fMnUmUnUebBUIh0K9Tb9rcUVRUBSFpwth/AenPC00WDhuMF8QzB5pTMp1Rv5S8Wc0RqJpVldXe5t+tnin06FUKlEqldjc3MQ7/5zxpMJEWmU8pTB6oOCNnzPyUuFRQmVoNEAymext+nU6HXu8WCxSLBbJ5/OMjY8zHM0wvHeOJ36OZ++chwmFX+M1PE/WGRwcZGpqio1YrLf7t2vxQqHQc3h4yMPRMYb8YX56JjO8cczPUZmhsRnu3XOSTqdZW5wl+90tTrbXbNtCoWCPt9tt8vm8zdHREbFYjIDfz9TkJIGAn52dHaanp4nMz/Bm6Q7WzJdc/vAJb/6M2rbtdtsez+Vy7yUWi7H/7ReYE59C/A4Ev8J0fkRpY7l3Y4u3Wi2y2ex7y+9s0HbegqnP4MU3MPc16o+3iS4tks1mabVa9rgsyx8k92KLzvcfw8RtrL27HKw/4Y9gEFmW7XHDMMhkMh/s1e4Wdefn7AZ/IRQKMTs7SyaTwTCMq7gkSZTLZVRVJZVK3ZiqqpTL5avvudvtxuPxUKlUMAzjxiqVCh6PB7fbzYAQApfLhSRJ/8s/VJIkXC4XQgj+AW9cSYbbZ7hEAAAAAElFTkSuQmCC", localized: false, defaultArea: cui.AREA_NAVBAR, onCreated(btn) { btn._handleClick = this.click; btn.setAttribute("image", this.image); check(btn, enabled()); }, click: () => prefs.setBoolPref(pref, !enabled()) }); var options = { allFrames: true, includeChrome: true, parent: {moduleURI: __URI__}, child: {moduleURI: __URI__, events: {DOMDocElementInserted: {}}}, }; var reg = () => ChromeUtils.registerWindowActor(name, options); var handleBr = br => { var bbc = br.browsingContext; if (bbc) try { for(var bc of bbc.getAllBrowsingContextsInSubtree()) bc.currentWindowGlobal?.getActor(name)?.sendAsyncMessage("", true); } catch {} } var observer = () => { var state = enabled(); state ? reg() : ChromeUtils.unregisterWindowActor(name); for(var {node} of cui.getWidget(id).instances) { var win = node.ownerGlobal; if (!win.toolbar.visible) continue; check(node, state); if (state) { var doc = win.document; for(var br of doc.getElementsByTagName("browser")) handleBr(br); br = doc.getElementById("sidebar").contentDocument ?.getElementById("#webext-panels-browser"); br && handleBr(br); } } } enabled() && reg(); prefs.addObserver(pref, observer); obs.addObserver(function quit(s, topic) { obs.removeObserver(quit, topic); prefs.removeObserver(pref, observer); }, "quit-application-granted"); } var re = /\S/; var reasons = ["MOUSEUP", "KEYPRESS", "SELECTALL"] .map(reason => Ci.nsISelectionListener[reason + "_REASON"]); class SelectionListener { constructor(sender) { (this.sender = sender).listener = this; } QueryInterface = ChromeUtils.generateQI(["nsISelectionListener"]); notifySelectionChanged(d, sel, reason) { reasons.includes(reason) && re.test(sel = sel.toString()) && this.sender.sendAsyncMessage("", sel.trim().slice(0, 160)); } } class SelectionToSearchbarChild extends JSWindowActorChild { receiveMessage(msg) { msg.data ? this.handleEvent() : this.didDestroy(); } handleEvent() { var sel = this.contentWindow.getSelection(); sel && (this.sel = sel).addSelectionListener(new SelectionListener(this)); } didDestroy() { if (this.sel) this.sel.removeSelectionListener(this.listener), this.sel = this.listener = null; } }
(async url => ChromeUtils.import(url))( "chrome://user_chrome_files/content/custom_scripts/SelectionToSearchbar.jsm" );
Проблема: он некорректно работает - не растягивается
Да, это видел когда-то, и даже тяп-ляп чего-то подправлял. Скину что есть.
((css, panel) => ({ init() { panel = document.getElementById("editBookmarkPanel"); if (panel) { addEventListener("popupshowing", this, false, panel); this.destroy && this.destroy(); return; } else if (this.destroy) return; var mo = new MutationObserver(this.init.bind(this)); mo.observe(document.getElementById("mainPopupSet"), {childList: true}); addDestructor(this.destroy = reason => { mo.disconnect(); if (reason) return; self._destructors.splice(self._destructors.findIndex( d => d.destructor == this.destroy ), 1); delete this.destroy; }); }, pref: "CB.editBMPanel_folderTreeRow_WidthHeight", handleEvent(e) { css = encodeURIComponent(css.replace(/;/g, " !important;")); var args = ["data:text/css," + css, windowUtils.USER_SHEET]; windowUtils.loadSheetUsingURIString(...args); var row = document.getElementById("editBMPanel_folderTreeRow"); var fox86 = parseInt(Services.appinfo.platformVersion) >= 86; var trg = this.trg = fox86 ? row.style : row; this.map = fox86 ? s => s + "px" : s => s; var rem = fox86 ? "removeProperty" : "removeAttribute"; addEventListener("popuphidden", this, false, panel); addDestructor(reason => { windowUtils.removeSheetUsingURIString(...args); trg[rem]("width"); trg[rem]("height"); reason == "delete" && Services.prefs.clearUserPref(this.pref); }); this.handleEvent = e => e.target == panel && this[e.type](); this.popupshowing(); }, popupshowing() { var [width, height] = Services.prefs.getStringPref(this.pref, "332 184").split(" ").map(this.map); this.trg.width = width; this.trg.height = height; gEditItemOverlay.toggleFolderTreeVisibility(); }, popuphidden() { var {width, height} = this.trg; Services.prefs.setStringPref(this.pref, parseInt(width) + " " + Math.max(184, parseInt(height))); } }).init())(` #editBookmarkPanel #editBMPanel_folderTreeRow { resize: both; overflow: hidden; min-width: 332px; } #editBookmarkPanel box.panel-header { padding: 0; border: none; } #editBookmarkPanel #editBookmarkSeparator, #editBookmarkPanel #editBookmarkPanelInfoArea, #editBookmarkPanel #editBookmarkHeaderSeparator { display: none; } #editBookmarkPanel #editBookmarkPanelRows { padding-top: 1px; } #editBookmarkPanel #editBMPanel_keywordRow, #editBookmarkPanel #editBMPanel_locationRow { visibility: visible; } #editBookmarkPanel #editBMPanel_tagsRow > hbox, #editBookmarkPanel #editBMPanel_folderRow > hbox, #editBookmarkPanel #editBookmarkPanelRows > vbox:not([id*="folderTree"]):not([id*="tagsSelector"]) { display: flex; align-items: center; } #editBookmarkPanel #editBMPanel_tagsField, #editBookmarkPanel #editBMPanel_folderMenuList, #editBookmarkPanel #editBookmarkPanelRows > vbox > label:first-child + * { flex-grow: 1; } #editBookmarkPanel moz-input-box { width: 100%; } `);
проблема в боковой консоли
Что-то я не вижу в коде адреса консоли, вообще химера какая-то.
смотрю все начинают на программу Виталия Скрипты преходить
Так это же хорошо.
Присоединяйся. Никто не торопит, и не напрягает.
не пойму, что ты заканчиваешь поддержку Custom Buton или как. Просто хочу понять что дальше.
Ну как, тут, надеюсь, ничего не изменилось,
просто давно уже ничего круто не ломали.
Вот в 91 выпилили nsIEditorObserver, и будет мусор в консоли
при переходе по первым трём вкладкам в CB-редакторе, надо бы 18-ю собрать сподобиться.
Отредактировано Dumby (08-07-2021 15:42:32)
Отсутствует
Dumby
Спасибо за попытку. Не сработало.
Сделал так
Файл SelectionToSearchbar.jsm по пути D:\Firefox Browser 84.0.2\Data\profile\chrome\user_chrome_files\custom_scripts\SelectionToSearchbar.jsm с первым кодом
В D:\Firefox Browser 84.0.2\Data\profile\chrome\user_chrome_files\custom_scripts\custom_script.js вписал второй код
Включил custom_script.js
Эффекта нет или я что то не так сделал?
Отредактировано vv07 (08-07-2021 01:42:03)
Отсутствует
Эффекта нет или я что то не так сделал?
Да нет, три первых шага выглядят сделанными совершенно верно.
Но. Дальше описание, почему-то, резко схлопывается в скупое «Эффекта нет»,
тогда как вместо этого быть продолжение, развитие, типа такого:
...
Как положено, перезапустил браузер с очисткой startupCache.
Ищу кнопку на панели навигации — нет,
в панельке оверфловского виджета [»] — тоже нет,
захожу в персонализацию — и там нет.
Выделяю слово на простой странице
(не в текстовом поле) — слово в поисковой строке не появляется.
После ручной очистки startupCache — ситуация не улучшилась.
Далее, как бы, должно идти цитирование относящихся к этим скриптам
записей в консоли браузера (или констатация отсутствия таковых),
но это, увы, редко от кого дождёшься.
Еще можно было бы добавить, что проверена кодировка ( UTF-8 ),
и расширение ( file.jsm а не какой-нибудь file.jsm.txt ).
Отсутствует
vv07
Чудеса! Даже не знаю что сказать.
Можно в безопасном режиме посмотреть.
Есть универсальный совет: «проверить на чистом профиле».
Но это слегка заморочно, это же надо будет там ucf развернуть
и заново коды расставить.
Или вот ещё, если в папке user_chrome_files не накопилось ничего секретного,
то отправить её в zip-папку и выложить на https://www.upload.ee/
А я попробую скачать и у себя проверить, вдруг что-то обнаружится.
Отсутствует
Dumby
Работает но есть проблемка если на странице фреймы about:blank или Restricted
TypeError: this.contentWindow.getSelection() is null
надо проверку добавить
Очистка ничего не дала
Думается мне что это была не та очистка что сказано в инструкции
После редактирования перезапустить кнопкой «Перезагрузка - ПКМ: Перезапустить и заново создать кэш быстрого запуска»,
или в настройках нажмите «Перезапустить*»
Отредактировано Vitaliy V. (08-07-2021 15:16:29)
Отсутствует
Чудеса! Даже не знаю что сказать
Проблема разрешилась. Суть в чем была. Я сразу не заметил этого, но часть кода кириллицей,
почему то сохранилась кракозябрами. Сейчас заново пересоздал файл SelectionToSearchbar.jsm
в UTF-8 и только потом вставил скопированный код. Скрипт заработал. Но если Виталий говорит
что то добавить, сделайте пожалуйста. Всем спасибо
Думается мне что это была не та очистка что сказано
Ошибаетесь У меня же ваши кнопочки, так что именно ПКМ
Отредактировано vv07 (08-07-2021 15:23:29)
Отсутствует
Не даром говорят, что аппетит приходит во время еды
Точно не помню, то ли расширение за это отвечало, то ли еще что то, но на
прежних версиях, в строке поиска отображались значки поисковиков
Отредактировано vv07 (08-07-2021 17:11:13)
Отсутствует
vv07
сделать можно если этот не устроит 85+ https://github.com/Aris-t2/CustomJSforF … hbar.uc.js
или 78-84 https://github.com/Aris-t2/CustomJSforF … _old.uc.js
можно через загрузчик подключить в custom_script_win.js
и это включить если надо
var old_search_engine_selection_popup = false; // show old search engine selection popup (true) or not (false)
Отредактировано Vitaliy V. (09-07-2021 00:34:47)
Отсутствует
vv07
ну замените те примеры что в загрузчике loadscript(...
так
...
//>>>>>>>>>>| Загрузка скриптов для browser.xhtml |>>>>>>>>>>
loadscript("alternative_searchbar.uc.js", win);
...
и alternative_searchbar.uc.js в папке custom_scripts разумеется
имя файла может быть другим
Отредактировано Vitaliy V. (09-07-2021 01:53:03)
Отсутствует