Я загружаю следующую страницу в 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: Имя: не определено, сообщение: ED
Мой вопрос: что мне здесь не хватает? Как я могу сделать так, чтобы этот триггер слушателя событий вызывал?