Android与Js的方方面面

2020-03-04  本文已影响0人  jamin_

喜欢用第三方库的

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() 消息

三种方式的对比 & 使用场景


image.png

实践

不让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);
上一篇下一篇

猜你喜欢

热点阅读