#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), который действительно вызывает функцию, либо локальную(в нашем случае), либо в Интернете.