最近新开源了一个新项目DSBridge,号称最好用的javascript bridge。笔者仔细对比了一下,DSBridge分分钟秒杀全部啊。javascript
DSBridge的主要特色:html
DSBridge 是H5页面与Native之间通讯的桥梁,它有以下特色:前端
经过webView.callHandler()方法调用
第一个参数是约定注册的名称,与js接受处一致;
第二个参数是要传递的值,这里将data转成了json String的传给前端;
第三个参数是接受js返回的回调,可用于js接受成功后,再去通知原生。java
HtmlData data = new HtmlData();
data.html = txt;
webView.callHandler("nativeToJs", new Object[]{new Gson().toJson(data)}, new OnReturnValue<String>() {
@Override
public void onValue(String o) {
}
});
复制代码
js接受传值,直接经过dsBridge.register()方法接受
第一个参数是上面的注册名,与原生保持一致;
第二个是js的方法,参数data就是传递的值,这里经过JSON.parse()格式化,方法的return返回值就是传递给原生的,对应上面的第三个参数。android
<script>
dsBridge.register('nativeToJs', function (data) {
var value = JSON.parse(data);
document.getElementById("test").innerHtml = value.html;
return "success";
});
</script>
复制代码
js经过dsBridge.call()方法传值,简单模拟了点击事件来传递。
第一个参数是约定注册的名称,与原生接受处方法名一致;
第二个参数是要传递的值;
第三个参数是接受原生返回的回调。
ios
function myClick(){
dsBridge.call("jsToNative", "testVal", function(res) {
console.log(res);
});
}
复制代码
原生接受,经过JavascriptInterface注解,方法名与注册名一致。 第一个参数是传递的值; 第二个参数可回调信息给js;web
webView.addJavascriptObject(new JsApi(), null);
public class JaApi {
@JavascriptInterface
public void jsToNative(Object msg, CompletionHandler<String> handler){
handler.complete(msg+"回调给js");
}
}
复制代码
参考: 跨平台Js bridge新秀-DSBridgejson