Dumby
Большое спасибо! Всё отлично работает.
«The Truth Is Out There»
Отсутствует
Dumby Посмотрите пожалуйста кнопку Переключить Куки на ней не отображаеться иконка в 110.0
//Переключить Куки 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 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); }, 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) {}
Отсутствует
egorsemenov06
Можно сменить протокол svg'шки.
Создать, например, cookie-toggle.svg
допустим, в папке user_chrome_files\custom_scripts\imgs
Содержимое файла взять из data-адреса от «<svg» и до «/svg>» включительно.
Тогда в коде меняем
/* 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>"; */ img = "chrome://user_chrome_files/content/custom_scripts/imgs/cookie-toggle.svg";
/* 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>"; */ img = (rph => { var subst = "ucf-cookie-toggle-btn-img"; rph.setSubstitution(subst, Services.io.newURI( "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>" )); return `resource://${subst}/`; })(Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler));
Отсутствует
Ну, или включить настройку svg.context-properties.content.enabled Но, я не знаю почему она дефолтно выключена,может тому есть какие-то веские причины.
Спасибо Большое!!!
Отсутствует
egorsemenov06
Опаньки!
Bug 1817071 - Remove -moz-image-region
Попытка наброска реплейсмента, если 16px:
1. После многочисленных trbn.setAttribute(…) — ещё один
trbn.setAttribute("image", img);
2. Правка стиля
/* #${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} image { --h: 16px; height: var(--h); !important; object-fit: cover !important; object-position: top !important; } #${id}[badge="0"] image { object-position: 0 calc(-1 * var(--h)) !important; }
Отсутствует
egorsemenov06Опаньки!Bug 1817071 - Remove -moz-image-regionПопытка наброска реплейсмента, если 16px:1. После многочисленных trbn.setAttribute(…) — ещё одинtrbn.setAttribute("image", img);2. Правка стиляскрытый текстВыделить кодКод
*
#${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} image {
--h: 16px;
height: var(--h); !important;
object-fit: cover !important;
object-position: top !important;
}
#${id}[badge="0"] image {
object-position: 0 calc(-1 * var(--h)) !important;
}
я включил насройку svg.context-properties.content.enabled и она нормально стала отображаться.Сейчас попробовал правку стиля и иконка опять пропала.Но всеравно Спасибо Вам может в будущем опять такое же получиться а так работает и мать с ней.
Отсутствует
1. После многочисленных trbn.setAttribute(…) — ещё один
trbn.setAttribute("image", img);2. Правка стиля
скрытый текстВыделить кодКод:
/* #${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} image { --h: 16px; height: var(--h); !important; object-fit: cover !important; object-position: top !important; } #${id}[badge="0"] image { object-position: 0 calc(-1 * var(--h)) !important; }
У меня в этой кнопке иконка не пропадала. Видимо из-за включенного svg.context-properties.content.enabled. Но на всякий случай фикс все же накатил.
После применения фикса все ОК. Спасибо.
«The Truth Is Out There»
Отсутствует
Dumby, скажите, пожалуйста, а нельзя ли с помощью скрипта вернуть пункт в контекстном меню адресной строки "Вставить и перейти" в версиях 91 и выше..?
Как было в старых версиях:
Без него как-то не совсем комфортно... чего-то удобного из функционала не хватает.
Что интересно, в новых версиях ФФ в строке поиска (не адреса) пункт "Вставить и искать" оставили, а адресную почему-то обделили...
Отсутствует
Dumby, вы, вроде как, .uc.js машинерию не особо жалуете, но, может посмотрите этот скрипт, чтобы на 110 заработал.
Он показывает закладки(папки) из кнопки избранного, меню, гамбургера в боковой панели. На 102esr еще срабатывал, на 110 уже нет.
Консоль пишет ошибку Uncaught TypeError: PlacesUtils.bookmarks.getFolderIdForItem is not a function в строке let aFolderItemId = PlacesUtils.bookmarks.getFolderIdForItem(node.itemId);.
Отсутствует
вы, вроде как, .uc.js машинерию не особо жалуете
С чего бы мне её не жаловать? Просто у меня её нет.
И, они разные бывают. Если что-то простое, типа скрит в окно и всё, то ещё ничего.
Но если там своих API понатыкано, то машинерию разворачивать надо,
а это, сам понимаешь, радости мало.
PlacesUtils.bookmarks.getFolderIdForItem is not a function
Может просто так
/* let aFolderItemId = PlacesUtils.bookmarks.getFolderIdForItem(node.itemId); if (aFolderItemId) { */ if (node.parent.type == node.RESULT_TYPE_FOLDER) {
Отсутствует
а это, сам понимаешь, радости мало
Поэтому и уточнил сначала... вдруг, желания связываться не будет.
Может просто так
Сработало! Только из гамбургера не подхватывает. Но я закладками оттуда не пользуюсь, поэтому и так хорошо.
Спасибо.
Отсутствует
Dumby - просьба исправить скрипт, скрывающий панель вкладок с одной вкладкой для FF-110 (на FF97 работало)
плюс используется стиль «Вкладки снизу»: от aris-t2 @import ./css/tabs/tabs_below_navigation_toolbar.css
// ucf_autohidetabstoolbar.js https://forum.mozilla-russia.org/viewtopic.php?pid=790733#p790733 (this.autohidetabstoolbar = { init(that) { var newtab = this.newtab = document.querySelector("#tabs-newtab-button"); if (!newtab) return; newtab.addEventListener("animationstart", this); that.unloadlisteners.push("autohidetabstoolbar"); var style = "data:text/css;charset=utf-8," + encodeURIComponent(` :root[ucfautohidetabstoolbar="true"] #TabsToolbar:not([customizing]) { visibility: collapse !important; } #main-window[ucfautohidetabstoolbar="true"]:not([customizing]) box > #navigator-toolbox { padding-bottom: 0 !important; } #tabs-newtab-button { opacity: 1; animation-name: toolbar_visible !important; animation-timing-function: step-start !important; animation-duration: .1s !important; animation-iteration-count: 1 !important; animation-delay: 0s !important; } .tabbrowser-tab[first-visible-tab="true"][last-visible-tab="true"] ~ #tabs-newtab-button, .tabbrowser-tab[first-visible-tab="true"][last-visible-tab="true"] ~ #tabbrowser-arrowscrollbox-periphery > #tabs-newtab-button { opacity: 0; animation-name: toolbar_hide !important; } @keyframes toolbar_visible { from { opacity: 0;} to {opacity: 1;} } @keyframes toolbar_hide { from {opacity: 1;} to {opacity: 0;} } `); windowUtils.loadSheetUsingURIString(style, windowUtils.USER_SHEET); }, handleEvent(e) { this[e.animationName]?.(); }, toolbar_visible() { document.documentElement.setAttribute("ucfautohidetabstoolbar", "false"); }, toolbar_hide() { document.documentElement.setAttribute("ucfautohidetabstoolbar", "true"); }, destructor() { this.newtab.removeEventListener("animationstart", this); } }).init(this);
Отсутствует
просьба исправить
Не способен.
То есть, атрибуты {first, last}-visible-tab выпилены,
однако, можно записать как-то так
/* .tabbrowser-tab[first-visible-tab="true"][last-visible-tab="true"] ~ #tabs-newtab-button, .tabbrowser-tab[first-visible-tab="true"][last-visible-tab="true"] ~ #tabbrowser-arrowscrollbox-periphery > #tabs-newtab-button { opacity: 0; animation-name: toolbar_hide !important; } */ #tabs-newtab-button { animation-name: toolbar_hide !important; } .tabbrowser-tab:not([hidden]) ~ .tabbrowser-tab:not([hidden]) ~ #tabbrowser-arrowscrollbox-periphery > #tabs-newtab-button { animation-name: toolbar_visible !important; }
Отсутствует
Dumby
Помогите решить задачку.
При выделении текста на странице, на ряде сайтов, и последующем копировании этого текста (Ctrl+C), в начале текста, или в конце текста, или и там и там, также копируются пробелы.
Надо, что в буфер обмена попал текст без этих пробелов.
Я сам пытался что-то придумать. Вроде бы даже получился рабочий код:
try { (this.ucf_SelectedTextToClipboard = { init(that) { document.addEventListener("keydown", this); }, destructor() { this.document.removeEventListener("keydown", this); }, handleEvent(e) { if (e.ctrlKey && e.code == "KeyC") { // выделенный текст из страницы ..... var selection = document.commandDispatcher.focusedWindow.getSelection(); // выделенный текст из текстового поля ..... if ( selection.isCollapsed ) { var theBox = document.commandDispatcher.focusedElement; if (theBox && (theBox.type == "text" || theBox.type == "textarea" || theBox.type == "textbox" || theBox.type == "input" || theBox.type == "search")) { var startPos = theBox.selectionStart; var endPos = theBox.selectionEnd; selection = theBox.value.substring(startPos, endPos); } } if ( selection !== '' ) { setTimeout(()=> selection = gClipboard.read(), 100); // читаем из буфера обмена ..... setTimeout(()=> selection = selection.toString().trim(), 100); // убираем пробелы ..... setTimeout(()=> gClipboard.write(selection), 100); // записываем в буфер обмена ..... } else { return; } } }, }).init(this); } catch(e) {}
«The Truth Is Out There»
Отсутствует
unter_officer
Прости великодушно, но код — эпический ппц.
// init(that) { document.addEventListener("keydown", this); }, destructor() { this.document.removeEventListener("keydown", this); },
Что ещё за «this.document»? Просто document
И, если имелось в виду, что удалить листенер по выгрузке окна,
то это так не работает. Следует явно указать в init() имя объекта с методом destructor()
that.unloadlisteners.push("ucf_SelectedTextToClipboard");
// // выделенный текст из страницы ..... var selection = document.commandDispatcher.focusedWindow.getSelection(); // выделенный текст из текстового поля ..... if ( selection.isCollapsed ) {
Какой ещё страницы? Какого ещё текстового поля?
Всё это добро находится в другом(!) процессе.
Нету больше прямого доступа к содержимому веб-страниц. И уже давно.
не нравиться цепочка: копировать в буфер -> читать из буфера -> обрезать пробелы -> и снова копировать в буфер.
Ну «копировать в буфер» уже произошло, ведь слушается Ctrl+C,
а чем не нравится «читать из буфера -> обрезать пробелы -> и снова копировать в буфер»
я не понял, разве есть другие варианты?
И, код, вроде как, под UCF, но используется объект gClipboard,
а его добавляет в окно CB, то есть, если неиметь/удалить/выключить CB,
то код просто не будет работать.
Отредактировано Dumby (04-03-2023 16:26:39)
Отсутствует
Прости великодушно, но код — эпический ппц.
Для меня листенеры и деструкторы всегда были "темным лесом". Плюс, в данном случае, моя невнимательность.
И, код, вроде как, под UCF, но используется объект gClipboard
Вот, меня терзали смутные сомнения, что в UCF вроде как не должно быть gClipboard.
Но вспомнить, почему не должно быть, я так и не смог.
Не знаю, правильно или нет..... в общем, получился у меня вот такой код:
try { (this.ucf_SelectedTextToClipboard = { init(that) { document.addEventListener("keydown", this); }, handleEvent(e) { if (e.ctrlKey && e.code == "KeyC") { var write, read = () => { var cb = Services.clipboard, gc = cb.kGlobalClipboard, fl = "text/plain"; var ch = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper); write = str => ch.copyStringToClipboard(str, gc); var trans = Cc["@mozilla.org/widget/transferable;1"].createInstance(Ci.nsITransferable); trans.init(null); return (read = () => { trans.addDataFlavor(fl); cb.getData(trans, gc); var res = {}; trans.getTransferData(fl, res); res = res.value?.QueryInterface(Ci.nsISupportsString).data; trans.removeDataFlavor(fl); return res; })(); } var selection = ''; setTimeout(()=> selection = read(), 100); // читаем из буфера обмена ..... setTimeout(()=> selection = selection.toString().trim(), 100); // убираем пробелы с обоих концов текста ..... setTimeout(()=> write(selection), 100); // записываем в буфер обмена ..... } }, }).init(this); } catch(e) {}
«The Truth Is Out There»
Отсутствует
В кнопке ATB 2021.9.5 перестал работать переход по адресу из буфера обмена, исправьте пожалуйста!
И ещё в кнопке поиск на странице не работает СКМ: Поиск на этой странице из буфера обмена.
Отсутствует
kokoss
Попробуй, например, такую правку parent.js
/* readFromClipboard(win) { var url = ""; try { var trans = Cc["@mozilla.org/widget/transferable;1"].createInstance(Ci.nsITransferable); var contxt = ("docShell" in win) ? win.docShell.QueryInterface(Ci.nsILoadContext) : win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIWebNavigation).QueryInterface(Ci.nsILoadContext); trans.init(contxt); trans.addDataFlavor("text/unicode"); var clipboard = Services.clipboard; clipboard.getData(trans, clipboard.kGlobalClipboard); var data = {}; trans.getTransferData("text/unicode", data, {}); if (data.value) { data = data.value.QueryInterface(Ci.nsISupportsString); url = data.data; } } catch (ex) {} return url; }, */ readFromClipboard() { var {getData, kGlobalClipboard: kGK} = Services.clipboard; var flavor = `text/${parseInt(Services.appinfo.platformVersion) >= 111 ? "plain" : "unicode"}`; var transferable = Cc["@mozilla.org/widget/transferable;1"].createInstance(Ci.nsITransferable); transferable.init(null); transferable.addDataFlavor(flavor); return (this.readFromClipboard = () => { try { getData(transferable, kGK); var out = {}; transferable.getTransferData(flavor, out); var url = out.value.QueryInterface(Ci.nsISupportsString).data; } finally { transferable.setTransferData(flavor, null); return url || ""; } })(); },
Отсутствует
Попробуй, например, такую правку parent.js
скрытый текст
Благодарю!
И ещё в кнопке поиск на странице не работает СКМ: Поиск на этой странице из буфера обмена.
В этой кнопке работает только ЛКМ.
Отредактировано kokoss (14-03-2023 21:17:13)
Win7
Отсутствует
В этой кнопке работает только ЛКМ.
Эта кнопка? https://imgsh.net/a/LYEkjcn.png
У меня все пункты работают.
Отсутствует
Попробуй, например, такую правку parent.js
Спасибо.
В этой кнопке работает только ЛКМ.
Но теперь то всё работает.
У меня все пункты работают.
В смысле после правки от Dumby работают, или без неё работают?
Отсутствует