Changeset 8d43aa1 in Klonkt


Ignore:
Timestamp:
06/20/2026 04:39:28 AM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
8ab20b6
Parents:
e056e56
Message:

fix(player): prewarm hidden YT player (autoplay within gesture)

The YT player was only created on click (cold) → by the time it was ready
the click gesture had expired → YouTube blocked autoplay (flaky: only worked
if the player happened to be warm). Now embed-player prewarms the player as
soon as an audio-only YT embed/album renders
(pcmsAudioPlayer.prewarmYouTube), so the first click falls within the
gesture. busters audio-player.js?v=26, embed-player.js?v=15.

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

Location:
src
Files:
3 edited

Legend:

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

    re056e56 r8d43aa1  
    982982  }
    983983
     984  // Maak de verborgen YT-speler vast aan (zonder iets te spelen), zodat 'ie bij de
     985  // eerste klik al klaar staat → loadVideoById valt dan binnen de user-gesture en
     986  // YouTube's autoplay-policy blokkeert het niet.
     987  function prewarmYouTube() { try { ensureYT(); } catch (e) {} }
     988
    984989  window.pcmsAudioPlayer = {
    985     setQueue, play, pause, next, prev, close, openSheet, closeSheet, playYouTube, playYouTubeList,
     990    setQueue, play, pause, next, prev, close, openSheet, closeSheet, playYouTube, playYouTubeList, prewarmYouTube,
    986991    isPlaying: () => isPlaying,
    987992    currentTrack: () => queue[currentIndex] || null,
  • src/assets/js/embed-player.js

    re056e56 r8d43aa1  
    243243      const art0 = el.querySelector('.pcms-embed-art');
    244244      if (art0) { art0.style.backgroundImage = `url('${ytThumb}')`; art0.classList.add('has-art'); }
     245      // Speler vast aanmaken → eerste klik valt binnen de user-gesture (autoplay).
     246      if (window.pcmsAudioPlayer && window.pcmsAudioPlayer.prewarmYouTube) window.pcmsAudioPlayer.prewarmYouTube();
    245247      // Haal de echte titel op (server-proxy, want YT-oEmbed heeft geen CORS) en
    246248      // toon 'm i.p.v. "YouTube".
     
    445447    countEl.textContent = ids.length + ' track' + (ids.length === 1 ? '' : 's');
    446448    if (coverImg) coverImg.src = thumb(ids[0]);
     449    // Speler vast aanmaken → eerste klik valt binnen de user-gesture (autoplay).
     450    if (window.pcmsAudioPlayer && window.pcmsAudioPlayer.prewarmYouTube) window.pcmsAudioPlayer.prewarmYouTube();
    447451
    448452    olEl.innerHTML = ids.map((id, i) =>
  • src/views/shell.ejs

    re056e56 r8d43aa1  
    300300     ?v=N — cache-buster: bump bij elke audio-player.js wijziging zodat
    301301     Cloudflare (max-age=1y) niet de oude versie blijft serveren. -->
    302 <script src="/assets/js/audio-player.js?v=25"></script>
     302<script src="/assets/js/audio-player.js?v=26"></script>
    303303<!-- Eigen custom media-embeds (YouTube/SoundCloud/Spotify) via de echte
    304304     player-API's + gedeelde mutual-exclusion registry met de site-speler. -->
    305 <script src="/assets/js/embed-player.js?v=14" defer></script>
     305<script src="/assets/js/embed-player.js?v=15" defer></script>
    306306<% if (site && site.enable_audio_player && audioTracks && audioTracks.length > 0) { %>
    307307  <script>window.PCMS_SITE_TRACKS = <%- JSON.stringify(audioTracks) %>;</script>
Note: See TracChangeset for help on using the changeset viewer.