Skip to content

Commit 4b1e0dc

Browse files
author
ScreenOperator Bot
committed
Fix: Hot-Reload koppelt WebView vom nativen Code ab
document.write()-basierter Hot-Reload loest KEINE echte Navigation aus, daher feuert Android's WebViewClient.onPageFinished() nicht erneut. Das bedeutet: window.onAndroidReady() wurde nach einem Hot-Reload nie wieder aufgerufen, wodurch neu deklarierte Top-Level-Variablen (u.a. currentModelId) nie ihren Wert aus der nativen Bridge erhielten - die Modellauswahl ging verloren und neu registrierte Modelle/Remote-Overrides wurden nicht geladen, bis die App komplett neu gestartet wurde. Fix: window.onAndroidReady() wird nach dem document.write-Ersatz manuell erneut aufgerufen, um den kompletten Init-Flow (Modellauswahl, Trial- State, alle Remote-Config-Fetches) nachzuholen. Kein nativer Code geaendert.
1 parent 5d3b69c commit 4b1e0dc

1 file changed

Lines changed: 23 additions & 0 deletions

File tree

index.html

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6061,6 +6061,29 @@
60616061
} catch (e) {
60626062
console.warn('[HotReload] document.write fehlgeschlagen, versuche location.reload()', e);
60636063
try { window.location.reload(); } catch (_) {}
6064+
return;
6065+
}
6066+
6067+
// document.write/close ist KEINE echte Navigation: Android's
6068+
// WebViewClient.onPageFinished() (der native Callback, der normalerweise
6069+
// window.onAndroidReady() und window.onTrialStateChanged() auslöst) feuert
6070+
// dabei nicht erneut. Die frisch neu deklarierten Top-Level-Variablen aus
6071+
// der neuen index.html (u.a. currentModelId) bekommen dadurch NIE ihren
6072+
// Wert aus der nativen Bridge zugewiesen - das UI wirkt "vom nativen Code
6073+
// abgekoppelt" (Modellauswahl verloren, neue Modelle fehlen), bis die App
6074+
// komplett neu gestartet wird und ein echter onPageFinished-Zyklus läuft.
6075+
//
6076+
// Die JS-Bridge (window.Android, siehe addJavascriptInterface) bleibt beim
6077+
// document.write-Ersatz erhalten, da sie am WebView-Objekt hängt, nicht am
6078+
// DOM. Wir können also onAndroidReady() manuell erneut anstoßen, um exakt
6079+
// den Init-Flow nachzuholen, den der native onPageFinished-Handler sonst
6080+
// ausgelöst hätte.
6081+
try {
6082+
if (typeof window.onAndroidReady === 'function') {
6083+
window.onAndroidReady();
6084+
}
6085+
} catch (e) {
6086+
console.warn('[HotReload] onAndroidReady() nach Reload fehlgeschlagen', e);
60646087
}
60656088
}
60666089

0 commit comments

Comments
 (0)