在混合开发模式下,Web H5会经常需要使用Native的功能,比如调用原生页面、获取用户信息等,同时Native也需要向Web端发送推送、更新状态等,而JavaScript是运行在单独的JS Context中(Webview容器、JSCore等),与原生有运行环境的隔离,所以需要有一种机制实现Native端和Web端的双向通信,这就是JSBridge:以JavaScript引擎或Webview容器作为媒介,通过协定协议进行通信,实现Native端和Web端双向通信的一种机制。
通过JSBridge,Web端可以调用Native端的Java接口,同样Native端也可以通过JSBridge调用Web端的JavaScript接口,实现彼此的双向调用。
Webview是移动端提供的运行JavaScript的环境,是系统渲染Web网页的一个控件,可与页面JavaScript交互,实现混合开发,Android的Webview采用的是低版本和高版本使用了不同的webkit内核,4.4后直接使用了Chrome。Webview控件除了能加载指定的url外,还可以对URL请求、JavaScript的对话框、加载进度、页面交互进行强大的处理,之后会提到拦截请求、执行JS脚本都依赖于此。
注意:
对于M300 RTK遥控器,需要把遥控器固件升级到最新版本,不然会出现Webview页面空白的现象。
/ Java 注入 js方法,
webview.addJavascriptInterface(JsModule,"android");
// JsModule.java
@JavascriptInterface
public void jsCallAndroid(){
tvShowmsg.setText("Js调用Android方法");
}
@JavascriptInterface
public void jsCallAndroidArgs(String args){
tvShowmsg.setText(args);
}
// js 调用 java 代码
<input type="button" value="Js调用Java代码" onclick="window.android.jsCallAndroid()"/>