HTML输入上的addEventListener在Android WebView中不起作用

时间:2018-10-29 10:40:58

标签: javascript android kotlin android-webview addeventlistener

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

这是已加载页面的概述。

The page loaded on a 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:名称:undefined,消息:ED

我的问题是:我在这里想念什么?我该如何使该事件侦听器触发?

0 个答案:

没有答案