|
|
|
|
|
const getAppPath = () => {
|
|
|
let appPath = document.getElementById('main-wrap').dataset.apppath || 'yohobuy://yohobuy.com/goapp?openby:yohobuy={"action":"go.home","params":{"gender":"1","channel":"2"}}';
|
|
|
|
|
|
return appPath;
|
|
|
};
|
|
|
|
|
|
const u = navigator.userAgent;
|
|
|
const isFromYOHO = /m\.yohobuy\.com/i.test(document.referrer);
|
|
|
const isApp = /yoho/i.test(u) ||
|
|
|
!!window.yohoInterface ||
|
|
|
/app_version=/i.test(location.search) ||
|
|
|
/openrefer=/i.test(location.search);
|
|
|
|
|
|
const isiOS = /(iPhone|iPad|iPod|iOS)/i.test(u); // ios终端
|
|
|
const isAndroid = /Android/i.test(u); // android终端
|
|
|
const isWechatDevtool = /wechatdevtools/i.test(u); // 微信开发者工具
|
|
|
const nodownload = document.getElementById('no-download'); // 页面不需要下载
|
|
|
|
|
|
const getIOSVersion = () => {
|
|
|
const verion = navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);
|
|
|
|
|
|
return verion ? parseInt(verion[1], 10) : 0;
|
|
|
};
|
|
|
const ua = navigator.userAgent;
|
|
|
const isOriginalChrome = /chrome\/[\d.]+ Mobile Safari\/[\d.]+/i.test(ua) &&
|
|
|
isAndroid &&
|
|
|
ua.indexOf('Version') < 0;
|
|
|
|
|
|
const getFallUrl = (schemeUrl) => {
|
|
|
const appPath = (schemeUrl || '').replace('yohobuy://yohobuy.com/goapp?', '') || 'openby:yohobuy={"action":"go.home","params":{"gender":"1","channel":"2"}}';
|
|
|
|
|
|
return `https://union.yoho.cn/union/app-downloads.html?${appPath}`;
|
|
|
};
|
|
|
|
|
|
const checkOpenFall = (url, callFunc, noFall) => {
|
|
|
let time = Date.now();
|
|
|
|
|
|
callFunc();
|
|
|
|
|
|
const fallUrl = getFallUrl(url);
|
|
|
|
|
|
if (noFall) {
|
|
|
return;
|
|
|
}
|
|
|
window.setTimeout(function() {
|
|
|
if (Date.now() - time < 1200) {
|
|
|
window.location.href = fallUrl;
|
|
|
}
|
|
|
}, 1000);
|
|
|
};
|
|
|
|
|
|
const callIframe = (url, noFall) => {
|
|
|
checkOpenFall(url, () => {
|
|
|
const ifr = document.createElement('iframe');
|
|
|
|
|
|
ifr.src = url;
|
|
|
ifr.style.display = 'none';
|
|
|
document.body.appendChild(ifr);
|
|
|
}, noFall);
|
|
|
};
|
|
|
|
|
|
const callUrl = (url, noFall) => {
|
|
|
checkOpenFall(url, () => {
|
|
|
window.location.href = url;
|
|
|
}, noFall);
|
|
|
};
|
|
|
|
|
|
const callA = (url, noFall) => {
|
|
|
checkOpenFall(url, () => {
|
|
|
const ca = document.createElement('a');
|
|
|
|
|
|
ca.setAttribute('href', url);
|
|
|
ca.style.display = 'none';
|
|
|
document.body.appendChild(ca);
|
|
|
|
|
|
ca.click();
|
|
|
}, noFall);
|
|
|
};
|
|
|
|
|
|
const toAppPage = (appUrl, noFall) => {
|
|
|
if (isOriginalChrome) {
|
|
|
callA(appUrl, noFall);
|
|
|
} else if (isiOS) {
|
|
|
if (getIOSVersion() < 9) {
|
|
|
callIframe(appUrl, noFall);
|
|
|
} else {
|
|
|
callUrl(appUrl, noFall);
|
|
|
}
|
|
|
} else {
|
|
|
callIframe(appUrl, noFall);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
const canOpenApp = () => {
|
|
|
if (isWechatDevtool || isApp || isFromYOHO || nodownload) {
|
|
|
return false;
|
|
|
}
|
|
|
return isAndroid || isiOS;
|
|
|
};
|
|
|
|
|
|
export default () => {
|
|
|
return new Promise((resolve) => {
|
|
|
if (canOpenApp()) {
|
|
|
setTimeout(function() {
|
|
|
let appPath = getAppPath();
|
|
|
|
|
|
toAppPage(appPath, true);
|
|
|
resolve();
|
|
|
}, 2000);
|
|
|
} else {
|
|
|
resolve();
|
|
|
}
|
|
|
});
|
|
|
}; |
...
|
...
|
|