原理
引擎注入JS维护一个保存回调的队列,调用插件接口时将function
参数添加至队列生成function
对应Id,并把function
参数替换成对应的Id。插件接口根据该Id loadJs调用回调队列的function
,并根据实际场景对队列中的function
进行移除。从而支持JS的function
参数传入。该改动对前端完全透明。
js调用方式
异步回调
在接口调用参数直接添加function
参数即可。如
var params = {
};
uexWindow.test(params,function(){
console.log("---------callback---------");
});
支持多个function
参数的传入:
var params = {
};
uexWindow.test(params,function(){
console.log("---------callback1--------");
},"params",function(){
console.log("---------callback2--------");
});
支持多个多种参数的回调(包含Json对象):
var params = {
};
uexWindow.test(params,function(result/*String 类型*/,json/*Json对象类型*/,code/*Number 类型*/){
console.log("---------callback---------"+result+json.result+code);
});
如果插件回调接口需要判断是否成功,统一规范第一个参数为int 类型,0表示 成功,非0表示失败,如:
function(error,...){
if(!error){
alert('成功')
}else{
alert('失败')
}
}
同步返回
支持同步返回String类型,JsonObject类型。
同步返回String,如
var query=uexWindow.getUrlQuery();
同步返回JsonObject,如:
var data = {
secret:"APP_SECRET",
code:"CODE",
grant_type:"authorization_code"
};
var result=uexWeiXin.getLoginAccessToken(data);
console.log("access_token: "+result.access_token);
console.log("expires_in: "+result.expires_in);
console.log("openid: "+result.openid);
/**
var result = {
access_token: "ACCESS_TOKEN",
expires_in: 7200,
refresh_token: "REFRESH_TOKEN",
openid: "OPENID",
scope: "snsapi_userinfo",
unionid:"UNIONID"
}
**/
4.0插件改造
Android引擎中EUEXBase
提供的接口为:
/**
* 异步回调到JS
* @param callbackId 回调ID,该值由插件接口被调用时传入
* @param hasNext 是否有下一次回调。没有传false ,有传true
* @param args 参数可以是任何对象,直接回调对象可使用DataHelper.gson.toJsonTree()方法
*/
public void callbackToJs(int callbackId,boolean hasNext,Object... args)
其中callbackId
是由插件接口中传入的。如:
public void test(String[] params){
String jsonStr= (String) params[0];
ResultVO resultVO=new ResultVO();
resultVO.setResult(true);
callbackToJs(Integer.parseInt(params[1]),false,"字符串测试...",DataHelper.gson.toJsonTree(resultVO),666);
}
该接口中定义params
数组中第二个参数为function
,那么params[1]
中的值即为该function
的Id。对应的JS代码为:
uexWindow.test(paramStr,function(result/*String 类型*/,json/*Json对象类型*/,code/*Number 类型*/){
console.log("---------callback---------"+result+json.result+code);
});
- 升级版本号为4.0.0,
对于旧的插件,可以在接口参数
String[] params
中添加参数作为function
。如之前参数定义params[0]
和params[1]
作为接口入参,如果需要回调可以把第三个参数作为function
接收id。为了兼容以前的JS代码,需要判断有没有传入第三个参数。如果有,则调用新的方法进行回调,没有则走之前的cb回调。
打印Log全部使用BDebug
开启调试开关的方法为在SdCard根目录新建
appcandebug.txt
logToFile
和logToFileJson
没有做调试判断。自己调试使用:if(BDebug.DEBUG){
BDebug.logToFile("")
}
callbackToJs 直接回调对象可以使用
DataHelper.gson.toJsonTree(object)
callbackToJs 回调JS时是在主线程中进行,插件中子线程可以直接回调
插件中使用widget相关的需要考虑
mBrwView.getCurrentWidget()==null
的情况,可以获取Root widget:WDataManager.sRootWgt
关于
HttpClient
的需要全部改成HttpURLConnection
,引擎提供的方法为Http.getHttpsURLConnection(url)
和Http.getHttpsURLConnectionWithCert()
加载图片请使用
ACEImageLoader
,有其他需求可以在引擎中添加接口
SO相关
有so 的插件只要armeabi
,如果没有,将armeabi-v7a
目录的so拷贝至armeabi
代码格式
代码请全部使用空格缩进
Editor
->Code Style
->Java
->Tabs and Indents
->Use tab character
Right Margin 设置为120
Editor
->Code Style
->Right Margin
->120