技术架构
HTML5+ 基座扩展采用三层结构,JS层、PluginBridge层和Native层。 三层功能分别是:
JS层: 在Webview页面调用,触发Native层代码,获取执行结果。
PluginBridge层: 将JS层请求进行处理,触发Native层扩展插件代码。
Native层: 插件扩展的平台原生代码,负责执行业务逻辑并执行结果返回到请求页面。
1、定义java类,继承StandardFeature
public class CommonH5Plus extends StandardFeature {
/**
* 实现自己的业务逻辑
* @param pWebview 发起请求的webview
* @param array JS页面传来的参数
*/
public void myTest(IWebview pWebview, JSONArray array)
{
String ReturnString = null;
String CallBackID = array.optString(0);
JSONArray newArray = null;
try {
newArray = new JSONArray( array.optString(1));
String inValue1 = newArray.getString(0);
String inValue2 = newArray.getString(1);
ReturnString = inValue1 + "-" + inValue2 + "-" ;
} catch (JSONException e) {
e.printStackTrace();
}
JSUtil.execCallback(pWebview, CallBackID, ReturnString, JSUtil.OK, false);
}
2、 在编写扩展插件时需要修改“/assets/data/dcloud_properties.xml”,在其中添加JS对象名称和Android包的类名对应关系,SDK会根据对应的类名查找并生成相应的对象并执行对应的逻辑。
<feature name="CommonH5Plus" value="com.*.plugin.CommonH5Plus"/>
3、在应用的manifest.json文件中还需要添加扩展插件的应用使用权限
"permissions" : {
"CommonH5Plus": {
"description": "自定义H5插件"
},
4、自定义 h5plus.js
`mui.plusReady(function() {
var _BARCODE = 'CommonH5Plus';
var plusObj = {
myTest: function(Argus, successCallback, errorCallback) {
var success = typeof successCallback !== 'function' ? null : function(args) {
successCallback(args);
},
fail = typeof errorCallback !== 'function' ? null : function(code) {
errorCallback(code);
};
callbackID = plus.bridge.callbackId(success, fail);
return plus.bridge.exec(_BARCODE, "myTest", [callbackID, Argus]);
},
};
window.plus.CommonH5Plus = plusObj;
});
5、html页面引入h5plus.js,编写代码调用
window.plus.CommonH5Plus.myTest(["Html5","Html6"], function(result ) {alert( result );},function(result){alert(result);});
相关链接