所谓的Hybrid开发就是一层原生App(Native)的的壳,WebView 内嵌 H5。
// schema://forward?t=1446297653344¶m=%7B%22topage%22%3A%22hotel%2Fdetail%20%20%22%2C%22type%22%3A%22h2n%22%2C%22id%22%3A20151031%7D
// 其实就是拦截了 schema://forward 开头的URL
H5 通过某种方式触发一个url -> Native捕获到url,进行处理 -> Native调用H5的JSBridge对象传递回调(执行Javascript方法)。
fnAbc() {
return new Promise((resolve, reject) => {
// 回调完成,返回数据
window.livenessComplete = (res) => {
if (res && res.status === '0') {
resolve(res.data)
} else {
reject('fail')
}
}
// 使用JSBridge
Bridge.liveness(JSON.stringify({ "callBack": "livenessComplete" }))
})
}
// 首先,需要Native端自定义 user-agent
// 附:UA是无法通过JS直接修改的
// 获取 UA
let UA = navigator.userAgent;
// 如果如果已经设置了对应的 UA,那么可以在 UA 中直接获取
["uversion", "udevice"].forEach(function (item) {
var reg = item + "\\/([^\\s]*)";
var res = UA.match(new RegExp(reg));
APPINFO[item] = (res && res[1].toLowerCase()) || false;
});
var browser={
versions: function(){
var u = navigator.userAgent,
app = navigator.appVersion;
return {
trident: u.indexOf('Trident') > -1, //IE内核
presto: u.indexOf('Presto') > -1, //opera内核
webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1,//火狐内核
mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
android: u.indexOf('Android') > -1 || u.indexOf('Adr') > -1, //android终端
iPhone: u.indexOf('iPhone') > -1 , //是否为iPhone或者QQHD浏览器
iPad: u.indexOf('iPad') > -1, //是否iPad
webApp: u.indexOf('Safari') == -1, //是否web应该程序,没有头部与底部
weixin: u.indexOf('MicroMessenger') > -1, //是否微信 (2015-01-22新增)
qq: u.match(/\sQQ/i) == " qq" //是否QQ
};
}(),
language:(navigator.browserLanguage || navigator.language).toLowerCase()
}