можно попробовать временно переключать настройку
мне показалось, что это звучит чуть ли не как решённая проблема, но в итоге ничего не изменилось
вот на всякий случай весь код (надеюсь, что это я напутал что-то):
(() => { var link, href, x, y, cssvar = "--selcolorlocker"; var sip = Services.prefs.setIntPref; var pn = "extensions.tabmix.opentabforLinks"; var set1 = sip.bind(null, pn, 1); var check = () => { return link.className == "pg"; } var click = e => { link.removeEventListener("click", click, true); e.preventDefault(); loadURI(link.href, link.ownerDocument.documentURIObject); link = null; } var ret = skip => { link.setAttribute("href", href); link.style.removeProperty(cssvar); link.getAttribute("style") === "" && link.removeAttribute("style"); skip ? link = null : link.addEventListener("click", click, true); } var restore = e => { window.removeEventListener("mouseup", restore, true); window.removeEventListener("dragend", restore, true); if (e.screenX != x || e.screenY != y) return requestAnimationFrame(ret); var skip = true; if (e.type.startsWith("m")) { if (e.ctrlKey) skip = false; else if (check()) sip(pn, 0), requestAnimationFrame(set1); } ret(skip); } var mousedown = e => { if (e.button) return; link = e.target.closest(":-moz-any-link[href]"); if (link) { e.ctrlKey && e.preventDefault(); var w = e.view, sel = w.getSelection(); sel.isCollapsed || sel.removeAllRanges(); var dwu = w.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils); link.style.setProperty(cssvar, dwu.getVisitedDependentComputedStyle(link, "", "color")); href = link.getAttribute("href"); link.removeAttribute("href"); x = e.screenX; y = e.screenY; window.addEventListener("mouseup", restore, true); window.addEventListener("dragend", restore, true); } } gBrowser.addEventListener("mousedown", mousedown, true); window.addEventListener("unload", function unl() { window.removeEventListener("unload", unl); gBrowser.removeEventListener("mousedown", mousedown, true); }); })();
Отсутствует
надеюсь, что это я напутал что-то
Увы нет, всё сделано правильно.
в итоге ничего не изменилось
Задача заколдована, не иначе.
Всё наверно, что ещё остаётся.
Разве что, на интерес, насыпать в код каких-нибудь логов,
и посмотреть в консоли что происходит, но никаких гарантий что это что-нибудь прояснит.
То есть, меняем код, например, на такой вариант с логами,
и берём простой случай — клик по «pg-ссылке» на странице с data-адресом (из №147).
Затем, в Консоли браузера, фильтруем сообщения по тексту «[pg]», ПКМ, «Выделить всё», Ctrl+C, и сюда.
(() => { var link, href, x, y, cssvar = "--selcolorlocker"; var LOG = msg => Services.console .logStringMessage("[PG] " + Cu.now().toFixed(2) + " " + msg); var sip = Services.prefs.setIntPref; var pn = "extensions.tabmix.opentabforLinks"; var s1 = sip.bind(null, pn, 1); var set1 = (...args) => { s1(...args) LOG("set1(), Set pref to 1, got " + Services.prefs.getIntPref(pn)); } var check = () => { LOG('check(), link.className == "pg" is ' + (link.className == "pg")); return link.className == "pg"; } var click = e => { LOG("click()"); link.removeEventListener("click", click, true); e.preventDefault(); loadURI(link.href, link.ownerDocument.documentURIObject); link = null; } var ret = skip => { LOG("ret(), skip is " + skip); link.setAttribute("href", href); link.style.removeProperty(cssvar); link.getAttribute("style") === "" && link.removeAttribute("style"); skip ? link = null : link.addEventListener("click", click, true); } var restore = e => { LOG("restore(), " + e.type + " (" + e.screenX + " " + x + ") (" + e.screenY + " " + y + ")"); window.removeEventListener("mouseup", restore, true); window.removeEventListener("dragend", restore, true); if (e.screenX != x || e.screenY != y) return requestAnimationFrame(ret); var skip = true; if (e.type.startsWith("m")) { if (e.ctrlKey) { skip = false; LOG("restore(), ctrlKey detected, set skip to false, got " + skip); } else if (check()) { sip(pn, 0); requestAnimationFrame(set1); LOG("restore(), Set pref to 0, got " + Services.prefs.getIntPref(pn)); var ensureClick = e => { LOG("ensureClick(), pref value is " + Services.prefs.getIntPref(pn)); } window.addEventListener("click", ensureClick, true); setTimeout(() => window.removeEventListener("click", ensureClick, true), 300); } else LOG("restore(), not ctrlKey and not check() result, skip is " + skip); } ret(skip); } var mousedown = e => { if (e.button) return; link = e.target.closest(":-moz-any-link[href]"); if (link) { LOG("mousedown(), link detected"); e.ctrlKey && e.preventDefault(); var w = e.view, sel = w.getSelection(); sel.isCollapsed || sel.removeAllRanges(); var dwu = w.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils); link.style.setProperty(cssvar, dwu.getVisitedDependentComputedStyle(link, "", "color")); href = link.getAttribute("href"); link.removeAttribute("href"); x = e.screenX; y = e.screenY; window.addEventListener("mouseup", restore, true); window.addEventListener("dragend", restore, true); } } gBrowser.addEventListener("mousedown", mousedown, true); window.addEventListener("unload", function unl() { window.removeEventListener("unload", unl); gBrowser.removeEventListener("mousedown", mousedown, true); }); })();
Отсутствует
Затем, в Консоли браузера, фильтруем сообщения по тексту «[pg]»
после фильтрации: в консоли пусто
about:logo у меня пустая:
- но так полагаю, что это ничего не меняет
- это, видимо, из-за img {display: none !important;} в userContent.css
я уже было хотел закрывать лису и консоль, но ещё просто так потыкал на pg-ссылку (с Ctrl),
и в консоли что-то появилось:
[PG] 312051.90 mousedown(), link detected
[PG] 312155.34 restore(), mouseup (992 992) (341 341)
[PG] 312155.40 restore(), ctrlKey detected, set skip to false, got false
[PG] 312155.41 ret(), skip is false
[PG] 312156.15 click()
вот на всякий случай повтор (с Ctrl) (при другом запуске лисы):
[PG] 57499.12 mousedown(), link detected
[PG] 57594.69 restore(), mouseup (970 970) (342 342)
[PG] 57594.73 restore(), ctrlKey detected, set skip to false, got false
[PG] 57594.74 ret(), skip is false
[PG] 57595.44 click()
Добавлено 07-10-2022 23:01:06
а может коду не нравится pg?: return link.className == "pg"
вот, я повыписывал то, что сумел вычислить в инспекторе
(касательно тех зон, в которые попадают все pg-ccылки,
но не попадают длинные тематические ссылки):
если ссылка в поисковых результатах:
верхний ряд pg-ссылок:
td.w100.vBottom
p.small
нижний ряд pg-ссылок:
div#pagination.nav
div.bottom_info
если ссылка в каком-то разделе:
верхний ряд pg-ссылок:
div.small
td.w100.vBottom.pad_2
нижний ряд pg-ссылок:
div#pagination.nav.clearfix
div.bottom_info.pad_2
Отредактировано austri (07-10-2022 23:01:06)
Отсутствует
с Ctrl
Это не так интересно, ведь с Ctrl открытие ссылки в активной вкладке работает.
Интереснее лог когда не работает, то есть после простого клика, без Ctrl.
Неужели совсем ничего?
Отсутствует
- на странице с data-адресом (из №147) кликаю на pg-ссылка
- открывается следующая (фоновая) вкладка
у которой адрес: about:logo
и название: (PNG Image, 300 x 236 pixels)
- в консоли: после фильтра по тексту [pg]
стерильная пустота
Отсутствует
может ли проблема быть в какой-то настройке из about:config?
может ли проблема быть в какой-то настройке из tab-mix-plus?
если верно предполагаю, у себя ты проверить не имеешь возможности (клик по pg-ссылке)
(в поисковых результатах точно нет, раз уж там требуется регистрация,
но если что - регистрация не нужна, чтобы просто открыть любой раздел)
я на всякий случай пробовал (безуспешно) лисе подсунуть временный userContent.css,
из которого поубирал почти всё, например:
a.pg { text-decoration: none !important; }
img {display: none !important;}
a:focus {text-decoration: none !important;}
a:hover {text-decoration: none !important;}
@-moz-document domain(rutracker.org){
a.postLink,
TD.nav.w100[style="padding-left: 8px;"],
и ещё тут десятки (упоминавшихся ранее) строк
{display: none !important;} }
Отсутствует
если верно предполагаю, у себя ты проверить не имеешь возможности (клик по pg-ссылке)
(в поисковых результатах точно нет, раз уж там требуется регистрация,
но если что - регистрация не нужна, чтобы просто открыть любой раздел)
Ну как, в поиске, конечно, нет, а так проверял.
Не в разделе (viewforum.php), а в топике (viewtopic.php).
И селекторы родительских элементов, которые ты выписал, посмотрел,
всё верно, если нужно уточнить через них, то годятся.
Но это всё неважно.
Раз по клику нет никакого лога совсем, то это значит (значило бы), что
не определяется даже вообще то, что произошёл mousedown на (любой) ссылке.
Но как такое может быть, если выделение в ссылках работает (работает же?),
а оно ведь на этом построено. Совершенно непонятно.
Хотя, есть такая странная мысль.
Вот отсюда (№138) пошла хотелка открывать немногие некоторые
ссылки в активной вкладке.
А в следующем посте я предложил «Вот, попробовал вписать Ctrl, и, для описанных, даже без Ctrl».
Может есть вероятность того, что здесь произошло недопонимание, и предложенный код
был воспринят не как очередная модификация кода для выделения в ссылках,
а как новый отдельный код.
То есть, код для выделения в ссылках так и остался, а этот предложенный
просто был добавлен следом.
Тогда между "этими двумя" кодами, конечно, возможен конфликт,
и даже с весьма похожими симптомами.
Отредактировано Dumby (09-10-2022 11:58:47)
Отсутствует
если выделение в ссылках работает (работает же?)
ну да
произошло недопонимание, и предложенный код был воспринят
в общем, видимо, всё так и произошло (приношу извинение за своё недопонимание)
я около часа перепроверял всё, что смог, и пока ничего плохого не обнаружил:
- текст внутри ссылок выделяется как надо
- ссылки открываются как надо (двумя способами)
у меня в файле click.js (в конце) было вот это:
/* attempt-2 to obtain: convenient selection of text in links */ (() => { var link, href, x, y, cssvar = "--selcolorlocker"; var ret = () => { link.setAttribute("href", href); link.style.removeProperty(cssvar); link.getAttribute("style") === "" && link.removeAttribute("style"); link = null; } var restore = e => { window.removeEventListener("mouseup", restore, true); window.removeEventListener("dragend", restore, true); e.screenX != x || e.screenY != y ? requestAnimationFrame(ret) : ret(); } var mousedown = e => { if (e.button || e.ctrlKey) return; link = e.target.closest(":-moz-any-link[href]"); if (link) { var w = e.view, sel = w.getSelection(); sel.isCollapsed || sel.removeAllRanges(); var dwu = w.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils); link.style.setProperty(cssvar, dwu.getVisitedDependentComputedStyle(link, "", "color")); href = link.getAttribute("href"); link.removeAttribute("href"); x = e.screenX; y = e.screenY; window.addEventListener("mouseup", restore, true); window.addEventListener("dragend", restore, true); } } gBrowser.addEventListener("mousedown", mousedown, true); window.addEventListener("unload", function unl() { window.removeEventListener("unload", unl); gBrowser.removeEventListener("mousedown", mousedown, true); }); })(); /* attempt to add direct opening (in current tab) (after click) of ru-tracker's pages (like: 1 or 2 or 3...) but keep not direct opening (in next back-ground tab) (after click) of ru-tracker's long links */ (() => { var link, href, x, y, cssvar = "--selcolorlocker"; var LOG = msg => Services.console .logStringMessage("[PG] " + Cu.now().toFixed(2) + " " + msg); var sip = Services.prefs.setIntPref; var pn = "extensions.tabmix.opentabforLinks"; var s1 = sip.bind(null, pn, 1); var set1 = (...args) => { s1(...args) LOG("set1(), Set pref to 1, got " + Services.prefs.getIntPref(pn)); } var check = () => { LOG('check(), link.className == "pg" is ' + (link.className == "pg")); return link.className == "pg"; } var click = e => { LOG("click()"); link.removeEventListener("click", click, true); e.preventDefault(); loadURI(link.href, link.ownerDocument.documentURIObject); link = null; } var ret = skip => { LOG("ret(), skip is " + skip); link.setAttribute("href", href); link.style.removeProperty(cssvar); link.getAttribute("style") === "" && link.removeAttribute("style"); skip ? link = null : link.addEventListener("click", click, true); } var restore = e => { LOG("restore(), " + e.type + " (" + e.screenX + " " + x + ") (" + e.screenY + " " + y + ")"); window.removeEventListener("mouseup", restore, true); window.removeEventListener("dragend", restore, true); if (e.screenX != x || e.screenY != y) return requestAnimationFrame(ret); var skip = true; if (e.type.startsWith("m")) { if (e.ctrlKey) { skip = false; LOG("restore(), ctrlKey detected, set skip to false, got " + skip); } else if (check()) { sip(pn, 0); requestAnimationFrame(set1); LOG("restore(), Set pref to 0, got " + Services.prefs.getIntPref(pn)); var ensureClick = e => { LOG("ensureClick(), pref value is " + Services.prefs.getIntPref(pn)); } window.addEventListener("click", ensureClick, true); setTimeout(() => window.removeEventListener("click", ensureClick, true), 300); } else LOG("restore(), not ctrlKey and not check() result, skip is " + skip); } ret(skip); } var mousedown = e => { if (e.button) return; link = e.target.closest(":-moz-any-link[href]"); if (link) { LOG("mousedown(), link detected"); e.ctrlKey && e.preventDefault(); var w = e.view, sel = w.getSelection(); sel.isCollapsed || sel.removeAllRanges(); var dwu = w.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils); link.style.setProperty(cssvar, dwu.getVisitedDependentComputedStyle(link, "", "color")); href = link.getAttribute("href"); link.removeAttribute("href"); x = e.screenX; y = e.screenY; window.addEventListener("mouseup", restore, true); window.addEventListener("dragend", restore, true); } } gBrowser.addEventListener("mousedown", mousedown, true); window.addEventListener("unload", function unl() { window.removeEventListener("unload", unl); gBrowser.removeEventListener("mousedown", mousedown, true); }); })();
Точно, мой косяк. Вместо loadURI(href, нужно loadURI(link.href,
- спасибо за твою сообразительность
- по возможности буду стараться поменьше тебя беспокоить, и на данный момент уточню только это:
есть ли способ? сделать так, чтобы после перезагрузки лисы
в каждой вкладке (на странице) выделениe текстa сохранялoсь
Отсутствует
есть ли способ? сделать так, чтобы после перезагрузки лисы
в каждой вкладке (на странице) выделениe текстa сохранялoсь
Если прикинуть чисто умозрительно, то это представляется мне
задачей эпических масштабов, поэтому я пас.
Отсутствует