addEventListener для ввода HTML не работает в Android WebView - PullRequest
0 голосов
/ 29 октября 2018

Я загружаю следующую страницу в 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: Имя: не определено, сообщение: ED

Мой вопрос: что мне здесь не хватает? Как я могу сделать так, чтобы этот триггер слушателя событий вызывал?

...