Android[Kotlin] — ОШИБКА типа ошибки: [«Android»].showToast не является функцией

#javascript #android #kotlin #webview

Вопрос:

Я загружаю веб — страницу в webview с помощью WebChromeClient(). На веб — странице есть раскрывающийся список всякий раз, когда пользователь выбирает элемент из этого раскрывающегося списка, мне нужно показать тост. Для этого я следую официальному документу, который я реализовал так же, как сказано в документе. тем не менее, я получаю ошибку в консоли. «showToast-это не функция».

В Фрагменте:

 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val webSettings = webView.settings
    webSettings.javaScriptEnabled = true
    webSettings.domStorageEnabled = true
    webSettings.databaseEnabled = true
    webView.addJavascriptInterface(WebAppInterface(requireContext()), "Android")

    webView.webChromeClient = object : WebChromeClient() {
        override fun onConsoleMessage(consoleMessage: ConsoleMessage): Boolean {
            Log.i(TAG, consoleMessage.message())
            return true
        }

        override fun onProgressChanged(view: WebView?, newProgress: Int) {
            super.onProgressChanged(view, newProgress)
            if (newProgress == 100) {
                if (webView != null) {
                    webView.settings.builtInZoomControls = true
                    webView.settings.displayZoomControls = false
                    webView.loadUrl("javascript:loadMobileDashboard($data);")
                }
            }
        }
    }
    webView.loadUrl(url)
}
 

Интерфейс веб-приложения:

 class WebAppInterface(private val context: Context) {
    private val TAG = WebAppInterface::class.java.simpleName

    @JavascriptInterface
    fun showToast(toast: String) {
        Log.d(TAG, "showToast: $toast")
    }
}
 

Я попробовал несколько изменений и поискал об этом в Интернете, но ни одно решение не сработало. Пожалуйста, дайте мне знать, какую ошибку я здесь совершаю. Спасибо 🙂

Ответ №1:

Создайте html-страницу в папке «Ресурсы», скажем, с именем dropDown.html.

Скопируйте этот код в этот файл

 <input type="dropDown" value="Hello" onClick="showToastInWebView('strMsg')" />

<script type="text/javascript">
    function showToastInWebView(toast) {
        Android.showToast(toast);
    }
</script>
 

Теперь загрузите URL-адрес следующим образом

 myWebView.loadUrl("file:///android_asset/dropDown.html");
 

Примечание: WebView не вызывает функцию JS, в которую вы добавили мост, вам необходимо использовать свою собственную веб-страницу(в данном случае это dropDown.html), который действительно вызывает функцию, либо локальную(в нашем случае), либо в Интернете.