使用的第三方框架 这里要介绍2种交互的方式
com.github.lzyzsd.jsbridge.BridgeWebView
Android本地的初始化设置
webView = (BridgeWebView) view.findViewById(R.id.webView); webView.setDefaultHandler(new DefaultHandler()); webView.loadUrl("file:///android_asset/echarts/map.html"); 支持javascript webView.getSettings().setJavaScriptEnabled(true); 设置可以支持缩放 webView.getSettings().setSupportZoom(true); // 设置出现缩放工具 webView.getSettings().setBuiltInZoomControls(true); webView.getSettings().setDisplayZoomControls(false); //扩大比例的缩放 // webView.getSettings().setUseWideViewPort(true); 自适应屏幕 webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); webView.getSettings().setLoadWithOverviewMode(true); // webView.setInitialScale(100); webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); //设置本地调用对象及其接口 webView.addJavascriptInterface(new JavaScriptObject(mContext), "myObj");//第二种jsjava交互jiaohuMap();//第一种jsjava交互,只限于在.html文件中使用
第一种jsjava交互,只限于在.html文件中使用private void jiaohuMap() { webView.callHandler("MAP", mParam, new CallBackFunction() { @Override public void onCallBack(String data) { // Log.d("TAG_3",data); } }); }在.html文件中加入<script> function connectWebViewJavascriptBridge(callback) { if (window.WebViewJavascriptBridge) { callback(WebViewJavascriptBridge) } else { document.addEventListener( 'WebViewJavascriptBridgeReady' , function() { callback(WebViewJavascriptBridge) }, false ); } } connectWebViewJavascriptBridge(function(bridge) { bridge.init(function(message, responseCallback) { console.log('JS got a message', message); var data = { 'Javascript Responds': 'Wee!' }; console.log('JS responding with', data); responseCallback(data); }); //这里就是Js注册的functionInJs方法,data即为原生带来的参数 bridge.registerHandler("MAP", function(data, responseCallback) { //将原生带来的参数,显示在show标签位置 var responseJSON=eval('('+data+')');//这里必须要加上eval('('+data+')')来解析data var data = []; for(var i in responseJSON){ data.push({name:responseJSON[i].GEO_ID,ONCE:responseJSON[i].ONCE,value:responseJSON[i].RATE,ONCEUNFIN:responseJSON[i].ONCEUNFIN,ONCEALARM:responseJSON[i].ONCEALARM,ALARMUNFIN:responseJSON[i].ALARMUNFIN,ALARMRATE:responseJSON[i].ALARMRATE}) <!--data.push({name:responseJSON[i].NGEOID,value:responseJSON[i].BASEBI,value2:responseJSON[i].ONCE})//原来的--> } console.log(data); on(data); //调用responseCallback方法可以带传参数到原生 <!--responseCallback(responseJSON);--> }); }) </script>
第二种JS交互非常好用在代码中设置
//设置本地调用对象及其接口 webView.addJavascriptInterface(new JavaScriptObject(mContext), "myObj");新建类public class JavaScriptObject { Context mContxt; public JavaScriptObject(Context mContxt) { this.mContxt = mContxt; } @JavascriptInterface //这个注释一定要加,否则无效 public void fun1FromAndroid(String name) { Toast.makeText(mContxt, name, Toast.LENGTH_SHORT).show(); } @JavascriptInterface//api16以后需要在调用的本地方法上加注解@JavascriptInterface public void fun2(String name) { Toast.makeText(mContxt, "fun2:" + name, Toast.LENGTH_SHORT).show(); } }然后在.html.js文件中都可以进行交互,只需加一句myObj.fun1FromAndroid("aaaaaaaa");