喜欢用第三方库的
https://juejin.im/entry/5942688efe88c2006a58d709
JsBridge库
https://juejin.im/post/5ac044a8518825557459d603
android与js的交互之jsbridge使用
坑
https://blog.csdn.net/u013095264/article/details/96300079
JsBridge使用中的各种坑
转移到另一个库!
https://github.com/wendux/DSBridge-Android
使用方法
https://blog.csdn.net/jifenglie/article/details/100031244
http://www.imooc.com/article/258978
原生Js交互之DSBridge
自己撸代码的,参考以下(含demo)
https://juejin.im/post/592e15742f301e00570eb954
加载本地网页
webView.loadUrl("file:///android_asset/javascript.html");
总结下:
Android通过WebView调用 JS 代码
对于Android调用JS代码的方法有2种:
通过WebView的loadUrl()
通过WebView的evaluateJavascript() --要Android4.4以上
使用建议:
两种方法混合使用,即Android 4.4以下使用方法1,Android 4.4以上方法2
JS通过WebView调用 Android 代码
对于JS调用Android代码的方法有3种:
1、通过WebView的addJavascriptInterface()进行对象映射 --缺点:存在严重的漏洞问题
2、通过 WebViewClient 的shouldOverrideUrlLoading ()方法回调拦截 url
3、通过 WebChromeClient 的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调拦截JS对话框alert()、confirm()、prompt() 消息
三种方式的对比 & 使用场景
实践
不让WebView调用系统自带浏览器
重写setWebViewClient
//不调用系统浏览器,在webview内跳转
dbWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String s) {
webView.loadUrl(s);
return true;
}
});
返回键起到回退的作用,不是返回activity!
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {
mWebView.goBack();// 返回前一个页面
return true;
}
return super.onKeyDown(keyCode, event);