jsb.js
實現js和客戶端互相調用方法
客戶端會給js提供一個名為JavascriptBridge變量
var API_NAMESPACE = '__JavascriptBridge__';
var API = window[API_NAMESPACE] || null;
JS中使用到的方法:(前端并不是很清楚這些方法具體做了什么)
API.require
API.setResult
API.getCommands
API.getUserInfoCallback
API.setJpushAlias
API.getZuid()
依賴于此API對象,實現了兩種場景的交換:
- 給java調用的js方法
例子:
- 給java調用的js方法
//安卓客戶端點擊返回按鈕
native_android.jsb.addJavascriptMethod('backButtonCallback',function(message){
if(message) {
if(Object.prototype.toString.call(message)==="[object String]"){
message=JSON.parse(message);
}
if(message.page == "loading"){
com.jumpUrl("/bill?footer=1");
}else if(message.page == "result"){
com.jumpUrl("/bill?footer=1");
}
}
})
目前看到以下幾個定義的js方法
shareCallback
statisticsCallback
backButtonCallback
alipayFailCallBack
- 調用java方法
定義了require方法供js調用,核心還是依靠api.require
- 調用java方法
/**
* 請求調用java方法
* @param {[type]} cmd [description]
* @param {[type]} params [description]
* @param {Function} callback [description]
* @return {[type]}
*/
context.require = function(cmd, params, callback){
params = params || '{}';
var result = api.require(cmd, JSON.stringify(params));
if(callback && result){
result = JSON.parse(result);
}
callback && callback(result);
}
js具體調用
- 主體項目只看到這兩種類型
native_android.jsb.require('messagebox', {{type: "title", url_title:'***', need_back: true, hideMenu: true}})
native_android.jsb.require('messagebox', {type:"relogin"});
- 授信項目有額外
//印尼通知客戶端開啟用戶權限
native_android.jsb.require('messagebox', {type:"openAuthority"});
//印尼通知客戶端獲取用戶權限
native_android.jsb.require('messagebox', {type:"getAuthority"});