我正在Android WebView上加载以下页面: URL
这是已加载页面的概述。
我正在尝试在 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
我的问题是:我在这里想念什么?我该如何使该事件侦听器触发?