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:
+11
-2
@@ -638,13 +638,22 @@
|
||||
const src = alt.getAttribute("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):
|
||||
// nicht erneut ausführen — sonst gäbe es doppelte Deklarationen.
|
||||
if (schonGeladen.has(src)) continue;
|
||||
if (schonGeladen.has(src) && !istSprachDatei) continue;
|
||||
schonGeladen.add(src);
|
||||
await new Promise((fertig) => {
|
||||
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.onload = neu.onerror = fertig; // auch bei Fehler weitermachen
|
||||
document.body.appendChild(neu);
|
||||
|
||||
Reference in New Issue
Block a user