web-dev-qa-db-fra.com

Passage de données d'une classe Java à l'affichage Web html

Je charge ci-dessous html dans ma webView 

https://mail-attachment.googleusercontent.com/attachment/?ui=2&ik=25c0c425c6&view=att&th=138db54ff27ad34b&attid=0.1&disp=inline&realattid=f_h5ahtmbe0&safe=1&zw&saduie=AG9B_P9YNooGjsk_jLefLptQ9q15&sadet=1343790299575&sads=-yBVsLKP_2mh7zMfYLCF7sL1u-w

Maintenant, ce que je veux faire est de remplir la zone de texte dans la variable html provenant de ma variable de classe Java, puis d'appuyer automatiquement sur submit.

Mais je n'ai aucune idée de comment faire cela.

Toute pensée sera appréciée. 

18
User

Tout d'abord, votre URL semble non disponible.

Si vous souhaitez effectuer un échange de données entre une application Android et votre application Web/page Web, vous pouvez le faire via javascript.

Voici un exemple du site officiel Android:

Créez une classe comme celle-ci:

public class JavaScriptInterface {
    Context mContext;

    /** Instantiate the interface and set the context */
    JavaScriptInterface(Context c) {
        mContext = c;
    }

    /** Show a toast from the web page */
    @JavascriptInterface
    public void showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }
}

Dans votre WebView:

WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");

Dans votre page web:

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />

<script type="text/javascript">
    function showAndroidToast(toast) {
        Android.showToast(toast);
    }
</script>

Si vous voulez transmettre quelque chose à votre page Web, appelez simplement la fonction javascript correspondante:

String str = "xxx";
myWebView.loadUrl("javascript:xxx('"+str+"')");

Voici la référence: http://developer.Android.com/guide/webapps/webview.html

41
hungr

J'ajouterais que le chargement de la fonction javascript devrait être effectué lors du chargement du code HTML. Pour contrôler cela, vous pouvez utiliser les éléments suivants:

webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("file:///Android_asset/test.html");
webview.setWebViewClient(new WebViewClient(){
    public void onPageFinished(WebView view, String url){   
        webview.loadUrl("javascript:init('" + theArgumentYouWantToPass + "')");
    }           
});

test.html

<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
</head>

<body>
hola
adios
</body>

<script type="text/javascript">

    function init(val){
// Do whatever you want with your parameter val
    }
</script>
</html>

Extrait de Uncaught ReferenceError: myFunction n'est pas défini à la valeur null: 1 exception Android dans webview

17
AlvaroSantisteban

Faites attention pour appeler une fonction javascript de cette manière, la variable str peut inclure des guillemets simples ou d’autres caractères spéciaux.

String str = "xxx";
myWebView.loadUrl("javascript:xxx('"+str+"')");

Je suggère d'encoder str en base64 et de le décoder du côté javascript.

  • Android

    String str = "xxx";
    //encode in base64
    String base64Str = Base64.encodeToString(str.getBytes(), Base64.NO_WRAP);
    myWebView.loadUrl("javascript:xxx('"+ base64Str +"')");
    
  • Javascript

    function xxx(val) {
        //decode from base64
        var str = atob(data)
    }
    
2
xfdai

Activez simplement DomStorage et écrivez "var x =" dans la chaîne:

webview.getSettings().setJavaScriptEnabled(true);
web.getSettings().setDomStorageEnabled(true);

webview.loadUrl(urlString);
webview.setWebViewClient(new WebViewClient(){

public void onPageFinished(WebView view, String url){  
   super.onPageFinished(view, url);
   String js = "javascript:var x =document.getElementById('username').value = '"+user+"';var y=document.getElementById('password').value='"+pass+"';";

   if (Build.VERSION.SDK_INT >= 19) {
            view.evaluateJavascript(js, new ValueCallback<String>() {
                @Override
                public void onReceiveValue(String s) {

                }
            });
        } else {
            view.loadUrl(js);
        }

   view.loadUrl(js);
}


});
0
Denish Rana

Passer le paramètre directement dans l'URL 

webView.loadUrl("file:///Android_asset/animation.html?message=testing");

Récupère le paramètre dans le fichier html

var url_string = window.location.href
var url = new URL(url_string);
var message= url.searchParams.get("message");
0
Levon Petrosyan