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

Kotlin中WebView无法加载网页、执行JS填表单点按钮无响应如何解决

问题原因及修复方案

核心错误点

  • JS功能未实际开启:你写的webViewLogin.settings.javaScriptEnabled、webViewLogin.settings.domStorageEnabled仅为读取属性值的操作,没有赋值为true,等同于未开启JS权限,注入的JS代码完全无法执行。
  • WebViewClient设置时机错误:你在btnLogin的点击回调中才给WebView设置WebViewClient,但页面在Activity初始化时就已经调用loadUrl完成加载了,首次加载的回调完全不会触发你写的自动填充逻辑。
  • 注入的JS代码存在语法和逻辑问题:
    1. 账号、密码赋值语句后的null缺少分号分隔,会直接抛出JS语法错误
    2. getElementsByClassName返回的是匹配元素的集合,需要取下标为0的首个元素才能调用click()方法,直接对集合调用方法完全无效
  • JS执行方式不规范:Android 4.4及以上版本推荐使用evaluateJavascript执行JS代码,比loadUrl兼容性更高,也不会触发不必要的页面刷新。

修正后代码

val webViewLogin = findViewById<WebView>(R.id.webViewLogin)
// 提前配置WebView参数
webViewLogin.settings.apply {
    javaScriptEnabled = true
    domStorageEnabled = true
}
// 提前设置WebViewClient,标记页面加载状态
var isPageLoaded = false
webViewLogin.webViewClient = object : WebViewClient() {
    override fun onPageStarted(view: WebView, url: String, favicon: Bitmap?) {
        println("Page loading...")
        isPageLoaded = false
    }

    override fun onPageFinished(view: WebView, url: String) {
        isPageLoaded = true
        println(webViewLogin.title.toString())
    }
}
// 加载目标页面
webViewLogin.loadUrl("https://mail.metropolitan.ac.rs/?loginOp=logout")

// StrictMode放行仅用于本地调试,线上版本禁止使用
val policy = ThreadPolicy.Builder().permitAll().build()
StrictMode.setThreadPolicy(policy)

btnLogin.setOnClickListener {
    // 确保页面加载完成后再执行JS
    if (!isPageLoaded) return@setOnClickListener
    // 使用evaluateJavascript执行JS
    webViewLogin.evaluateJavascript("""
        (function() {
            document.getElementById('username').value = 'myUsername';
            document.getElementById('password').value = 'myPassword';
            document.getElementsByClassName('ZLoginButton DwtButton')[0].click();
        })()
    """.trimIndent(), null)
}

注意:如果目标页面存在动态渲染的情况,可在JS代码中适当增加延迟执行逻辑,避免元素还未渲染完成就执行操作。

内容的提问来源于stack exchange,提问作者Nikola

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:27:06