VueJS не создается из-за обратного вызова Android Javascript WebView

#javascript #vue.js #kotlin

#javascript #vue.js #kotlin

Вопрос:

Я хотел бы иметь обратный вызов страницы WebView для моего приложения для Android. Я успешно сделал это, используя ванильную HTML-страницу. Когда я добавляю тот же код JavaScript в свое приложение VueJS, оно не хочет собираться и выдает ELIFECYCLE ошибку.

В моем коде Kotlin у меня есть следующее:

 binding.webView.addJavascriptInterface(JavaScriptInterface(), "Android")

private inner class JavaScriptInterface {
  fun showWallet(string: String) {
    AppPreference.PREFERENCE_SCREEN_TYPE = Constants.SCREEN_USER_DASHBOARD
    mainActivity.getNavController().navigate(R.id.action_placeOrder_to_userDashboardFragment)
   }
}
  

Android это мой объект JavaScript, который я объявил, и функция showWallet , которая перемещает пользователя к другому фрагменту.

В моем коде VueJS у меня есть следующее:

 let devicedUsed = this.$store.state.devicedUsed;
if (devicedUsed === 'apple'){
  window.webkit.messageHandlers.message.postMessage('backToWallet');
}else{ //is Android device
  Android.showWallet('backToWallet');
}
  

Приведенный выше обратный вызов работает без каких-либо проблем в ванильном HTML. Моя проблема в том, что приведенный выше код не создается, и я получаю сообщение об ошибке, которое Android не определено. Кажется, VueJS ищет Android , который определен только в коде Kotlin.

Как мне обойти эту проблему?

Ответ №1:

Используйте window. префикс, чтобы сообщить компилятору, что это глобальная переменная:

 // BEFORE:
Android.showWallet('backToWallet')

// AFTER:
window.Android.showWallet('backToWallet')