1 // 检查app是否打开
2 function checkOpen(cb) {
3 const clickTime = +(new Date());
4 function check(elsTime) {
5 if (elsTime > 3000 || document.hidden || document.webkitHidden) {
6 cb(true);
7 } else {
8 cb(false);
9 }
10 }
11 // 启动间隔20ms运行的定时器,并检测累计消耗时间是否超过3000ms,超过则结束
12 let count = 0;
13 let intHandle = null;
14 intHandle = setInterval(() => {
15 count++;
16 const elsTime = +(new Date()) - clickTime;
17 if (count >= 100 || elsTime > 3000) {
18 clearInterval(intHandle);
19 check(elsTime);
20 }
21 }, 20);
22 }
23 /**
24 * 唤起app
25 * @param {any} uri app schema
26 * @param {any} fallback 唤起失败回调
27 */
28 function openApp(uri, fallback) {
29 const ifr = document.createElement('iframe');
30 ifr.src = uri;
31 ifr.style.display = 'none';
32 if (fallback) {
33 checkOpen((opened) => {
34 if (!opened) {
35 fallback();
36 }
37 });
38 }
39 document.body.appendChild(ifr);
40 setTimeout(() => {
41 document.body.removeChild(ifr);
42 }, 2000);
43 }