Js 与Android WebView
2015-11-16 16:39
465 查看
一、JS调用Android Java交互
1、WebView初始化及配置:
private void initWebView() { //配置可与JS交互 wb.getSettings().setJavaScriptEnabled(true); //配置协议agreement wb.addJavascriptInterface(new BIDYCAgreetment(context, handler), "agreement"); wb.getSettings().setAllowFileAccess(true); wb.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); wb.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH); // 支持缩放 V4.9 add by Able 先注释,可能5.0或许会打开 续:V5.1打开的 wb.getSettings().setBuiltInZoomControls(true); wb.getSettings().setSupportZoom(true); // 电脑网页最小化适配手机屏幕 V4.9 add by Able 先注释,可能5.0或许会打开 续:V5.1打开的 wb.getSettings().setUseWideViewPort(true); wb.getSettings().setLoadWithOverviewMode(true); WebSettings setting = wb.getSettings(); // 因为zhizao.tudou.com打不开图片-start setting.setDomStorageEnabled(true); setting.setAppCacheMaxSize(1024 * 1024 * 8); setting.setAppCacheEnabled(true); // 因为zhizao.tudou.com打不开图片-end setting.setCacheMode(WebSettings.LOAD_NO_CACHE); setting.setNeedInitialFocus(false); setting.setSaveFormData(true); setting.setSavePassword(false); wb.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //不跳至其他浏览器,在本页面加载url wb.loadUrl(url); return true; } @Override public void onLoadResource(WebView view, String url) { super.onLoadResource(view, url); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); Loading.show(context); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); handler.sendEmptyMessage(MESSAGE_LOAD_SUCCESS); Loading.dismiss(); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); YoukuLoading.dismiss(); handler.sendEmptyMessage(MESSAGE_TIME_OUT); } }); wb.requestFocus(); wb.loadUrl("http://csi.xxxxx.com/mdyc/index.php"); }
2、定义交互协议类:
public class BIDYCAgreetment { public static final int HIDENAV = 10; public static final int ActiveNAV1 = 11; public static final int ActiveNAV2 = 12; public static final int ActiveNAV3 = 13; private Context context; private Handler mHandler; public BIDYCAgreetment(Context context, Handler handler) { this.context = context; this.mHandler = handler; } @JavascriptInterface public void hidenav() { if (!Util.hasInternet()) { Util.showTips(R.string.none_network); return; } Logger.d("js-----","----->hidenav"); if (mHandler != null) { mHandler.sendEmptyMessage(HIDENAV); } } //定义JS交互接口,交互方法activenav(),交互参数nav1,nav2 @JavascriptInterface public void activenav(final String nav1, final String nav2) { if (!Util.hasInternet()) { Util.showTips(R.string.none_network); return; } if (mHandler!=null){ Message msg3 =new Message(); msg3.obj=nav2; msg3.what=ActiveNAV3; mHandler.sendMessage(msg3); Message msg2=new Message(); msg2.obj=nav1; msg2.what=ActiveNAV2; mHandler.sendMessage(msg2); } } @JavascriptInterface public void activenav(final String nav1){ if (!Util.hasInternet()) { Util.showTips(R.string.none_network); return; } if (mHandler != null) { Message msg1=new Message(); msg1.obj=nav1; msg1.what=ActiveNAV1; mHandler.sendMessage(msg1); } } }3、Js中的相关定义
<script> if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {//ios var url = 'agreement::activenav:nav1=4&nav2=3'; sendUrlToNative(url); }else{//android window.agreement.activenav(4,3);//Android 定义传递协议、及方法、参数形式 } </script>
相关文章推荐
- Android 点击赞时弹出+1向上弹出动画
- 为什么用Android Volley时返回的中文是乱码,而postman却显示正常
- 如何运行Smali文件?
- Android三级缓存
- Android自定义软键盘的实现
- Android Canvas绘图详解(图文)
- Android编程实现给Button添加图片和文字的方法
- Android实现对角线3D旋转
- android开发【可以进行四则运算的计算器】
- Android中利用Intent传递数据到另一个页面
- (转)android多国语言适配
- Android模拟聊天工具
- Android系统共享一套sdk
- Android(12)——上下文Context
- android 多语言适配
- 圆形头像显示实现
- Android shape的使用
- Android 侧滑菜单
- Android Studio 集成SVN
- Android ScrollView嵌套ListView/GridView 导致进入界面定位到ListView/GridView的问题