android开发中源生代码向JS中传值问题

来源:互联网 发布:货运软件哪个最好 编辑:程序博客网 时间:2024/06/03 22:57

关于android开发中JS与webview进行交互的文章网上已经很多,但是百度搜了一下关于源生代码向JS中传递返回值的问题说法五花八门,在此将项目中解决办法记录一下

public class MainActivity extends AppCompatActivity {    private static final String LOG_TAG = "WebViewDemo";    private WebView mWebView;    private Handler mHandler = new Handler();    @SuppressLint("JavascriptInterface")    @Override    public void onCreate(Bundle icicle) {        super.onCreate(icicle);        setContentView(R.layout.activity_main);        mWebView = (WebView) findViewById(R.id.webview);        WebSettings webSettings = mWebView.getSettings();        webSettings.setSavePassword(false);        webSettings.setSaveFormData(false);        webSettings.setJavaScriptEnabled(true);        webSettings.setSupportZoom(false);        mWebView.setWebChromeClient(new MyWebChromeClient());        mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");        mWebView.loadUrl("http://www.jz100.com/static/test.html");    }    final class DemoJavaScriptInterface {        DemoJavaScriptInterface() {        }        /**         * This is not called on the UI thread. Post a runnable to invoke         * loadUrl on the UI thread.         */        @JavascriptInterface        public void clickOnAndroid(String test) {            Toast.makeText(MainActivity.this, test, Toast.LENGTH_SHORT).show();        }        @JavascriptInterface        public String GetLat()        {            return "123";        }    }    /**     * Provides a hook for calling "alert" from javascript. Useful for     * debugging your javascript.     */    final class MyWebChromeClient extends WebChromeClient {        @Override        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {            Log.d(LOG_TAG, message);            result.confirm();            return true;        }    }}


在源生代码中调用webSettings.setJavaScriptEnabled(true)方法表示支持js脚本,然后在addJavascriptInterface中传入于js交互的方法类,在该类中写提供给JavaScript调用的方法,记住加上@JavascriptInterface注解,否则js还是无法识别。若想给js返回值,只需设置接口函数的回调值即可。

js的调用代码如下:

<html><script language="javascript">    var lat;    function initialize(){        lat = window.demo.GetLat();    }</script><body onload="initialize()"><!-- Calls into the javascript interface for the activity --><a id="btn_test" onClick="window.demo.clickOnAndroid(lat)">    <div style="width:80px;            margin:0px auto;            padding:10px;            text-align:center;            border:2px solid #202020;" >    Click me!    </div></a></body></html>
在js中调用源生方法函数为window.demo.函数名,其中demo为mWebView.addJavascriptInterface方法中的第二个参数,若想获得返回值,只需接收其回调即可。


0 1