Comment appeler une fonction Kotlin à partir de JavaScript


Elizabeth Harper

J'essaie de remplir un TextViewemplacement situé à l'intérieur WebView(sous Android) avec un e-mail aléatoire généré à l' Kotlin functionaide de JavaScript, mais je n'ai trouvé aucune solution.

Mon Kotlin functionpour générer une adresse e-mail aléatoire

fun getSaltString(): String? {
    val SALTCHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
    val salt = StringBuilder()
    val rnd = Random()
    while (salt.length < 7) { // length of the random string.
        val index = (rnd.nextFloat() * SALTCHARS.length) as Int
        salt.append(SALTCHARS[index])
    }
    return salt.toString()
}

Et voici l'appel à la fonction ci-dessus en utilisant Kotlin getSaltString()+"@gmail.com"mais de quoi je ne sais pas comment l'appeler JavaScript?

Mon JavaScriptappel jusqu'à présent

myWebView.loadUrl("javascript:(function(){document.getElementById(\"user_email_login\").value = \"I don't know how to call @gmail.com\";\n})()");

Toute aide serait très appréciée. Merci d'avance:)

Tenfour04

Je n'ai pas le temps de tester cela, mais j'espère que c'est juste. Vous avez besoin d'une classe contenant vos fonctions que vous souhaitez pouvoir appeler depuis JS. Une instance de cette classe sera liée à votre WebView. Chaque fonction de la classe a besoin de l'annotation qui la @JavascriptInterfaceprécède.

J'ai rendu le contenu de votre fonction plus concis, juste à titre de conseil.

class WebAppInterface {

    @JavascriptInterface
    fun getSaltString(): String = buildString {
        val saltChars = ('A'..'Z').toList() + ('0'..'9').toList()
        repeat(7) {
            append(saltChars.random())
        }
    }

}

Ensuite, vous enregistrez une instance de cette classe avec la vue Web. Quel que soit le nom de chaîne que vous transmettez ici, vous ajouterez des préfixes aux appels dans votre JS :

myWebView.addJavascriptInterface(WebAppInterface(), "Android")
myWebView.loadUrl("javascript:(function(){document.getElementById(\"user_email_login\").value = Android.getSaltString() + \"@gmail.com\";\n})()");

Articles connexes


Appeler une fonction de suspension Kotlin à partir de Java

Gabriel Bauman J'ai une bibliothèque Kotlin que j'essaie d'appeler depuis Java. Je n'ai jamais travaillé avec Kotlin auparavant. La fonction de la bibliothèque Kotlin est la suivante : suspend fun decode(jwt: String): UsefulThing { // does a bunch of stuff