Orlando
07/09/2025, 10:29 PMnavigator.evaluateJavaScript
method to send a token and other information from the native app to the WebView on iOS, but it does not work on Android. Here's some sample code:
@Composable
fun MyWebViewScreen(webUrl: String) {
val webViewState =
rememberWebViewState("<https://www.mysite.com>")
val webViewNavigator = rememberWebViewNavigator()
val jsBridge = rememberWebViewJsBridge(webViewNavigator)
val token by dataStore.getUserToken().collectAsState(initial = null)
LaunchedEffect(Unit) {
initWebView(webViewState)
initJsBridge(jsBridge)
}
LaunchedEffect(
webViewState.loadingState,
token,
) {
if (webViewState.loadingState == LoadingState.Finished && token != null) {
val authMessage = {
"options": "userAuth",
"token": "$token",
}
webViewNavigator.evaluateJavaScript("window.postMessage($authMessage, '*');")
}
}
Column(Modifier.fillMaxSize()) {
WebView(
state = webViewState,
modifier = Modifier
.padding(WindowInsets.statusBars.asPaddingValues())
.fillMaxSize(),
navigator = webViewNavigator,
webViewJsBridge = jsBridge,
)
}
}
fun initWebView(webViewState: WebViewState) {
webViewState.webSettings.apply {
zoomLevel = 1.0
isJavaScriptEnabled = true
logSeverity = KLogSeverity.Debug
allowFileAccessFromFileURLs = true
allowUniversalAccessFromFileURLs = true
androidWebSettings.apply {
allowFileAccess = true
isAlgorithmicDarkeningAllowed = true
domStorageEnabled = true
}
}
}
fun initJsBridge(webViewJsBridge: WebViewJsBridge) {
webViewJsBridge.register(GreetJsMessageHandler())
}
does anybody have any experience/workaround for Android? thanks!