Safari浏览器通过通用链接检测移动端特定APP的跳转异常问题求助
Safari浏览器通过通用链接检测移动端特定APP的跳转异常问题求助
大家好,我最近做移动端APP跳转检测的功能,写了下面这段代码,在Chrome(安卓和iOS端)上都能正常工作,但在Safari里遇到了几个头疼的问题,想请教下各位有没有解决思路。
先说说具体的异常表现:
- 当APP已经安装时,调用我的
OpenToolKit函数会弹出一个带有“打开APP”和“取消”按钮的弹窗- 如果在2秒内点击“打开APP”,能正常打开APP,不会跳App Store,这是符合预期的
- 但如果超过2秒再点击“打开APP”,会同时打开APP和跳转到App Store链接,这就出问题了
- 另外,点击弹窗里的“取消”按钮,也会直接跳转到App Store,这不是我想要的,用户取消后应该留在当前网页才对
下面是我目前在用的代码:
OpenToolKit() { let ua = navigator.userAgent.toLowerCase(); let isAndroid = /android|tab|touch|webOS|tablet|mobile/i.test(ua) || navigator.maxTouchPoints > 0; // android检测 let isIphone = ua.indexOf("iphone") > -1 || ua.indexOf("ipad") > -1; // iOS检测 function openApp(url, appStoreUrl) { let isAppOpened = false; window.location.href = url; // 尝试通过自定义URL Scheme打开APP setTimeout(() => { isAppOpened = document.hidden || document.webkitHidden; if (!isAppOpened) { window.location.href = appStoreUrl; // 跳转到App Store } }, 2000); } // 这里根据平台调用openApp,比如iOS传对应的自定义URL和App Store链接 // ... 省略平台判断后的调用逻辑 }
我猜问题出在那个2秒的定时器判断上:Safari的弹窗交互不会立刻触发document.hidden的变化,当用户延迟点击或者取消时,定时器已经触发了跳转逻辑。但我不知道怎么更精准地捕获用户对弹窗的操作,或者有没有更适合Safari的APP跳转检测方案?麻烦各位大佬指点一下!
备注:内容来源于stack exchange,提问作者MFI




