Kotlin — Неперехваченная ошибка типа: X не является функцией — JavascriptInterface с WebViews

#android #kotlin #webview

#Android #kotlin #веб-просмотр

Вопрос:

У меня есть обратное приложение с файлом cshtml, который в основном используется для аутентификации.

Теперь в моем приложении для Android в Kotlin я использую WebView и JavascriptInterface для вызова нужного мне URL-адреса и для обратного вызова моего метода.

Есть полезные строки кода:

Активность входа в систему:

 val myWebView: WebView = findViewById(R.id.connexionWebview)
        myWebView.setWebViewClient(object : WebViewClient() {
            override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
                view.loadUrl(url)
                return false
            }
        })
        myWebView.settings.javaScriptEnabled = true
        myWebView.addJavascriptInterface(AuthenticatedHandler(this), "AndroidAuthenticatedManager")
        myWebView.loadUrl("HiddenURL")
  

AuthenticatedHandler.kt:

 class AuthenticatedHandler(private val mContext: Context): AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        @JavascriptInterface
        fun onAuthenticated(token: String, email: String, userId: Int) {
            val intent = Intent(this, Home::class.java)
            val extras = Bundle()
            extras.putString("token", token)
            startActivity(intent)
        }
    }
}`
  

У меня за спиной аутентифицированный.cshtml:

 AndroidAuthenticatedManager.onAuthenticated('@token.AccessToken', '@email', @userId);
  

И это ошибка, которую я получил:

 I/chromium: [INFO:CONSOLE(14)] "Uncaught TypeError: AndroidAuthenticatedManager.onAuthenticated is not a function", source: http://HidenURL:5000/Account/Authenticated (14)
  

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

Спасибо за ваше чтение, Танги.

Комментарии:

1. Есть идеи о том, как это исправить?

Ответ №1:

Я думаю, что @JavascriptInterface fun onAuthenticated() должно быть вне override fun onCreate() , а не внутри него.