const CACHE_NAME = 'sb-v1.2'; // Change ce numéro pour forcer une mise à jour globale const ASSETS = [ './', // Racine './index.html', './style.css', './script.js', './manifest.json', './icon-192.png', './icon-512.png', '/favicon.ico' ]; // Installation : Mise en cache des ressources critiques self.addEventListener('install', (e) => { self.skipWaiting(); // Force le nouveau SW à prendre le contrôle immédiatement e.waitUntil( caches.open(CACHE_NAME).then((cache) => { console.log('SW: Mise en cache des ressources'); return cache.addAll(ASSETS); }) ); }); // Activation : Nettoyage des anciens caches self.addEventListener('activate', (e) => { e.waitUntil( caches.keys().then((keyList) => { return Promise.all(keyList.map((key) => { if (key !== CACHE_NAME) { console.log('SW: Suppression de l\'ancien cache', key); return caches.delete(key); } })); }) ); }); // Stratégie : Cache First, Network Fallback self.addEventListener('fetch', (e) => { e.respondWith( caches.match(e.request).then((response) => { // Retourne la réponse du cache si elle existe, sinon fait la requête réseau return response || fetch(e.request).then((networkResponse) => { // Optionnel : tu pourrais mettre en cache dynamiquement les nouveaux fichiers ici return networkResponse; }); }).catch(() => { // Si tout échoue (offline et pas en cache), tu peux retourner une page d'erreur console.log('SW: Ressource non trouvée'); }) ); });