将变量从Android传递到在WebView中启动的JavaScript

Zac*_*ell 6 javascript android webview

我有一个WebView,只需单击一个Android按钮,就可以将一些JavaScript加载到WebView中.

我的问题是如何在加载时将Android变量传递给JavaScript.

我的当前代码将JavaScript加载到WebView中

private OnClickListener OnClick_grabit = new OnClickListener() {
    public void onClick(View v) {
        webView.loadUrl("javascript: function loadScript(scriptURL) { 
             var scriptElem = document.createElement('SCRIPT'); 
             scriptElem.setAttribute('language', 'JavaScript'); 
             scriptElem.setAttribute('src', scriptURL); 
             document.body.appendChild(scriptElem);
             } loadScript('http://www.pathtojavascript/javascript.js');");
    }
};
Run Code Online (Sandbox Code Playgroud)

所以我需要将一些东西传递给initialize()Android 的JavaScript .

Tan*_*ner 8

Java类:

public class JavaScriptInterface {
    Context mContext;
    JavaScriptInterface(Context c) {
        mContext = c;
    }    
    @JavascriptInterface
    public String getFromAndroid() {
        return "This is from android.";
    }
}
Run Code Online (Sandbox Code Playgroud)

Webview代码:

WebView webView = (WebView) findViewById(R.id.webview);
webView.setWebChromeClient(new WebChromeClient() {});
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);
webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
Run Code Online (Sandbox Code Playgroud)

Html和javascript:

<input type="button" value="Get from android" onClick="getFromAndroid()" />
<script type="text/javascript">
    var myVar = null;
    function getFromAndroid() {
        myVar = Android.getFromAndroid();
        alert(myVar);
    }
</script>
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的方法。 (3认同)

gun*_*nar 6

首先,您只需要加载一次脚本(您onClick每次都加载它),然后调用loadUrl("javascript:initialize(" + myNumber + ");")