Android 如何进行js交互

学习android肯定会涉及到js交互的问题,没有做过这方面项目的android人员或者android学习者可能在面对这个问题的时候有些萌逼,因为本人公司大量的android都涉及到和H5的交互式开发,所以总结一下js的使用方法。
以webview为例,因为现在Crosswalk的使用也非常流行,webview会涉及到很麻烦的适配问题,以及硬件加速什么的,Crosswalk则没有适配方面的压力,但是会导致打包非常大,再者Crosswalk还有一些cpu不支持,两者各有千秋吧。
开始正题:
一,H5调用Android的方法:
在设置webview时,必须要设置如下

WebSettings settings = webView.getSettings();
webView.addJavascriptInterface(this, "android");
settings.setJavaScriptEnabled(true);

this表示在本类中书写android方法,防止代码混乱也可以在内部类中写,”android“表示这是android的方法,区别于ios

wvContent.addJavascriptInterface(new WebViewActivity(), "android");

表示方法会写在WebViewActivity.class内部类中,android方法的书写

 @JavascriptInterface
 public void toUserInfoActivity() {         RouteManager.getInstance().toUserInfoActivity(MainActivity.this);
}

这里只是简短的页面跳转功能,这里的关键就是@JavascriptInterface,如果没有写的话,方法就不会被识别
H5是如何调用的呢?请看下面代码

function goback(){
    var  browser = device();
    if (browser.versions.android) { window.android.goBack(); }else if(browser.versions.ios || browser.versions.iPhone || browser.versions.iPad){ window.location = 'ios://webGoBack'; }
}

这里就能很清楚的看到调用的是android的goback()方法。
二,android调用H5的方法
交互式开发也需要经常去调用方法,这个很简单,首先说一下调用必须是在web页面去调用,android原生界面是调不到的。
调用webview的loadurl()方法就行了

 if (flag.equals("0")) {
          webView.reload();
                       } 
 else if (flag.equals("1")) {
                     webView.loadUrl("javascript:uploadImgSrc('" + id + "','" + imageurl + "')");
                    } else if (flag.equals("2")) {
                        webView.loadUrl("javascript:uploadAuditImg('" + imageurl + "')");
                    }

这是我项目中的一段交互代码,来分析一下,webview调用loadurl()方法,里面必须是“javascript:方法名(‘“+参数+”’)”这种格式才行,嗯很简单吧,格式是调用的关键,嗯讲的很浅显,希望能有所帮助。

你可能感兴趣的:(JavaScript,android,webView)