fix(pwa): BUG-005 chargement mobile via Cloudflare (SW network-first + no-cache)
CI / lint (push) Successful in 58s
CI / security (push) Successful in 40s
CI / test (push) Successful in 1m19s
CI / build (push) Successful in 37s
CI / e2e (push) Successful in 10m53s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s

This commit is contained in:
2026-09-11 17:13:16 -04:00
parent 4c4e415975
commit 7cf7d33b6d
10 changed files with 382 additions and 153 deletions
+36 -22
View File
@@ -488,34 +488,48 @@ function _initAIStatus() {
// PWA Service Worker Registration
// ---------------------------------------------------------------------------
function registerServiceWorker() {
if ("serviceWorker" in navigator) {
window.addEventListener("load", () => {
navigator.serviceWorker
.register("/sw.js")
.then((registration) => {
console.log("[PWA] Service Worker registered successfully:", registration.scope);
if (!("serviceWorker" in navigator)) return;
// Check for updates periodically
setInterval(() => {
registration.update();
}, 60000); // Check every minute
// Reload once when a new service worker takes control (guarded against
// loops). Only relevant when a worker was already controlling the page.
const hadController = !!navigator.serviceWorker.controller;
let refreshing = false;
navigator.serviceWorker.addEventListener("controllerchange", () => {
if (!hadController || refreshing) return;
refreshing = true;
window.location.reload();
});
// Handle service worker updates
registration.addEventListener("updatefound", () => {
const newWorker = registration.installing;
newWorker.addEventListener("statechange", () => {
if (newWorker.state === "installed" && navigator.serviceWorker.controller) {
// New service worker available
window.addEventListener("load", () => {
navigator.serviceWorker
.register("/sw.js")
.then((registration) => {
console.log("[PWA] Service Worker registered successfully:", registration.scope);
// Check for updates periodically.
setInterval(() => {
registration.update();
}, 60000); // Check every minute
// Handle service worker updates: activate the new worker immediately
// so the fresh (network-first) code is served on the next load.
registration.addEventListener("updatefound", () => {
const newWorker = registration.installing;
if (!newWorker) return;
newWorker.addEventListener("statechange", () => {
if (newWorker.state === "installed") {
if (navigator.serviceWorker.controller) {
newWorker.postMessage({ type: "SKIP_WAITING" });
showUpdateNotification();
}
});
}
});
})
.catch((error) => {
console.log("[PWA] Service Worker registration failed:", error);
});
});
}
})
.catch((error) => {
console.log("[PWA] Service Worker registration failed:", error);
});
});
}
function showUpdateNotification() {