Comment appeler une fonction Kotlin à partir de JavaScript
J'essaie de remplir un TextView
emplacement situé à l'intérieur WebView
(sous Android) avec un e-mail aléatoire généré à l' Kotlin
function
aide de JavaScript, mais je n'ai trouvé aucune solution.
Mon Kotlin
function
pour 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 JavaScript
appel 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:)
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 @JavascriptInterface
pré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})()");