fix(tracker): 4-й хук — polling по .para-pill.active
Если ни bubble, ни capture, ни setParaTab-patch не сработали (например, страница использует другой механизм навигации), наблюдаем DOM раз в 500мс на изменение класса .active у пилюли. Когда активная пилюля меняется — фиксируем визит. Это самый robust способ: работает независимо от событий, функций и библиотек страницы. Стоит копейки — один querySelector в 500мс.
This commit is contained in:
@@ -283,6 +283,21 @@
|
|||||||
if (typeof window.setParaTab === 'function' && window.setParaTab.__tbPatched) clearInterval(ivl);
|
if (typeof window.setParaTab === 'function' && window.setParaTab.__tbPatched) clearInterval(ivl);
|
||||||
if (++tries > 20) clearInterval(ivl);
|
if (++tries > 20) clearInterval(ivl);
|
||||||
}, 100);
|
}, 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) ─────── */
|
/* ── 8. Inject styling for read-pills (subtle green dot) ─────── */
|
||||||
|
|||||||
Reference in New Issue
Block a user