Changeset 33886fb in Klonkt


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@…>

Location:
src
Files:
2 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
  • src/views/shell.ejs

    r1f01b99 r33886fb  
    314314<!-- Eigen custom media-embeds (YouTube/SoundCloud/Spotify) via de echte
    315315     player-API's + gedeelde mutual-exclusion registry met de site-speler. -->
    316 <script src="/assets/js/embed-player.js?v=3" defer></script>
     316<script src="/assets/js/embed-player.js?v=4" defer></script>
    317317<% if (site && site.enable_audio_player && audioTracks && audioTracks.length > 0) { %>
    318318  <script>window.PCMS_SITE_TRACKS = <%- JSON.stringify(audioTracks) %>;</script>
Note: See TracChangeset for help on using the changeset viewer.