Test: laesst den Service Worker jetzt wirklich arbeiten
Die Luecke, durch die der Fehler von heute bis zum Benutzer durchgerutscht ist. Der Test hat 48 Seiten in einem echten Browser geoeffnet und nichts bemerkt -- weil er den Service Worker nie hat arbeiten lassen. Er war gruen und wertlos zugleich: Der entscheidende Weg wurde nicht begangen. Neu geprueft wird jetzt: - der Service Worker meldet sich an und wird aktiv - er darf tatsaechlich etwas abrufen (das war der kaputte Punkt) - dabei entsteht kein Richtlinien-Verstoss - sw.js traegt selbst KEINE Richtlinie, denn sie wuerde zu SEINER Ausserdem umgedreht: Ein Test verlangte fuer Nicht-Seiten ausdruecklich "default-src 'none'" -- und sicherte damit genau den Fehler ab, der die App lahmlegte. Er haette den naechsten Versuch, es richtig zu machen, als Fehler gemeldet. Jetzt wird geprueft, dass CSS, JavaScript, Bilder und der Service Worker KEINE Richtlinie bekommen. 22 Pruefungen gruen. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -134,9 +134,84 @@ try {
|
|||||||
fs.writeFileSync(pruefDatei, inhaltVorher, "utf8");
|
fs.writeFileSync(pruefDatei, inhaltVorher, "utf8");
|
||||||
}
|
}
|
||||||
|
|
||||||
const a2 = await fetch("http://127.0.0.1:4408/assets/css/main.css");
|
/* Umgedreht am 26.08.2026. Vorher verlangte dieser Test fuer
|
||||||
pruefe(" auch fuer Nicht-Seiten (CSS)",
|
Nicht-Seiten ausdruecklich "default-src 'none'" -- und hat damit
|
||||||
(a2.headers.get("content-security-policy") || "").includes("default-src 'none'"));
|
genau den Fehler abgesichert, der die App lahmgelegt hat.
|
||||||
|
|
||||||
|
Eine Richtlinie steuert, was ein DOKUMENT nachladen darf. Ein
|
||||||
|
Stylesheet laedt nichts nach, dort ist sie wirkungslos. Bei einem
|
||||||
|
Service-Worker-Skript ist sie das Gegenteil von wirkungslos: Sie
|
||||||
|
wird zur Richtlinie des Workers und kann ihn stilllegen.
|
||||||
|
|
||||||
|
Deshalb gilt jetzt: Richtlinie nur fuer HTML. Ein Test, der das
|
||||||
|
Gegenteil verlangt, haette den naechsten Versuch, es richtig zu
|
||||||
|
machen, als Fehler gemeldet. */
|
||||||
|
for (const pfad of ["/assets/css/main.css", "/assets/js/wd-core.js",
|
||||||
|
"/webdesign/sw.js", "/assets/img/favicon.png"]) {
|
||||||
|
const a = await fetch("http://127.0.0.1:4408" + pfad);
|
||||||
|
const r = a.headers.get("content-security-policy");
|
||||||
|
pruefe(` ${pfad}: keine Richtlinie`, !r, r ? "hat eine: " + r.slice(0, 40) : "keine");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =====================================================================
|
||||||
|
2c. DER SERVICE WORKER MUSS ARBEITEN KOENNEN
|
||||||
|
|
||||||
|
⚠️ Dieser Abschnitt fehlte, und genau durch die Luecke ist am
|
||||||
|
26.08.2026 ein Fehler bis zum Benutzer durchgerutscht:
|
||||||
|
|
||||||
|
Die erste Fassung setzte fuer alles, was keine Seite ist,
|
||||||
|
"default-src 'none'" -- mit dem Gedanken "kostet nichts, schadet
|
||||||
|
nie". Ein Service Worker uebernimmt aber die Richtlinie, die beim
|
||||||
|
Herunterladen SEINER EIGENEN Skriptdatei galt. Mit 'none' darf er
|
||||||
|
nichts mehr abrufen; jede Anfrage scheitert, und er zeigt seine
|
||||||
|
Offline-Seite. Fuer den Benutzer sah das aus wie ein Netzausfall --
|
||||||
|
bei laufendem Server und einer Seite, die im Browser tadellos lud.
|
||||||
|
|
||||||
|
Der Test von damals hat alle 48 Seiten geoeffnet und nichts bemerkt,
|
||||||
|
weil er den Service Worker nie hat arbeiten lassen. Eine Pruefung,
|
||||||
|
die den entscheidenden Weg auslaesst, ist gruen und wertlos zugleich.
|
||||||
|
===================================================================== */
|
||||||
|
console.log("\n2c. KANN DER SERVICE WORKER ARBEITEN?");
|
||||||
|
{
|
||||||
|
const kontext = await browser.newContext({ serviceWorkers: "allow" });
|
||||||
|
const sw = await kontext.newPage();
|
||||||
|
const verstoesse = [];
|
||||||
|
sw.on("console", (m) => {
|
||||||
|
if (/Content Security Policy|Refused to/i.test(m.text())) verstoesse.push(m.text().slice(0, 110));
|
||||||
|
});
|
||||||
|
|
||||||
|
await sw.goto("http://127.0.0.1:4408/webdesign/zugang.html", { waitUntil: "networkidle" });
|
||||||
|
await sw.waitForTimeout(3500);
|
||||||
|
|
||||||
|
const stand = await sw.evaluate(async () => {
|
||||||
|
const r = await navigator.serviceWorker.getRegistration("/webdesign/");
|
||||||
|
return { da: !!r, aktiv: !!(r && r.active) };
|
||||||
|
});
|
||||||
|
pruefe(" Service Worker meldet sich an", stand.da, stand.aktiv ? "aktiv" : "noch nicht aktiv");
|
||||||
|
|
||||||
|
/* Der Kern: Ein Service Worker, der nichts holen darf, ist genau der
|
||||||
|
Fehler von damals -- und von aussen nicht zu sehen. */
|
||||||
|
const holen = await sw.evaluate(async () => {
|
||||||
|
try {
|
||||||
|
const a = await fetch("/assets/css/webdesign.css", { cache: "no-store" });
|
||||||
|
return { ok: a.ok, laenge: (await a.text()).length };
|
||||||
|
} catch (e) {
|
||||||
|
return { ok: false, fehler: String(e).slice(0, 70) };
|
||||||
|
}
|
||||||
|
});
|
||||||
|
pruefe(" er darf auch etwas abrufen", holen.ok,
|
||||||
|
holen.ok ? holen.laenge + " Bytes" : holen.fehler);
|
||||||
|
|
||||||
|
pruefe(" dabei kein Richtlinien-Verstoss", verstoesse.length === 0, verstoesse[0] || "sauber");
|
||||||
|
|
||||||
|
/* Und die Skriptdatei selbst darf keine Richtlinie mitbekommen -- sie
|
||||||
|
wuerde sonst zur Richtlinie des Workers. */
|
||||||
|
const kopf = (await fetch("http://127.0.0.1:4408/webdesign/sw.js"))
|
||||||
|
.headers.get("content-security-policy");
|
||||||
|
pruefe(" sw.js traegt selbst KEINE Richtlinie", !kopf, kopf || "keine — richtig so");
|
||||||
|
|
||||||
|
await kontext.close();
|
||||||
|
}
|
||||||
|
|
||||||
console.log("\n3. GEGENPROBE: VERBIETET SIE AUCH WIRKLICH ETWAS?");
|
console.log("\n3. GEGENPROBE: VERBIETET SIE AUCH WIRKLICH ETWAS?");
|
||||||
/* Ohne diesen Abschnitt waere Teil 1 wertlos: Eine Richtlinie, die
|
/* Ohne diesen Abschnitt waere Teil 1 wertlos: Eine Richtlinie, die
|
||||||
|
|||||||
Reference in New Issue
Block a user