From 4f2fe3045c68ec92343e399ebe9340b1cf3b9c2b Mon Sep 17 00:00:00 2001 From: Timo <6156589+Shik3i@users.noreply.github.com> Date: Wed, 22 Apr 2026 10:55:54 +0200 Subject: [PATCH] Fix SPA video element recycling resilience --- extension/content.js | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/extension/content.js b/extension/content.js index 636ad18..3223f91 100644 --- a/extension/content.js +++ b/extension/content.js @@ -162,13 +162,24 @@ }); } + const handlePlay = () => reportEvent('play'); + const handlePause = () => reportEvent('pause'); + const handleSeeked = () => reportEvent('seek'); + + let lastVideoSrc = null; + function setupListeners() { const video = findVideo(); - if (video && !video.dataset.koalaAttached) { - video.addEventListener('play', () => reportEvent('play')); - video.addEventListener('pause', () => reportEvent('pause')); - video.addEventListener('seeked', () => reportEvent('seek')); + if (video) { + video.removeEventListener('play', handlePlay); + video.removeEventListener('pause', handlePause); + video.removeEventListener('seeked', handleSeeked); + + video.addEventListener('play', handlePlay); + video.addEventListener('pause', handlePause); + video.addEventListener('seeked', handleSeeked); video.dataset.koalaAttached = 'true'; + lastVideoSrc = video.currentSrc || video.src; } } @@ -179,8 +190,12 @@ function checkVideo() { lastMutate = Date.now(); const video = findVideo(); - if (video && !video.dataset.koalaAttached) { - console.log('KoalaSync: New video detected via navigation.'); + if (!video) return; + + const currentSrc = video.currentSrc || video.src; + + if (!video.dataset.koalaAttached || (lastVideoSrc && currentSrc && lastVideoSrc !== currentSrc)) { + console.log('KoalaSync: Video element attached or recycled.'); setupListeners(); } }