web-dev-qa-db-ja.com

JavaクラスからWeb View htmlにデータを渡す

webViewに以下のhtmlを読み込んでいます

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

ここでやりたいことは、Javaクラス変数から取得したhtmlのテキストボックスを埋めてから、自動的にsubmitを押すことです。

しかし、私はこれを行う方法がわかりません。

どんな考えでも大歓迎です。

19
User

まず、URLが利用できないようです。

AndroidアプリとWebアプリ/ Webページの間でデータ交換を行いたい場合は、javascriptを使用してこれを実現できます。

Android公式サイトの例:

次のようなクラスを作成します。

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();
    }
}

WebViewで:

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

Webページで:

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

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

Webページに何かを渡したい場合は、対応するjavascript関数を呼び出すだけです。

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

リファレンスは次のとおりです。 http://developer.Android.com/guide/webapps/webview.html

43
hungr

Htmlが読み込まれたときにjavascript関数の読み込みを行う必要があることを追加します。これを制御するには、次を使用できます。

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>

ncaught ReferenceError:myFunction is not defined at null:1 Android webviewの例外 から取得

18

注意このようなjavascript関数を呼び出すには、strに一重引用符またはその他の特殊文字を含めることができます。

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

strをbase64でエンコードし、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)
    }
    
3
xfdai

DomStorageを有効にして、「var x =」を文字列に書き込むだけです。

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

パラメータをURLに直接渡します

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

htmlファイルのパラメーターを取得します

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