Changeset 33886fb in Klonkt for src/assets


Ignore:
Timestamp:
06/15/2026 03:56:37 AM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
6117035
Parents:
1f01b99
Message:

fix: site player now also pauses fallback embeds (mutual exclusion both ways)

The registry already handled mutual exclusion for custom players (API loaded),
but fallback iframes (ad-blocker blocks the API) didn't register themselves:
the site player couldn't stop them -> double audio. A cross-origin iframe
can't be paused via API, so we now register the fallback in the registry with
a pause() that reloads the iframe WITHOUT autoplay (= stops it, remains
restartable). Result: starting an embed pauses the site player, and starting
the site player stops the embed. embed-player.js v=3 -> v=4.

Co-Authored-By: Claude <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/assets/js/embed-player.js

    r1f01b99 r33886fb  
    260260      el.innerHTML = '';
    261261      el.appendChild(iframe);
     262
     263      // Mutual exclusion óók voor de fallback-iframe. Een cross-origin iframe
     264      // kunnen we niet via een API pauzeren, dus 'pauze' = herladen ZONDER
     265      // autoplay (= stopt het geluid, speler blijft zichtbaar/herstartbaar).
     266      // We registreren 'm als actief: nu (= gebruiker start de embed) pauzeert de
     267      // site-speler/andere embeds; en als de site-speler later start, pauzeert de
     268      // registry deze fallback.
     269      self.pause = function () {
     270        try {
     271          const noAuto = fb.src
     272            .replace(/([?&])(?:autoplay=1|auto_play=true)(&|$)/gi, '$1')
     273            .replace(/[?&]$/, '');
     274          if (iframe.src === noAuto) {
     275            // src ongewijzigd (bv. Spotify zonder autoplay) → forceer een reload
     276            iframe.src = 'about:blank';
     277            setTimeout(() => { try { iframe.src = noAuto; } catch (e) {} }, 30);
     278          } else {
     279            iframe.src = noAuto;
     280          }
     281        } catch (e) {}
     282      };
     283      registry().setActive(self);
    262284    }
    263285
Note: See TracChangeset for help on using the changeset viewer.