Android Jetpack Compose中WebView加载URL重定向后报错如何解决
问题诱因
触发该报错的核心原因是WebView基础配置缺失,具体分为4点:
- 未启用JavaScript支持:你仅添加了
SetJavaScriptEnabled的权限忽略注解,没有实际开启WebView的JavaScript执行权限,当前绝大多数前端页面(包括你要加载的登录页)都依赖JavaScript完成页面渲染、重定向逻辑,未开启会直接导致页面加载失败。 - 明文HTTP请求拦截:Android 9及以上系统默认禁止明文HTTP请求,你加载的目标地址是HTTP协议,未适配配置的情况下请求会被系统直接拦截。
- 混合内容与存储权限缺失:如果重定向后存在HTTP/HTTPS混合内容请求,默认WebView会拦截这类请求;同时你要加载的单页应用依赖DOM存储、本地缓存功能完成状态传递,默认WebView未开启该配置,会导致登录页重定向后状态丢失触发报错。
- 代码硬编码问题:你在
factory和update回调中硬编码了加载地址,没有用到传入的urlToRender参数,会导致实际加载地址和预期不符。
解决方案
按如下方式修改你的WebPageScreen实现:
@SuppressLint("SetJavaScriptEnabled") @Composable fun WebPageScreen(urlToRender: String) { AndroidView( factory = { WebView(it).apply { layoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) webViewClient = WebViewClient() // 开启JavaScript支持 settings.javaScriptEnabled = true // 开启DOM存储支持 settings.domStorageEnabled = true // 允许加载HTTP/HTTPS混合内容 settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW // 加载传入的目标地址 loadUrl(urlToRender) } }, update = { it.loadUrl(urlToRender) } ) }
同时在你的AndroidManifest.xml的application节点添加如下配置,允许明文HTTP请求:
android:usesCleartextTraffic="true"
内容的提问来源于stack exchange,提问作者SARRAN N
相关产品推荐
相关产品推荐

