1. 概述
当我们采用H5与Native原生结合开发,使用H5去开发一些功能的时候,肯定会涉及到Android与Js互相调用的问题,通常有两种实现方式,
第一种 使用原生的addJavascriptInterface()来解决
第二种 使用第三方框架WebViewJavascriptBridge 这也是我今天要分享的部分
2.为什么要使用WsebViewJavascriptBridge
对于安卓开发有一段时间的人来说,知道安卓4.4以前谷歌的webview存在安全漏洞,网站可以通过js注入就可以随便拿到客户端的重要信息,甚至轻而易举的调用本地代码进行流氓行为,谷歌后来发现有此漏洞后,增加了防御措施,如果要是js调用本地代码,开发者必须在代码中申明JavascriptInterface
,
列如在4.0之前我们要使得webView加载js只需如下代码:
1 | mWebView.addJavascriptInterface(new JsToJava(), "myjsfunction"); |
4.4之后调用需要在调用方法加入加入@JavascriptInterface注解,如果代码无此申明,那么也就无法使得js生效,也就是说这样就可以避免恶意网页利用js对安卓客户端的窃取和攻击。
但是即使这样,我们很多时候需要在js记载本地代码的时候,要做一些判断和限制,或者有可能也会做些过滤和对用户友好提示,因此JavascriptInterface也就无法满足我们的需求了,特此有大神就写出了WebViewJavascriptBridge框架。
3.开始使用
第一步.Android Studio 导包
1 | repositories { |
第二步.在布局文件中添加
1 | <com.github.lzyzsd.jsbridge.BridgeWebView |
第三步.代码中添加交互方法
H5调android方法
1 | //android端代码 |
或者
1 | //android端代码 |
以上两种方式 一个是指定调具体协定好的方法,一个是全局调用
android调H5
1 | //android端代码 |
或者
1 | //android端代码 |
同样 两种方式一个是不指定方法,另一个是指定具体方法
到此为止还无法交互,还需要配置setWebViewClient
1 | mWebView.setWebViewClient(new BridgeWebViewClient(mWebView)); |
这步非常关键,如果不配置 测试点击压根就不响应,如果你需要自定义WebViewClient,必须实现对应构造方法,而且重写的方法必须调用父类方法,如下:
1 | private class MyWebViewClient extends BridgeWebViewClient { |
到此为止,配置完毕,H5和Android就可以互相调用了
乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站