Changeset b08b5bc in Klonkt


Ignore:
Timestamp:
06/18/2026 04:30:54 PM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
85d9fda
Parents:
91d948c
Message:

SW: intercept navigations only — fix broken images after refresh

The service-worker fetch handler intercepted ALL GET requests with
fetch().catch(() => caches.match(request)). If the network fetch failed
briefly (e.g. during the daily SW version swap with skipWaiting+clients.claim),
caches.match for an uncached image returned undefined →
respondWith(undefined) → broken image on a normal refresh. Hard reload
bypasses the SW and therefore worked.

Now the SW only intercepts navigate requests (HTML) for an offline
fallback to the cached '/'; images/CSS/JS/media pass through natively.
CACHE_VERSION → v11 forces activation + cleanup of old caches.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/server.js

    r91d948c rb08b5bc  
    341341  res.set('Cache-Control', 'no-cache');
    342342  res.send(`
    343 const CACHE_VERSION = 'pcms-v10-' + new Date().toISOString().split('T')[0];
     343const CACHE_VERSION = 'pcms-v11-' + new Date().toISOString().split('T')[0];
    344344self.addEventListener('install', e => {
    345345  e.waitUntil(caches.open(CACHE_VERSION).then(c => c.addAll(['/'])));
     
    352352  self.clients.claim();
    353353});
     354// ALLEEN navigaties (HTML-pagina's) onderscheppen, voor een offline-fallback.
     355// Afbeeldingen, CSS, JS en /media NIET aanraken — laat de browser die native
     356// afhandelen. Anders kon een mislukte netwerk-fetch terugvallen op een lege
     357// cache-match (undefined) en zo een afbeelding "kapot" maken bij een gewone
     358// refresh (hard reload omzeilt de SW en werkte daarom wél).
    354359self.addEventListener('fetch', e => {
    355360  if (e.request.method !== 'GET') return;
    356   e.respondWith(fetch(e.request).catch(() => caches.match(e.request)));
     361  if (e.request.mode !== 'navigate') return; // alleen page-loads
     362  e.respondWith(
     363    fetch(e.request).catch(() => caches.match('/').then(r => r || Response.error()))
     364  );
    357365});
    358366  `);
Note: See TracChangeset for help on using the changeset viewer.