頁面邏輯
- 微信直接跳轉(zhuǎn)到應(yīng)用寶
- QQ
- ios : 沒有下載直接跳appstore
- 安卓: scheme喚起鲁冯, 如果失敗跳轉(zhuǎn)應(yīng)用寶
- 微博: 直接使用schema
- safari瀏覽器:
- 10以上直接跳appstore
- 10以下直接跳應(yīng)用寶
- 其他情況統(tǒng)一跳應(yīng)用寶
頁面代碼
var Browser = (function() {
function Browser() {}
/**
* 獲取瀏覽器數(shù)據(jù)
*/
Browser.getBrowser = function() {
var UA = navigator.userAgent || ''
var isAndroid = (function() {
return UA.match(/Android/i) ? true : false
})()
var isQQ = (function() {
return /(iPad|iPhone|iPod).*? (IPad)?QQ\/([\d\.]+)/.test(UA) || /\bV1_AND_SQI?_([\d\.]+)(.*? QQ\/([\d\.]+))?/.test(UA)
})()
var isIOS = (function() {
return UA.match(/iPhone|iPad|iPod/i) ? true : false
})()
var isSafari = (function() {
return /iPhone|iPad|iPod\/([\w.]+).*(safari).*/i.test(UA)
})()
var isWx = (function() {
return UA.match(/micromessenger/i) ? true : false
})()
var isWb = (function() {
return UA.match(/weibo/i) ? true : false
})()
var isAndroidChrome = (function() {
return (UA.match(/Chrome\/([\d.]+)/) || UA.match(/CriOS\/([\d.]+)/)) && isAndroid && !isQQ
})()
var isQZ = (function() {
return UA.indexOf('Qzone/') !== -1
})()
var browser = {
isAndroid: isAndroid,
isIOS: isIOS,
isSafari: isSafari,
isQQ: isQQ,
isWb: isWb,
isWx: isWx,
isQZ: isQZ,
isAndroidChrome: isAndroidChrome
}
return browser
}
return Browser
})()
/**
* AppLink:H5喚起APP的所有方法
*/
var AppLink = (function() {
/**
* @param config IAppLink類型的config文件
*/
function AppLink(config) {
/**
* 傳入的config數(shù)據(jù)缨叫,以接口約束
*/
this.UA = navigator.userAgent || ''
this.config = config || {}
}
/**
* 跳轉(zhuǎn)函數(shù)
* @param url 鏈接
*/
AppLink.prototype.go = function(url) {
window.location.href = url
}
/**
* 檢查是否喚起
* @param cb 回調(diào)函數(shù)
*/
AppLink.prototype.checkOpen = function(cb) {
var inter = null
var statue = false
var count = 0
inter = window.setInterval(function() {
count++
statue = document.hidden || document.webkitHidden
if (statue || count > 40) {
cb(statue)
clearInterval(inter)
}
}, 50)
}
/**
* 外部調(diào)用的入口函數(shù)
*/
AppLink.prototype.open = function() {
var _this = this
var browser = Browser.getBrowser()
var config = this.config
// 微信直接跳 應(yīng)用寶
if (browser.isWx) {
this.go(this.config.yyb)
} else if (browser.isQQ) {
if (browser.isIOS) {
// 沒有下載
this.checkOpen(function(isSuccess) {
if (!isSuccess) {
_this.go(_this.config.appstore)
}
})
}
// iOS跳到AppStore
if (browser.isAndroid) {
// 使用scheme喚起
this.tryCallApp(this.config.schema)
// 喚起失敗 跳到應(yīng)用寶
this.checkOpen(function(isSuccess) {
if (!isSuccess) {
_this.go(_this.config.yyb)
}
})
}
} else if (browser.isWb) {
// 使用scheme喚起
this.tryCallApp(this.config.schema)
// 微博:?jiǎn)酒鹗。膊惶D(zhuǎn)缅糟,會(huì)有引導(dǎo)功能
} else if (browser.isSafari) {
var version = this.getIOSVersion()
// iOS10以下不支持直接跳轉(zhuǎn)到AppStore挺智,跳到應(yīng)用寶
if (version < 10) {
this.go(this.config.yyb)
} else {
this.go(this.config.appstore)
}
} else {
// 其他情況,直接跳應(yīng)用寶
this.go(this.config.yyb)
}
}
/**
* 下載按鈕的url地址
*/
AppLink.prototype.getDownloadUrl = function() {
var browser = Browser.getBrowser()
var config = this.config
var url = ''
if (browser.isQQ) {
if (browser.isIOS) {
url = this.config.appstore
} else {
url = this.config.yyb
}
} else if (browser.isSafari) {
var version = this.getIOSVersion()
if (version < 10) {
url = this.config.yyb
} else {
url = this.config.appstore
}
} else if (browser.isWb) {
url = ''
} else {
url = this.config.yyb
}
return url
}
/**
* 嘗試喚起APP
* @param scheme 喚起的scheme
*/
AppLink.prototype.tryCallApp = function(scheme) {
var aLink = document.createElement('a'),
body = document.body
aLink.href = scheme
body.appendChild(aLink)
aLink.click()
}
/**
* 判斷iOS版本
*/
AppLink.prototype.getIOSVersion = function() {
var ver = navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/)
var version = parseInt(ver[1], 10)
return version
}
return AppLink
})()
module.exports = AppLink