注意:在JavaScript中直接判断用户手机上是否安装了特定的APP是不可能的,因为JavaScript运行在浏览器环境中,出于安全和隐私考虑,它没有权限访问用户的本地文件系统或已安装应用的信息。但是,你可以通过一种间接的方式来实现这个需求,即尝试唤起该APP,如果失败则引导用户去下载。
利用时间检测
因为现在部分浏览器需要用户确认后才会跳转到外部APP,所以会因为超时被判定为未安装APP,目前无解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| function openAppOrRedirect (appUrl, downloadLink) { let timer; const iframe = document.createElement('iframe'); iframe.style.display = 'none'; iframe.onload = function () { clearTimeout(timer); document.body.removeChild(iframe); }; iframe.onerror = function () { clearTimeout(timer); document.body.removeChild(iframe); console.log('APP未安装或链接错误') redirectToStore(downloadLink); };
timer = setTimeout(function () { iframe.onerror(); }, 2000);
iframe.src = appUrl; document.body.appendChild(iframe); }
function redirectToStore (downloadLink) { const userAgent = navigator.userAgent.toLowerCase(); if (/(ipad|iphone|ipod)/.test(userAgent)) { window.location.href = downloadLink.ios; } else if (/android/.test(userAgent)) { window.location.href = downloadLink.android; } }
|
1 2 3 4 5 6 7 8
| const downloadLink={ ios: 'https://apps.apple.com/cn/app/id123456789', android: 'https://play.google.com/store/apps/details?id=com.example.app' } const scheme = 'snssdk1128://aweme/detail/6814634004747193615';
openAppOrRedirect(scheme, downloadLink);
|
获取手机品牌
JavaScript可以通过解析navigator.userAgent
字符串来获取关于用户设备的某些信息,包括手机品牌的线索。不过,这种方法并不完全可靠,因为用户代理字符串可以被修改,且不同厂商可能有不同的标识方式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| function getMobileBrand () { var userAgent = navigator.userAgent.toLowerCase(); if (/iphone/i.test(userAgent)) { return 'Apple'; } else if (/huawei/i.test(userAgent) || /honor/i.test(userAgent)) { return 'Huawei'; } else if (/oppo/i.test(userAgent) || /pacm00/i.test(userAgent)) { return 'OPPO'; } else if (/vivo/i.test(userAgent)) { return 'Vivo'; } else if (/mi\s/i.test(userAgent) || /redmi/i.test(userAgent) || /mix\s/i.test(userAgent)) { return 'Xiaomi'; } else if (/sm-/i.test(userAgent)) { return 'Samsung'; } else { return 'Unknown'; } }
|