DSBridge-Android交互

三端易用的现代跨平台 Javascript bridge,可以在Javascript和原生之间同步或异步的调用彼此的函数.

1、集成方式

集成方式:

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

2、使用

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

 

你可能感兴趣的:(android)