Android使用webview让服务器上的js调用java代码的方法

原理是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访问的标识
//创建CookieSyncManager
CookieSyncManager.createInstance(this);
//得到CookieManager
CookieManager cookieManager = CookieManager.getInstance();
//使用cookieManager.setCookie()向URL中添加Cookie
cookieManager.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<String>() {
    @Override
    public void onReceiveValue(String value) {
        //此处为 js 返回的结果
    }
});






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值