从浏览器检测移动应用程序

时间:2014-05-01 14:26:17

标签: javascript detection mobile-application

我想通过JS检测用户是否安装了特定的应用程序。

我知道将会弹出通用的应用程序商店标签"下载此应用程序"如果他们没有安装它。我不是在问这个问题。

我有一个概念,但它不完整。这将尝试针对iPhone和Android设备。

知道具有特定前缀的链接可以触发应用程序打开:

  1. 使用JS定位隐藏的iframe,打开一个前缀为触发该应用的网址
  2. 如果页面加载,该页面会将帖子消息重新发送回父级,表示该应用程序未打开。
  3. 如果该应用程序存在,该邮件将永远不会被回复给父级,因为它将在应用程序中打开。
  4. 不幸的是,我的客户不希望应用程序自动打开(或尝试打开),但只是知道它是否已安装。

    思考?在我的逻辑中发出错误?变通?现有方案?

    由于

2 个答案:

答案 0 :(得分:0)

可能无法做到这一点,因为一般来说,您不能从网页上浏览用户的设备。即使用户执行或未安装的应用程序并不是最敏感的个人信息,但将这些信息暴露给来自Web的脚本仍然存在一些安全/隐私问题。应用程序商店标签可能是您最接近的标签,因为它是提供类似但受保护功能的官方API。

答案 1 :(得分:0)

我可以想到两种尝试解决问题的方法,尽管没有一种方法特别好。从iOS 6开始,您可以使用Smart App Banners来宣传应用。

最明显的解决方案是隐藏用户的任何操作,例如通过阻止在发出URL请求后显示活动。我对此没有任何经验,也无法告诉您隐藏它的程度。

说实话,我不知道第二种方法是否适用于移动设备。它已经被大量用于桌面应用程序,并允许应用程序间通信 - 包括浏览器和应用程序之间的通信。但是,由于移动设备通常具有高安全性限制,因此可能性有限。这是一个高度理论性的建议,因为我很确定它是不合适的,是否可能 您的应用必须在未使用但固定的端口上提供微型HTTP服务器。然后,您的JavaScript代码可以使用JSONP与应用程序通信(假设浏览器的安全限制不会阻止此操作)。如果通信失败,您可能认为未安装该应用程序。

在任何人试图批评这种方法之前,让我说这是理论上的可能性,可能不稳定,并且不适合大多数应用。对于这样的次要任务,运行HTTP服务器的工作量太高了。