Fix: i18n-Wörterbuch fehlte nach Rückkehr zur Startseite (seamless nav)

skripteUebernehmen() übersprang bereits geladene <script src>-Dateien,
um doppelte Deklarationen zu vermeiden. Für main.js/data-*.js richtig,
aber i18n-*.js setzt bei jedem Seitenbesuch NUR window.I18N_PAGE neu -
wurde die Datei beim ersten Besuch schon geladen (z.B. Startseite),
blieb sie beim Zurücknavigieren fälschlich leer (main.js hatte sie
zwischenzeitlich auf null zurückgesetzt). i18n-*.js-Dateien laufen jetzt
bei jedem Seitenbesuch garantiert erneut.
This commit is contained in:
2026-08-02 00:32:57 +02:00
parent a758b9a6b4
commit 3acb920541
+11 -2
View File
@@ -638,13 +638,22 @@
const src = alt.getAttribute("src"); const src = alt.getAttribute("src");
if (src) { if (src) {
// i18n-*.js-Dateien setzen nur window.I18N_PAGE neu (kein Zustand,
// keine Event-Listener) — die MÜSSEN bei jedem Besuch der Seite
// erneut laufen, sonst bleibt window.I18N_PAGE nach einem
// Zwischenstopp auf einer anderen Seite (die es zurückgesetzt hat)
// fälschlich leer, wenn man z.B. zur Startseite zurückkehrt.
const istSprachDatei = /\/i18n-[^/]+\.js$/.test(src);
// Schon vorhanden (z.B. main.js oder eine bereits geladene Datendatei): // Schon vorhanden (z.B. main.js oder eine bereits geladene Datendatei):
// nicht erneut ausführen — sonst gäbe es doppelte Deklarationen. // nicht erneut ausführen — sonst gäbe es doppelte Deklarationen.
if (schonGeladen.has(src)) continue; if (schonGeladen.has(src) && !istSprachDatei) continue;
schonGeladen.add(src); schonGeladen.add(src);
await new Promise((fertig) => { await new Promise((fertig) => {
const neu = document.createElement("script"); const neu = document.createElement("script");
neu.src = src; neu.src = src; // bei i18n-Dateien bewusst dieselbe URL — der Browser
// bedient das aus dem HTTP-Cache, das <script>-Element wird aber
// trotzdem neu eingefügt und läuft deshalb garantiert erneut.
neu.async = false; neu.async = false;
neu.onload = neu.onerror = fertig; // auch bei Fehler weitermachen neu.onload = neu.onerror = fertig; // auch bei Fehler weitermachen
document.body.appendChild(neu); document.body.appendChild(neu);