如果在 iOS 9+ 上的 Safari 中手机上安装了应用程序,如何从 Javascript 检查?

Posted

技术标签:

【中文标题】如果在 iOS 9+ 上的 Safari 中手机上安装了应用程序,如何从 Javascript 检查?【英文标题】:How to check from Javascript if an app is installed on the phone in Safari on iOS 9+? 【发布时间】:2021-04-02 11:19:35 【问题描述】:

ios 9 之前,通过 javascript 检查是否在 iPhone 上安装应用的一种方法是使用自定义 URI 方案,然后使用超时:

window.location = "yourapp://";
setTimeout(function() 
  window.location = "https://yourdomain.com";
, 25);

如果应用程序已安装 - 它会打开应用程序并且永远不会执行超时,因为当应用程序打开时 javascript 会停止执行。

但在 iOS 9+ 上的 safari 中,window.location = "yourapp://"; 行会显示一个弹出窗口,询问用户是否要打开应用程序。基本上,由于这个原因,Javascript 不会被阻止执行,并且超时会在应用程序打开之前执行,因此应用程序商店会打开而不是应用程序。

Tl;dr- 在 iOS 9+ 中,在 Safari 中,如果安装了应用程序,即使这样,应用程序商店也会使用此代码打开。因此,无法再使用此代码来检查应用程序何时安装以及何时未安装。

那么有没有办法通过网页中的 Javascript 来检查运行 iOS 9+ 的 iPhone 上是否安装了应用程序?

【问题讨论】:

【参考方案1】:

你可以使用

navigator.userAgent



// You can extract the Device, OS version and more

//This is the output on iPhone X
//Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (Khtml, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"

【讨论】:

以上是关于如果在 iOS 9+ 上的 Safari 中手机上安装了应用程序,如何从 Javascript 检查?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 9 上 Internet Explorer 11 和 Safari 的强元素上的不同字体

Facebook iOS 9 SDK 登录重定向到 Safari 上的 mbasic.facebook.com

图像无法在 iOS 上的 Safari 上加载

iOS 9 上的 Safari 不会触发隐藏输入文件的点击事件

CSS 滚动捕捉点在 iOS 9.1 Safari 中不起作用

Cordova 3.1 在 iOS6 上的 Safari 中打开链接