Android使用webview让服务器上的js调用java代码的方法
16lz
2022-05-22
原理是webview拦截页面的alert重写onJsAlert方法,根据alert(message)的message判断做指定的操作。
android部分代码:
WebSettings settings = baseView.getSettings();// 设置与Js交互的权限settings.setJavaScriptEnabled(true);// 设置允许JS弹窗settings.setJavaScriptCanOpenWindowsAutomatically(true);//不用缓存settings.setCacheMode(WebSettings.LOAD_NO_CACHE);//在cookie中放入表示是app访问的标识//创建CookieSyncManagerCookieSyncManager.createInstance(this);//得到CookieManagerCookieManager cookieManager = CookieManager.getInstance();//使用cookieManager.setCookie()向URL中添加CookiecookieManager.setCookie(webUrl, "visitor=app");if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { CookieSyncManager.getInstance().sync();} else { CookieManager.getInstance().flush();}//通过拦截js提示框的方法,调用java代码baseView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { if("XXXXXX".equals(message)) { //...... result.cancel();//return true;时只执行一次,需要加上result.cancel(); return true;//不弹出提示框 }else { return super.onJsAlert(view, url, message, result); } }});//加载页面baseView.loadUrl(webUrl);
注意:1、return true;是表示拦截处理完成了,不需要用户点击弹出框,页面弹出框自动退出。
2、result.cancel();是让弹出框以取消的方式退出,不然页面之后就不再执行相同的alert了。远端服务器上的js的调用代码:
alert('XXXXXX');
最后介绍两个android代码调用js代码的方法: 1、
baseView.loadUrl("javascript:showPhoto('" + base64Image + "')");
2、
baseView.evaluateJavascript("javascript:showPhoto('" + base64Image + "')", new ValueCallback() { @Override public void onReceiveValue(String value) { //此处为 js 返回的结果 }});
更多相关文章
- Android(安卓)入门到精通 (界面编程#2-Menu)
- Android——最新LitePal使用
- 通过ijetty获取android设备的截图
- android中开机自动运行程序
- Android下载网络文本
- React Native For Android初探
- 用Android代码实现自动打开USB调试
- android onTouchEvent和setOnTouchListener中onTouch的区别
- 【Android】ToolBar设置NavigationIcon不显示异常或自定义失败异