Files
mabibli/MaBibli.Client/wwwroot/js/mise-a-jour.js
T
mathieu dbb103f6db - Ajout d'un bouton pour forcer la mise à jour (si coupure internet pdt le dl, il faut tout désinstaller et re-instalter...).
- Pour les grandes bibli, ajouter un visuel que l'appli est en train de charger les données en cache
2026-09-10 17:58:27 +02:00

43 lines
2.7 KiB
JavaScript

// Enregistrement du service worker — comportement par défaut de Blazor : un nouveau worker
// attend que tous les onglets de l'application soient fermés avant de prendre la main. Pas de
// SKIP_WAITING, pas de rechargement forcé, pas de bandeau : la mise à jour a lieu au prochain
// lancement de l'application, silencieusement.
//
// ⚠️ Revenu en arrière le 2026-09-10 : le mécanisme précédent (application automatique dans les
// 10 premières secondes, sinon bandeau « Mettre à jour ») ne se montrait pas fiable en pratique
// (constaté sur l'application installée, PC comme téléphone : la version affichée dans « À
// propos » — qui vient d'un appel au serveur, donc toujours à jour — changeait sans que le reste
// de l'application suive). Le comportement par défaut est plus simple à raisonner ; s'il rebloque
// comme en août 2026, le correctif portera sur un diagnostic visible avant de complexifier à
// nouveau ce fichier.
//
// Ce qui reste, et pourquoi :
// 1. `navigator.serviceWorker` n'existe pas en contexte non sécurisé (http sur une IP locale).
// L'appeler sans vérification lève une TypeError qui casse le script — et fait croire à un
// défaut de la PWA alors que c'est le contexte qui n'est pas éligible.
// 2. Chemin ABSOLU, et scope explicite. `register('service-worker.js')` se résout contre l'URL
// du DOCUMENT et non contre <base href="/"> : ouvrir l'application sur une route profonde
// (/souhaits, /livres/3) visait /souhaits/service-worker.js, que le serveur ne sert pas —
// l'enregistrement échouait alors silencieusement, et avec lui tout le hors-ligne.
(function () {
'use strict';
if (!('serviceWorker' in navigator)) {
// Cas normal en http sur une IP de réseau local : rien à signaler à l'utilisateur,
// l'application fonctionne, elle n'est simplement pas installable ni hors-ligne.
console.info('Service worker indisponible (contexte non sécurisé ou navigateur sans support).');
return;
}
// updateViaCache: 'none' — sans lien avec le comportement d'application (ci-dessus) : ceci
// évite seulement qu'un cache HTTP intermédiaire masque une nouvelle version du script lui-
// même, y compris service-worker-assets.js qu'il importe.
navigator.serviceWorker.register('/service-worker.js', { scope: '/', updateViaCache: 'none' })
.catch(function (erreur) {
// Ne jamais laisser cet échec passer inaperçu : sans service worker, l'application
// ne démarre pas hors-ligne, et le cache IndexedDB ne sert alors à rien.
console.error("Échec de l'enregistrement du service worker :", erreur);
});
})();