检测浏览器是否在Android或iOS设备上运行

sol*_*eil 66 html javascript browser jquery

我需要在移动网站上更改一些按钮和文本,具体取决于用户是在Android或iOS浏览器上查看它.有可靠的方法来执行检查吗?

Ano*_*oop 145

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());
    }
};
Run Code Online (Sandbox Code Playgroud)

  • **首先应该使用Windows Phone更改平台的顺序.**由于许多网站都使用这种操作系统检测,但忽略了Windows Phone,微软决定将"Android"和"iPhone"放入userAgent字符串中好.我在我的网站上使用了这个答案,但我的Lumia 1520总是被认为是一个Android设备.因此,在测试Android和iOS之前,您应该测试"IEMobile". (7认同)

Chr*_*son 13

我会使用该navigator.useragent属性获取useragent-string,解析它,并检测操作系统.

是一个如何做到这一点的例子.

更新:

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

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

  1. 几乎在所有情况下,当人们转向浏览器嗅探时,功能检测将是更好的选择.根据用户可能正在使用的操作系统/浏览器,有一些罕见的边缘情况可能是合适的,但在大多数情况下,使用像Modernizr这样的库来检测对特定功能的支持是一种更好的方法.尝试使您的网站/应用程序适应特定的浏览器,而不是他们支持的功能是一个滑坡.而是检查浏览器是否支持您需要的功能,并在缺少支持时提供polyfill或提供良好的后备功能.
  2. 浏览器嗅探非常复杂.为什么?因为几乎每个浏览器都在其用户代理字符串中或缺少足够的信息以允许某种标识.

话虽如此,如果你真的需要使用浏览器/操作系统检测,那么不要重新发明轮子,不要试图自己做 - 你将陷入一个痛苦和模糊的警告的世界!我建议您使用像WhichBrowser这样的库,它将为您提供一个方便的JavaScript对象,其中包含有关操作系统,浏览器,渲染引擎和设备的信息.


小智 1

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