返回 JS 接口对象和桥接名(DWebView)

方法定义

List<HashMap<String,Object>> getJsInterface4DW(Activity activity, String mAppId, List<String> registerExApiList,                                                   JSCallerListener jsCallListener);

方法说明

用于定制外接的 JS 能力。接入方接入自己的 JS 页面时注入 JS 对象。

​由 SDK 在页面初始化的时候注入。

无要求时请返回 null

参数说明

参数 参数类型 参数说明
jsCallerLister JsCallerLister 用于调用前端 JS 的方法
mAppId String 小程序的 AppId
registerExApiList List 用于保存注册的方法名
jsCallerLister.onJsCall(jsonObject, method, null); // jsonObject为结果串,method为方法名

返回说明

​每一个 JS 桥接对象通过一个 Map 封装,最后通过 List 返回。

JS 对象参数说明

参数 参数类型 参数说明
jsObject Object js桥接对象,需自己配置对应混淆
name String js桥接名字

代码示例

HashMap<String,Object> map = new HashMap<String,Object>();
map.put("jsObject",jsObject); //jsObject 封装js方法的对象,需要加上自己的前缀区分其他的方法。
map.put("name", name);
ArrayList list = new ArrayList();
list.add(map);
return list;

JS 对象需要满足下面的要求

1、填充registerApiList

2、添加命名空间的逻辑,当添加对接小程序的js对象时,应当增加下面的命名空间;参考下面的示例代码

if (!TextUtils.isEmpty(nameSpaceForEx)){
nameSpaceForEx = nameSpaceForEx + ".";
}
	
public class JSInterface {
public JSInterface(Activity context,String nameSpaceForEx,
List<String> registerApiList) {
if (!TextUtils.isEmpty(nameSpaceForEx)){
nameSpaceForEx = nameSpaceForEx + ".";
}
if(registerApiList != null){
//前端需要记录js桥接的所有方法
registerApiList.add(nameSpaceForEx+"js接口方法名字1");
registerApiList.add(nameSpaceForEx+"js接口方法名字2");
}
}
@JavascriptInterface
public void js接口方法名字1(Object msg, CompletionHandler<String> handler){
JSONObject result = new JSONObject();
//接口返回的格式如下 {"msg": "nameSpaceForEx.js接口方法名字1:success/fail", 返回值Key: 返回值}

result.put("msg", "nameSpaceForEx.js接口方法名字1:success");
//与小程序前端定义的参数
result.put("key1", "value1");
result.put("key2", "value2");
handler.complete(result.toString());
}
}

调用示例

/**
* 返回js接口对象和桥接名(dwebview)
*/
override fun getJsInterface4DW(activity: Activity?, appId: String?,
registerExApiList: MutableList<String>?,
p3: JSCallerListener?):
MutableList<HashMap<String, Any>>? {
//Js拓展接口
var map = HashMap<String, Any>()
val extend = JSInterface(activity,"你的nameSpace",registerExApiList)
map["name"] = "你的nameSpace"
map["jsObject"] = extend
val list = ArrayList<HashMap<String, Any>>();
list.add(map)
return list
}
  1. 1. 返回 JS 接口对象和桥接名(DWebView)
    1. 1.1. 方法定义
    2. 1.2. 方法说明
    3. 1.3. 参数说明
    4. 1.4. 返回说明
    5. 1.5. 代码示例
    6. 1.6. 调用示例