diff --git a/webdesign/diagnose.html b/webdesign/diagnose.html index 90274594..75d98923 100644 --- a/webdesign/diagnose.html +++ b/webdesign/diagnose.html @@ -151,38 +151,69 @@ code { background: rgba(127,208,232,.1); padding: .1rem .35rem; border-radius: 5 async function pruefen() { ziel.innerHTML = ""; - /* 1. Service Worker — der häufigste Grund für "es lädt die alte - Fassung". Er überlebt ein normales Neuladen. */ + /* Welche Fassung SOLL es sein? Steht im Service-Worker-Skript auf + dem Server. Ohne diesen Vergleich kann man nicht sagen, ob ein + gefuellter Zwischenspeicher gut oder schlecht ist -- die erste + Fassung meldete jeden Zwischenspeicher als "auffaellig", auch den + topaktuellen. Das ist Panikmache, kein Befund. */ + var sollFassung = null; + try { + var swTxt = await (await fetch("/webdesign/sw.js?diagnose=" + Date.now(), { cache: "no-store" })).text(); + var tref = swTxt.match(/CACHE_NAME\s*=\s*"([^"]+)"/); + if (tref) sollFassung = tref[1]; + } catch (e) { /* nicht schlimm, dann eben ohne Vergleich */ } + + /* 1. Service Worker. + + Aktiv zu sein ist der NORMALFALL -- die Seite ist als App + installierbar, dafuer braucht es ihn. Auffaellig ist er nur, wenn + er eine veraltete Fassung vorhaelt. */ + var swAktiv = 0; if ("serviceWorker" in navigator) { try { var regs = await navigator.serviceWorker.getRegistrations(); - var meine = regs.filter(function (r) { + swAktiv = regs.filter(function (r) { return (r.scope || "").indexOf("/webdesign") >= 0; - }); - if (!meine.length) { - zeile("gut", "Service Worker", "Keiner aktiv — Dateien kommen direkt vom Server."); - } else { - zeile("warn", "Service Worker aktiv", - meine.length + " registriert. Er kann alte Dateien ausliefern. " - + "Der Knopf unten meldet ihn ab."); - } - } catch (e) { - zeile("warn", "Service Worker", "Konnte nicht geprüft werden: " + e.message); - } - } else { - zeile("gut", "Service Worker", "Von diesem Browser nicht unterstützt — kein Problem."); + }).length; + } catch (e) { swAktiv = -1; } } - /* 2. Zwischenspeicher */ + /* 2. Zwischenspeicher -- und der Vergleich, auf den es ankommt. */ + var gefunden = []; if ("caches" in window) { try { var namen = await caches.keys(); - var meineC = namen.filter(function (n) { return n.indexOf("webdesign") >= 0; }); - if (!meineC.length) zeile("gut", "Zwischenspeicher", "Leer."); - else zeile("warn", "Zwischenspeicher", "Enthält: " + meineC.join(", ")); - } catch (e) { - zeile("warn", "Zwischenspeicher", "Nicht prüfbar: " + e.message); - } + gefunden = namen.filter(function (n) { return n.indexOf("webdesign") >= 0; }); + } catch (e) { gefunden = []; } + } + + var aktuell = !sollFassung || !gefunden.length || gefunden.indexOf(sollFassung) >= 0; + var veraltet = gefunden.filter(function (n) { return n !== sollFassung; }); + + if (swAktiv < 0) { + zeile("warn", "Service Worker", "Konnte nicht geprüft werden."); + } else if (!swAktiv) { + zeile("gut", "Service Worker", "Keiner aktiv — alles kommt direkt vom Server."); + } else if (aktuell && !veraltet.length) { + zeile("gut", "Service Worker", + "Aktiv und aktuell. Das ist so gewollt — dadurch lässt sich die Seite als App installieren."); + } else { + zeile("warn", "Service Worker", + "Aktiv, hält aber eine veraltete Fassung vor. Der Knopf unten setzt ihn zurück."); + } + + if (!("caches" in window)) { + zeile("gut", "Zwischenspeicher", "Wird von diesem Browser nicht genutzt."); + } else if (!gefunden.length) { + zeile("gut", "Zwischenspeicher", "Leer."); + } else if (aktuell && !veraltet.length) { + zeile("gut", "Zwischenspeicher", + "Aktuelle Fassung (" + gefunden.join(", ") + ")" + + (sollFassung ? " — stimmt mit dem Server überein." : ".")); + } else { + zeile("warn", "Zwischenspeicher", + "Veraltet: " + veraltet.join(", ") + + (sollFassung ? ". Der Server liefert " + sollFassung + "." : ".")); } /* 3. Ist der Server erreichbar? Ein Endpunkt, der ohne Anmeldung @@ -219,9 +250,10 @@ code { background: rgba(127,208,232,.1); padding: .1rem .35rem; border-radius: 5 try { var tok = sessionStorage.getItem("wd-vw-token"); if (tok) zeile("gut", "Anmeldung Verwaltung", "Ein Sitzungsschlüssel liegt vor."); - else zeile("warn", "Anmeldung Verwaltung", - "Keiner vorhanden — die Verwaltung fragt nach dem Zugangscode. Das ist normal, " - + "wenn die Seite zwischendurch geschlossen war."); + else zeile("gut", "Anmeldung Verwaltung", + "In diesem Tab keiner — das ist normal und KEIN Fehler. Der Schlüssel gilt " + + "je Tab, und er soll beim Schliessen der Seite ohnehin verschwinden. " + + "Die Verwaltung fragt dann einmal nach dem Zugangscode."); } catch (e) { zeile("warn", "Anmeldung", "Speicher nicht lesbar: " + e.message); }