Dumby
На 102 отвалился add_toolbar_buttons, его можно вернуть к жизни?
add_toolbar_buttons.2021.9.5.xpi
Отсутствует
_zt
Да, враги народа не дремлют. Сделали так и так.
Не просто сделали, а ещё и засунули это в бету 102.
Таким образом, трюк с переопределением Object.freeze() больше не работает.
Это я про антиподписячий код говорю. Пока такой вариант
(в смысле если напишут export var …, а если напишут export const …, тогда ...).
// try {(jsval => { var dbg, gref, genv = func => { var sandbox = new Cu.Sandbox(g, {freshCompartment: true}); Cc["@mozilla.org/jsdebugger;1"].createInstance(Ci.IJSDebugger).addClass(sandbox); (dbg = new sandbox.Debugger()).addDebuggee(g); gref = dbg.makeGlobalObjectReference(g); return (genv = func => func && gref.makeDebuggeeValue(func).environment)(func); } var g = Cu.getGlobalForObject(jsval), o = g.Object, {freeze} = o, disleg; var AC = "AppConstants", uac = `resource://gre/modules/${AC}.`; var lexp = () => lockPref("extensions.experiments.enabled", true); if (o.isFrozen(o)) { // Fx 102.0b7+ lexp(); disleg = true; var env, def = g.ChromeUtils.defineModuleGetter; g.ChromeUtils.defineModuleGetter = (...args) => { try { genv(); dbg.addDebuggee(globalThis); var e = dbg.getNewestFrame().older.environment; var obj = e.parent.type == "object" && e.parent.object; if (obj && obj.class.startsWith("N")) // JSM, NSVO obj.unsafeDereference().Object = { freeze: ac => (ac.MOZ_REQUIRE_SIGNING = false) || freeze(ac) }; else env = e; // ESM, Lexy "var"(?) } catch(ex) {Cu.reportError(ex);} (g.ChromeUtils.defineModuleGetter = def)(...args); } ChromeUtils.import(uac + "jsm"); // (?) env && env.setVariable(AC, gref.makeDebuggeeValue(freeze(o.assign( new o(), env.getVariable(AC).unsafeDereference(), {MOZ_REQUIRE_SIGNING: false} )))); } else o.freeze = obj => { if (!Components.stack.caller.filename.startsWith(uac)) return freeze(obj); obj.MOZ_REQUIRE_SIGNING = false; if ((disleg = "MOZ_ALLOW_ADDON_SIDELOAD" in obj)) lexp(); else obj.MOZ_ALLOW_LEGACY_EXTENSIONS = true, lockPref("extensions.legacy.enabled", true); return (o.freeze = freeze)(obj); } lockPref("xpinstall.signatures.required", false); lockPref("extensions.langpacks.signatures.required", false); var useDbg = true, xpii = "resource://gre/modules/addons/XPIInstall.jsm"; if (Ci.nsINativeFileWatcherService) { // Fx < 100 jsval = Cu.import(xpii, {}); var shouldVerify = jsval.shouldVerifySignedState; if (shouldVerify.length == 1) useDbg = false, jsval.shouldVerifySignedState = addon => !addon.id && shouldVerify(addon); } if (useDbg) { jsval = g.ChromeUtils.import(xpii); var env = genv(jsval.XPIInstall.installTemporaryAddon); var ref = name => {try {return env.find(name).getVariable(name).unsafeDereference();} catch {}} jsval.XPIDatabase = (ref("lazy") || {}).XPIDatabase || ref("XPIDatabase"); var proto = ref("Package").prototype; var verify = proto.verifySignedState; proto.verifySignedState = function(id) { return id ? {cert: null, signedState: undefined} : verify.apply(this, arguments); } dbg.removeAllDebuggees(); } if (disleg) jsval.XPIDatabase.isDisabledLegacy = () => false; })( "permitCPOWsInScope" in Cu ? Cu.import("resource://gre/modules/WebRequestCommon.jsm", {}) : Cu );} catch(ex) {Cu.reportError(ex);}
Отсутствует
Dumby
Спасибо.
Посмотрим, что в esr будет, ведь atb на ранних бетах работал, а потом вот чего придумали. Да и совместимость с последующими версиями хотелось бы иметь.
Отсутствует
Dumby
Вы делали скрипт - кнопка включения стиля
А как бы этот стиль инициализировать при старте браузера, т.е. сделать кнопку не "включения", а наоборот "отключения стиля".
Отсутствует
Вы делали скрипт - кнопка включения стиля
Не совсем так. Это, скорее, proof of concept, что стиль будет перечитан с диска.
Можно после строки, где функция reg определяется, добавить строку с её вызовом: reg();
Это имеется в виду, что кнопка вытащена на тулбар.
Отсутствует
Dumby посмотрите пожалуйста эти две кнопки.При их использовании в 102.0 падает вкладка
//переключение раскладки клавиатуры по F8 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);}
Отредактировано egorsemenov06 (27-06-2022 22:29:21)
Отсутствует
не смог вставить не принимает форум
В base64 всё примет.
в 102.0 падает вкладка
Да, вижу. Увы, ничего лучше не придумал
/* 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 },
Отредактировано Dumby (28-06-2022 10:35:49)
Отсутствует
egorsemenov06 пишетне смог вставить не принимает форум
В base64 всё примет.
Спасибо Большое !работает да и ладно.А как это в base64
Отсутствует
А как это в base64
Ух ты! Хотел написать
Ну, типа текстовая ссылка для скормления адресной строке.
И спойлер [например]
Но получил: «500 Internal Server Error».
Риторический вопрос: чё за дела?
Отсутствует
egorsemenov06 пишетА как это в base64
Ух ты! Хотел написать
Ну, типа текстовая ссылка для скормления адресной строке.
И спойлер [например]Но получил: «500 Internal Server Error».
Риторический вопрос: чё за дела?
и у меня такая же ошибка выходила
Отсутствует
Dumby
egorsemenov06
спасибо за поднятие проблемы и правки кода
один вопросик всегда беспокоил по этой кнопке: почему когда переключаешь раскладку для слов начинающихся на букву Б, код срабатывает некорректно? Это поправимо?
Отредактировано Inko7 (28-06-2022 13:52:31)
Отсутствует
_zt
Да, враги народа не дремлют. Сделали так и так.
Не просто сделали, а ещё и засунули это в бету 102.Таким образом, трюк с переопределением Object.freeze() больше не работает.
Это я про антиподписячий код говорю. Пока такой вариант
(в смысле если напишут export var …, а если напишут export const …, тогда ...).скрытый текстВыделить кодКод:
// try {(jsval => { var dbg, gref, genv = func => { var sandbox = new Cu.Sandbox(g, {freshCompartment: true}); Cc["@mozilla.org/jsdebugger;1"].createInstance(Ci.IJSDebugger).addClass(sandbox); (dbg = new sandbox.Debugger()).addDebuggee(g); gref = dbg.makeGlobalObjectReference(g); return (genv = func => func && gref.makeDebuggeeValue(func).environment)(func); } var g = Cu.getGlobalForObject(jsval), o = g.Object, {freeze} = o, disleg; var AC = "AppConstants", uac = `resource://gre/modules/${AC}.`; var lexp = () => lockPref("extensions.experiments.enabled", true); if (o.isFrozen(o)) { // Fx 102.0b7+ lexp(); disleg = true; var env, def = g.ChromeUtils.defineModuleGetter; g.ChromeUtils.defineModuleGetter = (...args) => { try { genv(); dbg.addDebuggee(globalThis); var e = dbg.getNewestFrame().older.environment; var obj = e.parent.type == "object" && e.parent.object; if (obj && obj.class.startsWith("N")) // JSM, NSVO obj.unsafeDereference().Object = { freeze: ac => (ac.MOZ_REQUIRE_SIGNING = false) || freeze(ac) }; else env = e; // ESM, Lexy "var"(?) } catch(ex) {Cu.reportError(ex);} (g.ChromeUtils.defineModuleGetter = def)(...args); } ChromeUtils.import(uac + "jsm"); // (?) env && env.setVariable(AC, gref.makeDebuggeeValue(freeze(o.assign( new o(), env.getVariable(AC).unsafeDereference(), {MOZ_REQUIRE_SIGNING: false} )))); } else o.freeze = obj => { if (!Components.stack.caller.filename.startsWith(uac)) return freeze(obj); obj.MOZ_REQUIRE_SIGNING = false; if ((disleg = "MOZ_ALLOW_ADDON_SIDELOAD" in obj)) lexp(); else obj.MOZ_ALLOW_LEGACY_EXTENSIONS = true, lockPref("extensions.legacy.enabled", true); return (o.freeze = freeze)(obj); } lockPref("xpinstall.signatures.required", false); lockPref("extensions.langpacks.signatures.required", false); var useDbg = true, xpii = "resource://gre/modules/addons/XPIInstall.jsm"; if (Ci.nsINativeFileWatcherService) { // Fx < 100 jsval = Cu.import(xpii, {}); var shouldVerify = jsval.shouldVerifySignedState; if (shouldVerify.length == 1) useDbg = false, jsval.shouldVerifySignedState = addon => !addon.id && shouldVerify(addon); } if (useDbg) { jsval = g.ChromeUtils.import(xpii); var env = genv(jsval.XPIInstall.installTemporaryAddon); var ref = name => {try {return env.find(name).getVariable(name).unsafeDereference();} catch {}} jsval.XPIDatabase = (ref("lazy") || {}).XPIDatabase || ref("XPIDatabase"); var proto = ref("Package").prototype; var verify = proto.verifySignedState; proto.verifySignedState = function(id) { return id ? {cert: null, signedState: undefined} : verify.apply(this, arguments); } dbg.removeAllDebuggees(); } if (disleg) jsval.XPIDatabase.isDisabledLegacy = () => false; })( "permitCPOWsInScope" in Cu ? Cu.import("resource://gre/modules/WebRequestCommon.jsm", {}) : Cu );} catch(ex) {Cu.reportError(ex);}
Однако напомню, что в 91ESR антиподписячий код не обязателен,
можно обойтись только настройками. Есть вероятность того, что это будет верно и для 102ESR.
А дурацкие надписи на about:addons можно убрать скриптом, или, в крайнем случае, стилем.
Подскажите, как вернуть к жизни add_toolbar_buttons.2021.9.5.xpi на 102 (Final или ESR), очень уж удобный плагин !
Отсутствует
Подскажите, как вернуть к жизни add_toolbar_buttons.2021.9.5.xpi на 102 (Final или ESR), очень уж удобный плагин !
Вы же процитировали решение, просто обновите код для отключения... на тот что под спойлером!
Win7
Отсутствует
Извиняюсь, вставлял код на профиль после запуска со старой "антиподпиской", не сработал. Сейчас вытащил из бэкапа профиль от 101 версии, накатил обнову и новый код. Всё отлично, спасибо !
Отсутствует
Dumby
Можете посмотреть расширение Open Link with New Tab? На 91.11 и 102 начался периодический отвал, проявляется в том что иногда ссылки по Ctrl+ЛКМ начинают открываться в новом окне, перезапуск расширения лечит это.
Отредактировано _zt (03-07-2022 09:14:24)
Отсутствует
Dumby
с последним обновлением ff отваливается такой скрипт, не везде срабатывает: в строке адреса, в строке поиска на стартовом экране - не работает совсем, а на большинстве форум в окнах ввода срабатывает. Странно...
// MiddleMouse.Paste с заменой выделенного текста (порт с СВ) try {((id, code, gmon) => { var d = "data:,", ref = "globalThis." + id, dref = d + ref; var psi = `${dref} = ${encodeURIComponent(code)};`; var psd = `${d}delete ${ref};`; var e10s = Services.appinfo.browserTabsRemoteAutostart; if (e10s) var fsi = `${dref}.listen(this, "add");`, fsd = `${dref}.listen(this);`; var g = Cu.getGlobalForObject(Cu), pref = "middlemouse.paste"; var obs = { pref: Services.prefs.getBoolPref.bind(null, pref), startup() { Services.prefs.addObserver(pref, this); Services.obs.addObserver(this, "quit-application-granted", false); this.pref() && this.init(); this.gmon(); }, async gmon() { Cu.importGlobalProperties(["fetch"]); var url = "chrome://custombuttons/content/editExternal.js"; try {var src = await (await fetch(url)).text();} catch(ex) {return;} src = src.replace(/function gmon_edit_mouseclick[^}]+?}/, gmon); var arr = [["override", url, "data:," + encodeURIComponent(src)]]; url = Services.io.getProtocolHandler("resource").getSubstitution("gre"); this.gmonHelper = Cc["@mozilla.org/addons/addon-manager-startup;1"] .getService(Ci.amIAddonManagerStartup).registerChrome(url, arr); }, shutdown() { this.pref() && this.destroy(); e10s && Services.ppmm.removeDelayedProcessScript(psi), Services.ppmm.loadProcessScript(psd, false); Services.prefs.removeObserver(pref, this); Services.obs.removeObserver(this, "quit-application-granted"); this.gmonHelper && this.gmonHelper.destruct(); }, init() { e10s && Services.mm.loadFrameScript(fsi, true); Services.obs.addObserver(this, "widget-first-paint", false); this.wins("add"); }, destroy() { if (e10s) Services.mm.removeDelayedFrameScript(fsi), Services.mm.loadFrameScript(fsd, false); Services.obs.removeObserver(this, "widget-first-paint"); this.wins(); }, observe(subj, topic) { var char = topic[0]; if (char == "w") return this.call(subj, "add"); if (char == "q") return this.shutdown(); this[this.pref() ? "init" : "destroy"](); }, wins(arg) { for(var win of Services.wm.getEnumerator(null)) this.call(win, arg); }, listen() {} }; Services.ppmm.loadProcessScript(psi, e10s); g[id].call = g[id].listen; Object.assign(g[id], obs).startup(); })("ucf_custom_script_js_MiddleMousePaste", `{ listen(trg, prfx = "remove") { var meth = prfx + "EventListener"; trg[meth]("auxclick", this, true); trg[meth]("unload", this); }, handleEvent(e) {this[e.type](e);}, unload(e) {this.listen(e.target);}, sn: Ci.nsISelectionController.SELECTION_NORMAL, inRect: (r, x, y) => y > r.top && y < r.bottom && x < r.right && x > r.left, auxclick(e) { if (e.button != 1) return; var trg = (e.originalTarget || e.target).closest( "input:not([disabled]),textarea:not([disabled])" ); if (!trg) return; var ed = trg.editor; if (!ed || ed.selection.isCollapsed || !ed.canPaste(this.sn)) return; var x = e.clientX, y = e.clientY, rng = ed.selection.getRangeAt(0); if (!this.inRect(rng.getBoundingClientRect(), x, y)) return; var list = rng.getClientRects(); if (list.length == 1 || Array.from(list).some( rect => this.inRect(rect, x, y) )) ed.paste(this.sn, e.preventDefault()); } }`, `\ function gmon_edit_mouseclick(e) { var mmp = Cc["@mozilla.org/preferences-service;1"] .getService(Ci.nsIPrefBranch).getBoolPref.bind(null, "middlemouse.paste"); (gmon_edit_mouseclick = e => e.button != 1 || mmp() || edittarget(e.target))(e); }`); } catch(ex) {Cu.reportError(ex);} ((bu, bm, {star} = bu) => addEventListener("mouseenter", { async handleEvent() { if (!this.starred) return; star.tooltipText = "\u3164"; var result = []; await this.fetch(); for(var guid of this.guids) { var arr = []; while(true) { if (!this.hover) return; var res = await bm.fetch(guid); if ((guid = res.parentGuid) == bm.rootGuid) { arr.unshift(bm.getLocalizedTitle(res)); break; } arr.unshift(res.title || "[Безымянная папка]"); } result.push(arr.join("\\")); } this.hover && this.setTooltip(result); }, get fetch() { addDestructor(() => this.starred && document.l10n.translateElements([star])); var set = this.guids = new Set(); var args = [b => set.add(b.parentGuid), {concurrent: true}]; delete this.fetch; return this.fetch = () => set.clear() || bm.fetch({url: gBrowser.currentURI.spec}, ...args); }, setTooltip(arr) { var m = arr.length > 1; var text = `Адрес${m ? "а" : ""} заклад${m ? "ок" : "ки"}:\n${arr.join("\n")}`; document.tooltipNode == star ? this.tt.label = text : star.tooltipText = text; }, get tt() { var list = InspectorUtils.getChildrenForNode(document.documentElement, true); delete this.tt; return this.tt = list.item(list.length - 1); }, get starred() {return bu._itemGuids.size;}, get hover() {return star.matches(":hover");} }, false, star || 1))(BookmarkingUI, PlacesUtils.bookmarks);
и вопрос по тому же Switch Keyboard Layout button: переключаешь раскладку для слов начинающихся на букву Б, Ю, Ж - код срабатывает некорректно
Отредактировано Inko7 (03-07-2022 16:59:15)
Отсутствует
Dumby
Сделайте пожалуйста, что бы скрипт: Очистить панель адреса или поиска прокруткой колёсиком мыши на панели работал во всех панелях поиска, включая контент!
Win7
Отсутствует
расширение
Это не расширение, а WebExtensions.
иногда
И где же мне взять это «иногда»? Не́где.
Можете посмотреть
Смотреть там особо неначто.
Регистрируется контентский скрипт, который,
запрашивает пользовательскую аддонскую настройку,
и если она не равна нулю (типа, установлена, и как 1 или 2)
тогда идёт перебор всех элементов <a>, которые присутствуют в DOM-дереве документа
(на момент исполнения скрипта, добавленные [как-то] позже идут лесом; и те, которые в Shadow DOM тоже, наверно, в пролёте),
и, если элемент (собственно ссылка) имеет href, тогда ему уставливается атрибут "target" со значением "_blank".
(ну, там в зависимости от 1 или 2, как-бы same-site или нет, неважно).
Вот и всё. Атрибут либо уставливается, либо нет.
Если атрибут должен устанавливаться, но не устанавливается,
тогда не знаю почему. Может storage.sync глючит (?).
В таком случае можно попробовать заменить все browser.storage.sync на browser.storage.local
и заново посетить настройки аддона. Предположение, разумеется, ни на чём не основано.
А так-то, допустим, если уже установлена какая-либо обезьяна,
то скриптов для неё, делающих нечто подобное, должно быть (ну, я так предполагаю) навалом.
И не просто подобное, а гораздо более ультимативное.
Может попробуй смигрировать в эту сторону.
такой скрипт
Это ты мне что-то совсем левое древнее впариваешь.
Ещё и какой-то star-тултипский код в конце прицеплен, непонятно зачем.
Последний вариант вроде как здесь.
Но, железная поступь проекта «JSM-геноцид»,
рано или поздно, сметёт не только это, а вообще всё.
Если нет возможности вникнуть в это сейчас (пока никто не торопит)
то лучше отказаться от всего подобного сразу, нечего не дожидаясь.
для слов начинающихся на букву Б, Ю, Ж - код срабатывает некорректно
Да видел я пост про «Б». Ин-валидно.
Нет никаких проблем с «Б» (как и с «Ю»).
С «Ж», да, есть проблемы.
Так же, как есть проблемы и с «б», «ю», «ж», «Э».
Но код-то не мой, я просто перегонял исходник из пустого в порожнее.
Возможно, чуть лучше будет с такой правкой
/* 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;
включая контент
Увы, делам контентским, вебским, я весьма посторонен.
Могу только извиниться за это.
Отсутствует
Последний вариант вроде как здесь.
Как-то пропустил его, но он все равно не работает в строке адреса и в строке поиска на стартовой странице FF. Может оно и не особо критично...
Возможно, чуть лучше будет с такой правкой
изменений пока не заметил
Отсутствует
Inko7
Ну, значит у кого-то из нас (двоих) руки кривые.
Тут бы хорошо услышать мнение третьей стороны,
но вряд-ли таковое нарисуется, сложновато это всё, наверно.
Отсутствует
Ещё и какой-то star-тултипский код в конце прицеплен, непонятно зачем.
Точно! Думаю, где же он спрятался)))
У меня есть два варианта кода, кто из них новее/лучше не знаю. Но у обоих есть глюк - открываем закладку, с нее переходим по внутр. ссылкам куда-либо, звездочка соответственно теперь пустая в адресной строке, а тултип все равно показывается с путём к изначально открытой закладке. Такое очень часто.
// Показать адрес существующей закладки при наведении на звездочку try {((bu, bm, {star} = bu) => { var listener = { async handleEvent() { if (!bu._itemGuids.size) return; star.tooltipText = "\u3164"; var result = []; await this.fetch(); for(var guid of this.guids) { var arr = []; while(true) { if (!this.hover) return; var res = await bm.fetch(guid); if ((guid = res.parentGuid) == bm.rootGuid) { arr.unshift(bm.getLocalizedTitle(res)); break; } arr.unshift(res.title || "[Безымянная папка]"); } result.push(arr.join("\\")); } this.hover && this.setTooltip(result); }, get fetch() { var set = this.guids = new Set(); var args = [b => set.add(b.parentGuid), {concurrent: true}]; delete this.fetch; return this.fetch = () => set.clear() || bm.fetch({url: gBrowser.currentURI.spec}, ...args); }, setTooltip(arr) { var m = arr.length > 1; var text = `Адрес${m ? "а" : ""} заклад${m ? "ок" : "ки"}:\n${arr.join("\n")}`; document.tooltipNode == star ? this.tt.label = text : star.tooltipText = text; }, get tt() { var list = InspectorUtils.getChildrenForNode(document.documentElement, true); delete this.tt; return this.tt = list.item(list.length - 1); }, get hover() {return star.matches(":hover");} }; star.addEventListener("mouseenter", listener); addEventListener("unload", () => star.removeEventListener("mouseenter", listener) , {once: true}); })(BookmarkingUI, PlacesUtils.bookmarks);} catch(ex) {Cu.reportError(ex);}
// Показать адрес существующей закладки при наведении на звездочку ((bu, bm, {star} = bu) => addEventListener("mouseenter", { async handleEvent() { if (!this.starred) return; star.tooltipText = "\u3164"; var result = []; await this.fetch(); for(var guid of this.guids) { var arr = []; while(true) { if (!this.hover) return; var res = await bm.fetch(guid); if ((guid = res.parentGuid) == bm.rootGuid) { arr.unshift(bm.getLocalizedTitle(res)); break; } arr.unshift(res.title || "[Безымянная папка]"); } result.push(arr.join("\\")); } this.hover && this.setTooltip(result); }, get fetch() { addDestructor(() => this.starred && document.l10n.translateElements([star])); var set = this.guids = new Set(); var args = [b => set.add(b.parentGuid), {concurrent: true}]; delete this.fetch; return this.fetch = () => set.clear() || bm.fetch({url: gBrowser.currentURI.spec}, ...args); }, setTooltip(arr) { var m = arr.length > 1; var text = `Адрес${m ? "а" : ""} заклад${m ? "ок" : "ки"}:\n${arr.join("\n")}`; document.tooltipNode == star ? this.tt.label = text : star.tooltipText = text; }, get tt() { var list = InspectorUtils.getChildrenForNode(document.documentElement, true); delete this.tt; return this.tt = list.item(list.length - 1); }, get starred() {return bu._itemGuids.size;}, get hover() {return star.matches(":hover");} }, false, star || 1))(BookmarkingUI, PlacesUtils.bookmarks);
Добавлено 03-07-2022 21:46:08
Ну, значит у кого-то из нас (двоих) руки кривые.
тут спору нет
о каком конкретно скрипте речь?
Отредактировано Inko7 (03-07-2022 21:46:08)
Отсутствует
а тултип все равно показывается с путём к изначально открытой закладке
/* if (!bu._itemGuids.size) return; */ if (!bu._itemGuids.size) return star.removeAttribute("tooltiptext");
о каком конкретно скрипте речь?
Об обоих двух.
Отсутствует
Inko7
Ну, значит у кого-то из нас (двоих) руки кривые.
Тут бы хорошо услышать мнение третьей стороны,
но вряд-ли таковое нарисуется, сложновато это всё, наверно.
У меня везде всё вставляет, без проблем.
Отсутствует