【问题标题】:Detect if browser is running on an Android or iOS device检测浏览器是否在 Android 或 iOS 设备上运行
【发布时间】:2012-09-18 08:17:37
【问题描述】:

我需要根据用户是在 Android 浏览器还是 iOS 浏览器上查看移动网站上的一些按钮和文本。是否有可靠的方法来执行检查?

【问题讨论】:

标签: javascript jquery html browser


【解决方案1】:
var isMobile = {
    Windows: function() {
        return /IEMobile/i.test(navigator.userAgent);
    },
    Android: function() {
        return /Android/i.test(navigator.userAgent);
    },
    BlackBerry: function() {
        return /BlackBerry/i.test(navigator.userAgent);
    },
    iOS: function() {
        return /iPhone|iPad|iPod/i.test(navigator.userAgent);
    },
    any: function() {
        return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Windows());
    }
};

【讨论】:

  • 很遗憾,Android 手机和平板电脑将被识别为移动设备,因此平板电脑最终会显示手机视图。
  • 在我的 iPad mini 上,iOS 功能在 safari 中有效,但在使用 google chrome 时无效。在我的 iPhone 5 上,它适用于 safari 和 chrome。编辑:我在 iPhone 上有 iOS 7,在 iPad 上有 iOS6
  • 对于希望在此处报告损坏的未来用户,请包含用户代理字符串。
  • 平台的顺序应该随着 Windows Phone 的出现而改变。 由于许多网站确实使用这种操作系统检测,但忽略了 Windows Phone,微软决定将“ Android" 和 "iPhone" 也放入 userAgent 字符串。我在我的网站上使用了这个答案,但我的 Lumia 1520 总是被识别为 Android 设备。因此,在测试 Android 和 iOS 之前,您应该测试“IEMobile”。
  • @Anoop 应该更新他的答案并把 windows phone 放在首位,以解决 andrino 之前评论中提到的错误。
【解决方案2】:

我会使用navigator.useragent 属性来获取用户代理字符串,对其进行解析,然后检测操作系统。

Here 是一个例子。

更新:

由于这个问题很受欢迎,我想我会在我的答案中添加一些额外的信息。

一般来说,浏览器嗅探几乎从来都不是最好的方法。为什么?嗯,有很多原因,但这里有两个很好的原因:

  1. 在人们转向浏览器嗅探的几乎所有情况下,特征检测都是更好的选择。在极少数情况下,可能适合根据用户可能使用的操作系统/浏览器采取行动,但在大多数情况下,使用像 Modernizr 这样的库来检测对特定功能的支持是一种更好的方法.试图使您的站点/应用程序适应特定的浏览器而不是它们支持的功能是一个滑坡。而是检查浏览器是否支持您需要的功能,并在缺少支持时使用 polyfill 或提供不错的回退。
  2. 浏览器嗅探非常复杂。为什么?因为几乎每个浏览器都位于其用户代理字符串中,或​​者缺少足够的信息来进行特定识别。

话虽如此,如果您真的需要使用浏览器/操作系统检测,请不要重新发明轮子,也不要尝试自己动手 - 您将进入一个痛苦而晦涩的世界警告!我建议你使用像 WhichBrowser 这样的库,它会为你提供一个方便的 JavaScript 对象,其中包含有关操作系统、浏览器、渲染引擎和设备的信息。

【讨论】:

    【解决方案3】:

    您可以使用导航器对象:http://www.w3schools.com/js/js_browser.asp,然后根据导航器的属性使用 if 语句。

    【讨论】:

      【解决方案4】:

      我已经用了一段时间了。基于移动设备的简单检查以查看返回 true 或 false。

      var isMobile = (/Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Windows Phone/i.test(navigator.userAgent)) ? true : false;
      

      【讨论】:

        猜你喜欢
        • 2013-07-12
        • 2011-12-25
        • 1970-01-01
        • 2014-12-20
        • 1970-01-01
        • 2018-02-19
        • 2013-02-03
        • 2012-12-30
        相关资源
        最近更新 更多