一、android端调用js代码有以下两种方式:
通过WebView的loadUrl()
1
2//callJS 是js端函数
mWebView.loadUrl("javascript:callJS()");通过WebView的evaluateJavascript()
1
2
3
4
5
6mWebView.evaluateJavascript("javascript:callJS()", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
//此处为 js 返回的结果
}
});
优缺点对比:
- loadUrl 会刷新整个web页面,但兼容android4.4以下代码
- evaluateJavascript 方法的执行不会使页面刷新,效率更高。但只能在android4.4以上才能运行
使用建议:
两种方法混合使用,即Android 4.4以下使用方法1,Android 4.4以上方法2
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
mWebView.loadUrl(url);
} else {
mWebView.evaluateJavascript(url, new ValueCallback() {
});@Override public void onReceiveValue(String value) { //此处为 js 返回的结果 }
}
二、 JS通过WebView调用 Android 代码也有以下三种方式:
通过WebView的addJavascriptInterface()进行对象映射
缺点:android4.2以下存在严重的漏洞问题 具体见 你不知道的 Android WebView 使用漏洞)通过 WebViewClient 的shouldOverrideUrlLoading ()方法回调拦截 url
- 通过 WebChromeClient 的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调拦截JS对话框alert()、confirm()、prompt()消息