fix(tracker): 4-й хук — polling по .para-pill.active

Если ни bubble, ни capture, ни setParaTab-patch не сработали (например,
страница использует другой механизм навигации), наблюдаем DOM раз в
500мс на изменение класса .active у пилюли. Когда активная пилюля
меняется — фиксируем визит.

Это самый robust способ: работает независимо от событий, функций и
библиотек страницы. Стоит копейки — один querySelector в 500мс.
This commit is contained in:
Maxim Dolgolyov
2026-05-27 17:47:33 +03:00
parent 1e1c0e95f7
commit dd7daa7d7a
+15
View File
@@ -283,6 +283,21 @@
if (typeof window.setParaTab === 'function' && window.setParaTab.__tbPatched) clearInterval(ivl);
if (++tries > 20) clearInterval(ivl);
}, 100);
// Hook 4: polling — наблюдаем за классом .active на пилюлях.
// Если кто-то поменял активный параграф (через клик, через JS вызов
// setParaTab, через любой механизм) — мы это поймаем за 500мс и зафиксируем.
// Самый robust способ; не зависит ни от событий, ни от наличия функций.
let lastActivePara = null;
setInterval(() => {
const active = document.querySelector('.para-pill.active[data-para]');
if (!active) return;
const para = active.dataset.para;
if (para && para !== lastActivePara) {
if (lastActivePara !== null) console.log('[tracker] активный параграф изменился на', para);
lastActivePara = para;
recordParaVisit(para);
}
}, 500);
}
/* ── 8. Inject styling for read-pills (subtle green dot) ─────── */