yz-native-js-sdk
Version:
provide the native function call API of yunzai mobile platform for the third party
500 lines (498 loc) • 18.3 kB
JavaScript
var bridge={default:this,call:function(b,a,c){var e="";"function"==typeof a&&(c=a,a={});a={data:void 0===a?null:a};if("function"==typeof c){var g="dscb"+window.dscb++;window[g]=c;a._dscbstub=g}a=JSON.stringify(a);if(window._dsbridge)e=_dsbridge.call(b,a);else if(window._dswk||-1!=navigator.userAgent.indexOf("_dsbridge"))e=prompt("_dsbridge="+b,a);return JSON.parse(e||"{}").data},register:function(b,a,c){c=c?window._dsaf:window._dsf;window._dsInit||(window._dsInit=!0,setTimeout(function(){bridge.call("_dsb.dsinit")},
0));"object"==typeof a?c._obs[b]=a:c[b]=a},registerAsyn:function(b,a){this.register(b,a,!0)},hasNativeMethod:function(b,a){return this.call("_dsb.hasNativeMethod",{name:b,type:a||"all"})},disableJavascriptDialogBlock:function(b){this.call("_dsb.disableJavascriptDialogBlock",{disable:!1!==b})}};
!function(){if(!window._dsf){var b={_dsf:{_obs:{}},_dsaf:{_obs:{}},dscb:0,dsBridge:bridge,close:function(){bridge.call("_dsb.closePage")},_handleMessageFromNative:function(a){var e=JSON.parse(a.data),b={id:a.callbackId,complete:!0},c=this._dsf[a.method],d=this._dsaf[a.method],h=function(a,c){b.data=a.apply(c,e);bridge.call("_dsb.returnValue",b)},k=function(a,c){e.push(function(a,c){b.data=a;b.complete=!1!==c;bridge.call("_dsb.returnValue",b)});a.apply(c,e)};if(c)h(c,this._dsf);else if(d)k(d,this._dsaf);
else if(c=a.method.split("."),!(2>c.length)){a=c.pop();var c=c.join("."),d=this._dsf._obs,d=d[c]||{},f=d[a];f&&"function"==typeof f?h(f,d):(d=this._dsaf._obs,d=d[c]||{},(f=d[a])&&"function"==typeof f&&k(f,d))}}},a;for(a in b)window[a]=b[a];bridge.register("_hasJavascriptMethod",function(a,b){b=a.split(".");if(2>b.length)return!(!_dsf[b]&&!_dsaf[b]);a=b.pop();b=b.join(".");return(b=_dsf._obs[b]||_dsaf._obs[b])&&!!b[a]})}}();
var yz = {
config: {
DEBUG: false,
version: 6
},
// 1.界面
// 1.1导航
navigationOpenWindow: function (option) {
if (option.shareFlag == null || option.shareFlag == undefined) {
option.shareFlag = false
}
if (option.nBack == null || option.nBack == undefined) {
option.nBack = false
}
if (option.type == null || option.type == undefined) {
option.type = "url"
}
if (option.type === "url") {
if (!option.url) {
throw Error('lost url param')
}
}
yz._private.call('JsV6.navigationOpenWindow', {
type: option.type,
applicationId: option.applicationId,
url: option.url,
shareFlag: option.shareFlag,
nBack: option.nBack
}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 1.2设置导航条
setNavigationBarTitle: function (option) {
if (!option.title) {
throw Error('lost title param')
}
yz._private.call('JsV6.setNavigationBarTitle', {
title: option.title
}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 设置右部按钮
setNavigationBarRightItems: function (option) {
if (option.showMenu == null || option.showMenu == undefined) {
option.showMenu = true
}
if (option.shareFlag == null || option.shareFlag == undefined) {
option.shareFlag = false
}
if (!option.items) {
throw Error('lost items param')
}
if (!option.onClick && 'function' !== typeof option.onClick) {
throw Error('lost onClick function')
}
yz._private.call('JsV6.setNavigationBarRightItems', {
showMenu: option.showMenu,
shareFlag: option.shareFlag,
items: option.items,
}, function (resultData) {
yz._private.handlerResult(resultData, option)
});
bridge.register('navigationBarRightItemOnClick', function (title) {
option.onClick(title)
});
},
// 1.3网页分享
setWebCanShare: function(option) {
if (option.shareFlag == null || option.shareFlag == undefined) {
option.shareFlag = false
}
yz._private.call('JsV6.setWebCanShare', {
shareFlag: option.shareFlag
}, function (resultData) {
yz._private.handlerResult(resultData, option)
});
},
// 2.用户信息
// 2.1异步Token
getToken: function (option) {
if (option.refresh == null || option.refresh == undefined) {
option.refresh = false
}
if (!option.success) {
throw Error('lost success function')
}
yz._private.call('JsV6.getToken', {
refresh: option.refresh
}, function (resultData) {
yz._private.handlerResult(resultData, option)
});
},
// 同步获取Token
getTokenSync: function() {
var resultData = yz._private.callSync('JsV6.getTokenSync', {});
if (resultData.status) {
return resultData.data;
} else {
throw Error(resultData.msg)
}
},
// 2.2同步获取用户信息
getUserInfoSync: function() {
var resultData = yz._private.callSync('JsV6.getUserInfoSync', {});
if (resultData.status) {
return resultData.data;
} else {
throw Error(resultData.msg)
}
},
// 异步获取用户信息
getUserInfo: function(option) {
if (!option) {
throw Error('lost option')
}
if (!option.success) {
throw Error('lost success function')
}
yz._private.call('JsV6.getUserInfo', {}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 3.扫码
scanCode: function (option) {
if (!option.success) {
throw Error('lost success function')
}
yz._private.call('JsV6.scanCode', {}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 4.1选择联系人
chooseContacts: function (option) {
if (!option.success) {
throw Error('lost success function')
}
if (!option.count) {
option.count = 0
}
yz._private.call('JsV6.chooseContacts', {
count: option.count
}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 4.2联系人详情
ContactDetails: function (option) {
if (!option.success) {
throw Error('lost success function')
}
if (!option.targetUserId) {
throw Error('lost targetUserId param')
}
yz._private.call('JsV6.ContactDetails', {
targetUserId: option.targetUserId
}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 5.图片选择
selectImage: function(option) {
if (!option.success) {
throw Error('lost success function')
}
if (!option.count) {
option.count = 1
}
if (!option.sourceType) {
option.sourceType = [
'album', 'camera'
]
}
yz._private.call('JsV6.selectImage', {
count: option.count,
sourceType: option.sourceType
}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 6.上传图片
uploadImage: function(option) {
if (!option.success) {
throw Error('lost success function')
}
if (!option.count) {
option.count = 1
}
if (!option.sourceType) {
option.sourceType = [
'album', 'camera'
]
}
yz._private.call('JsV6.uploadImage', {
count: option.count,
sourceType: option.sourceType
}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 7.上传视频
uploadMovie: function(option) {
if (!option.success) {
throw Error('lost success function')
}
if (!option.limitMinute) {
option.limitMinute = 3
}
yz._private.call('JsV6.uploadMovie', {
limitMinute: option.limitMinute
}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 8.顶部颜色
setNavigationBarColor: function(option) {
if (!option.frontColor) {
throw Error('lost frontColor param')
}
if (!option.backgroundColor) {
throw Error('lost backgroundColor param')
}
yz._private.call('JsV6.setNavigationBarColor', {
frontColor: option.frontColor,
backgroundColor: option.backgroundColor
}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 9.播放器
mediaPlayer: function(option) {
if (!option.url) {
throw Error('lost url param')
}
if (!option.skipTime) {
option.skipTime = 0
}
if (option.title === undefined || option.title === null) {
option.title = ''
}
if (option.content === undefined || option.content === null) {
option.content = ''
}
yz._private.call('JsV6.mediaPlayer', {
url: option.url,
skipTime: option.skipTime,
title: option.title,
content: option.content
}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 10.定位获取经纬度
userLocation: function(option) {
if (!option) {
throw Error('lost option')
}
if (!option.success) {
throw Error('lost success function')
}
yz._private.call('JsV6.userLocation', {}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 11.Ap定位
userLocationContainAp: function(option) {
if (!option.bssids) {
throw Error('lost bssids param')
}
yz._private.call('JsV6.userLocationContainAp', {
bssids: option.bssids
}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 12.1获取已连接Wifi信息
getWifiInfo: function(option) {
if (!option) {
throw Error('lost option')
}
if (!option.success) {
throw Error('lost success function')
}
yz._private.call('JsV6.getWifiInfo', {}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 12.2获取已连接Wifi的Mac地址
getMac: function(option) {
if (!option) {
throw Error('lost option')
}
if (!option.success) {
throw Error('lost success function')
}
yz._private.call('JsV6.getMac', {}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 13.打开相机
openCamera: function (option) {
if (!option.success) {
throw Error('lost success function')
}
yz._private.call('JsV6.openCamera', {}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 14.1获取微信AppId
getWXAppId: function (option) {
var resultData = yz._private.callSync('JsV6.getWXAppId', {});
if (resultData.status) {
return resultData.data;
} else {
throw Error(resultData.msg)
}
},
// 14.2微信支付
wechatPay: function (option) {
if (!option.payInfo) {
throw Error('lost payInfo param')
}
if (!option.success) {
throw Error('lost success function')
}
yz._private.call('JsV6.wechatPay', {
payInfo: option.payInfo
}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 15.支付宝支付
aliPay: function (option) {
if (!option.payInfo) {
throw Error('lost payInfo param')
}
if (!option.success) {
throw Error('lost success function')
}
yz._private.call('JsV6.aliPay', {
payInfo: option.payInfo
}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 16.人脸采集
faceLiveCollection: function (option) {
if (!option.live) {
throw Error('lost live param')
}
if (!option.userId) {
throw Error('lost userId param')
}
if (!option.success) {
throw Error('lost success function')
}
yz._private.call('JsV6.faceLiveCollection', {
live: option.live,
userId: option.userId
}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 17.人脸对比
faceCompare: function (option) {
if (!option.userId) {
throw Error('lost userId param')
}
if (!option.success) {
throw Error('lost success function')
}
yz._private.call('JsV6.faceCompare', {
userId: option.userId
}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 18.综合训练读物时间统计时间
openReadWithTimer: function (option) {
if (!option.url) {
throw Error('lost url param')
}
if (!option.openType) {
throw Error('lost openType param')
}
if (!option.title) {
throw Error('lost title param')
}
if (!option.id) {
throw Error('lost id param')
}
if (!option.type) {
throw Error('lost type param')
}
yz._private.call('JsV6.openReadWithTimer', {
url: option.url,
openType: option.openType,
title: option.title,
id: option.id,
type: option.type
}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 19.文件浏览器
fileBrowser: function (option) {
if (!option.url) {
throw Error('lost url param')
}
if (!option.title) {
throw Error('lost title param')
}
yz._private.call('JsV6.fileBrowser', {
url: option.url,
title: option.title
}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 20.打开系统浏览器下载文件
downloadByBrowser: function (option) {
if (!option.url) {
throw Error('lost url param')
}
yz._private.call('JsV6.downloadByBrowser', {
url: option.url
}, function (resultData) {
yz._private.handlerResult(resultData, option)
})
},
// 注册监听
listener: {
// 下一个window返回上一个window触发
nBack: function(functionF) {
yz._private.register("nBack", functionF);
}
},
_private: {
register: function(functionName, functionF) {
if (typeof functionF !== 'function') {
throw Error('param isNot function')
}
if (yz.config.DEBUG) {
console.log('----- 注册监听 -----\n functionName:' + functionName);
}
bridge.register(functionName, functionF);
},
callSync: function (functionName, param) {
var paramString = JSON.stringify(param);
if (yz.config.DEBUG) {
console.log('----- 调用原生方法 -----\n functionName:' + functionName + '\n param:' + paramString);
}
var data = bridge.call(functionName, paramString);
if (yz.config.DEBUG) {
console.log('+++++ 原生方法结果 +++++\n functionName:' + functionName + '\n result:' + data);
}
return JSON.parse(data);
},
call: function(functionName, param, callBack) {
var paramString = JSON.stringify(param);
if (yz.config.DEBUG) {
console.log('----- 调用原生方法async -----\n functionName:' + functionName + '\n param:' + paramString);
}
bridge.call(functionName, paramString, function (data) {
if (yz.config.DEBUG) {
console.log('+++++ 原生方法结果async +++++\n functionName:' + functionName + '\n result:' + data);
}
callBack(JSON.parse(data));
});
},
handlerResult: function (resultData, option) {
/*
resultData = {
status: true,
msg: 'tip',
data: {} or [] or string or number
}
*/
if (resultData.status) {
if (option.success && 'function' === typeof option.success) {
option.success(resultData.data)
}
} else {
if (option.fail && 'function' === typeof option.fail) {
option.fail(resultData.msg)
}
}
if (option.complete && 'function' === typeof option.complete) {
option.complete()
}
}
}
};