首页 > 解决方案 > HTML 输入上的 addEventListener 在 Android WebView 中不起作用

问题描述

我正在 Android WebView 上加载以下页面: URL

这是加载页面的概述。

在 WebView 上加载的页面

我正在尝试在RESET按钮上添加一个点击监听器。这个按钮没有id,但有一个name='resetbutton',所以我尝试使用 来获取它的引用document.getElementsByName('resetbutton')[0],正如您在上面的屏幕截图中看到的那样,它应该可以工作。

问题是,当我将事件侦听器附加到输入时,它不会触发。这是我的客户代码:

mWebview.settings.apply {
    javaScriptEnabled = true
    domStorageEnabled = true
}
WebView.setWebContentsDebuggingEnabled(true)
mWebview.webViewClient = object : WebViewClient() {
    override fun onPageFinished(view: WebView?, url: String?) {
        super.onPageFinished(view, url)
        mWebview.evaluateJavascript("javascript:document.getElementsByName('resetbutton')[0].addEventListener('click', function() {\n" +
            "   Android.onSubmit('CLICK', 'ED');});") {
            Toast.makeText(this@GuestBookActivity, "Got $it", Toast.LENGTH_LONG).show()
        }
    }
}
mWebview.addJavascriptInterface(GuestBookWebInterface(this), "Android")
mWebview.loadUrl("http://users4.smartgb.com/g/g.php?a=s&i=g44-71854-e8")

GuestBookWebInterface.kt

class GuestBookWebInterface(private val mContext: Context) {
    @JavascriptInterface
    fun onSubmit(name: String, message: String) {
        Log.i("webhook", "Name: $name, message: $message")
    }
}

我运行应用程序,点击了 RESET 按钮,但在我正在寻找的日志中看不到 webhook 条目。我尝试在页面主体上进行简单的可见更改(例如更改其背景颜色)并且它起作用了。

我想也许由于某种原因没有附加事件侦听器。所以接下来我尝试了这个:

mWebview.evaluateJavascript("javascript:Android.onSubmit(document.getElementsByName('resetbutton')[0], 'ED');\n" +
                        "    document.getElementsByName('resetbutton')[0].addEventListener('click', function() {\n" +
                        "        Android.onSubmit('CLICK', 'ED');\n" +
                        "    });")

关键是要确保对输入按钮的引用不是undefined. 我的假设是有效的,参考确实undefined存在。当我现在运行应用程序时,我可以在控制台上看到这个日志:

webhook:名称:未定义,消息:ED

我的问题是:我在这里缺少什么?我怎样才能让这个事件监听器触发?

标签: javascriptandroidkotlinandroid-webviewaddeventlistener

解决方案


推荐阅读