- Pour les grandes bibli, ajouter un visuel que l'appli est en train de charger les données en cache
43 lines
2.7 KiB
JavaScript
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);
|
|
});
|
|
})();
|