You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:15:03