三端易用的现代跨平台 Javascript bridge,可以在Javascript和原生之间同步或异步的调用彼此的函数.
集成方式:
1.Add the JitPack repository to your build file
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
2.Add the dependency
dependencies {
// 系统原生的webview
implementation'com.github.wendux:DSBridge-Android:3.0-SNAPSHOT'
// support the x5 browser core of Tencent
implementation'com.github.wendux:DSBridge-Android:x5-3.0-SNAPSHOT'
}
使用方式
————————————————
版权声明:本文为CSDN博主「志悠自在」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36347817/article/details/105687854
DSBridge正式通过类的方式集中、统一地管理API。由于安全原因,所有Java API 必须有"@JavascriptInterface" 标注。
2.1 添加API类实例到 DWebView
import wendu.dsbridge.DWebView;
...
final DWebView dwebView= (DWebView) findViewById(R.id.webview);
// set debug mode
DWebView.setWebContentsDebuggingEnabled(true);
dwebView.addJavascriptObject(new JsApi(), null);
dwebView.addJavascriptObject(new JsEchoApi(),"echo");//echo是作用域
dwebView.loadUrl("file:///android_asset/js-call-native.html");
2.2 在Javascript中调用原生 (Java/Object-c/swift) API ,并注册一个 javascript API供原生调用.
初始化 dsBridge
//cdn方式引入初始化代码(中国地区慢,建议下载到本地工程)
//
//npm方式安装初始化代码
//npm install [email protected]
var dsBridge=require("dsbridge")
调用原生API ,并注册一个 javascript API供原生调用.
js通过dsBridge.call()方法传值,简单模拟了点击事件来传递。
第一个参数是约定注册的名称,与原生接受处方法名一致;
第二个参数是要传递的值;
第三个参数是接受原生返回的回调。
//同步调用
var str=dsBridge.call("Syn","testSyn");
//异步调用
dsBridge.call("asyn","testAsyn", function (v) {
alert(v);
})
//注册 javascript API
dsBridge.register('addValue',function(l,r){
return l+r;
})
原生接受,通过JavascriptInterface注解,方法名与注册名一致。 第一个参数是传递的值; 第二个参数可回调信息给js。
public class JsEchoApi {
@JavascriptInterface
public Object syn(Object args) throws JSONException {
return args;
}
@JavascriptInterface
public void asyn(Object args,CompletionHandler handler){
handler.complete(args);
}
}
//namespace is "echo"
dwebView.addJavascriptObject(new JsEchoApi(),"echo");
2.3 原生传递值给js
通过webView.callHandler() 方法调用
第一个参数是约定注册的名称,与js接受处一致;
第二个参数是要传递的值,这里将data转成了 json String 的传给前端;
第三个参数是接受js返回的回调,可用于js接受成功后,再去通知原生。
HtmlData data = new HtmlData();
data.html = txt;
webView.callHandler("nativeToJs", new Object[]{new Gson().toJson(data)}, new OnReturnValue() {
@Override
public void onValue(String o) {
}
});
js接受传值,直接通过dsBridge.register() 方法接受
第一个参数是上面的注册名,与原生保持一致;
第二个是js的方法,参数data就是 传递的值,这里通过JSON.parse() 格式化,方法的return返回值就是传递给原生的,对应上面的第三个参数。
更多的可以参考github文档https://github.com/wendux/DSBridge-Android
参考:https://blog.csdn.net/jifenglie/article/details/100031244?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2
https://blog.csdn.net/tx467220125/article/details/83718642