88 votes

Comment obtenir la valeur de retour de javascript dans WebView d'Android ?

Je veux obtenir une valeur de retour de Javascript dans Android. Je peux le faire avec l'iPhone, mais je ne peux pas avec Android. J'ai utilisé loadUrl, mais il est retourné vide au lieu d'un objet. Quelqu'un peut m'aider ?

87voto

Kirill Kulakov Points 1975

Identique Keith mais réponse plus courte

webView.addJavascriptInterface(this, "android");
webView.loadUrl("javascript:android.onData(functionThatReturnsSomething)");

Et implémentez la fonction

@JavascriptInterface
public void onData(String value) {
   //.. do something with the data
}

N'oubliez pas de supprimer le onData de la liste proguard (si vous avez activé proguard)

64voto

Felix Khazin Points 906

Voici un hack sur la façon dont vous pouvez l'accomplir :

Ajouter ce client à votre WebView :

final class MyWebChromeClient extends WebChromeClient {
        @Override
        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
            Log.d("LogTag", message);
            result.confirm();
            return true;
        }
    }

Maintenant, dans votre appel javascript, faites :

webView.loadUrl("javascript:alert(functionThatReturnsSomething)");

Maintenant, dans l'appel onJsAlert "message" contiendra la valeur retournée.

21voto

CommonsWare Points 402670

Utilisez addJavascriptInterface() pour ajouter un objet Java à l'environnement Javascript. Demandez à votre Javascript d'appeler une méthode sur cet objet Java pour fournir sa "valeur de retour".

10voto

David Points 620

Sur l'API 19+, la meilleure façon de le faire est d'appeler assessJavascript sur votre WebView :

webView.evaluateJavascript("foo.bar()", new ValueCallback<String>() {
    @Override public void onReceiveValue(String value) {
        // value is the result returned by the Javascript as JSON
    }
});

Réponse connexe avec plus de détails : https://stackoverflow.com/a/20377857

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X