通过Javascript / jQuery检测Android手机

136

如何检测正在使用的设备是移动网站的Android设备?

我需要应用某些CSS属性到Android平台。

谢谢

6个回答

247

看看这个:http://davidwalsh.name/detect-android

JavaScript:

var ua = navigator.userAgent.toLowerCase();
var isAndroid = ua.indexOf("android") > -1; //&& ua.indexOf("mobile");
if(isAndroid) {
  // Do something!
  // Redirect to Android-site?
  window.location = 'http://android.davidwalsh.name';
}

PHP:

$ua = strtolower($_SERVER['HTTP_USER_AGENT']);
if(stripos($ua,'android') !== false) { // && stripos($ua,'mobile') !== false) {
  header('Location: http://android.davidwalsh.name');
  exit();
}

编辑:正如一些评论所指出的那样,这种方法在99%的情况下是可行的,但有一些边缘情况没有被覆盖到。如果你需要一个更高级和更可靠的解决方案来处理JS,你应该使用platform.js:https://github.com/bestiejs/platform.js


5
请勿忘记检查安卓平板电脑:http://googlewebmastercentral.blogspot.com/2011/03/mo-better-to-also-detect-mobile-user.html - user235064
3
值得注意的是,这种方法并不总是适用于安卓设备,例如,Kindle Fire HD设备报告的用户代理根本不包含单词“android”。 - djbp
3
navigator.userAgent方法在三星Galaxy设备上不起作用。浏览器规范中没有“Android”一词。 - AsafK
2
JS解决方案的前两行可以简化为:var isAndroid = /Android/i.test(navigator.userAgent) - Dave Koo
4
你的解决方案不起作用了。这是一个 Nokia Lumia 的用户代理,但猜猜它匹配为 Android: Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 625; Orange) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537 - Sam Jason Braddock
显示剩余2条评论

59

5
这里括号可以省略,因为你不需要“捕获”结果,所以它只变成了:/android/i - SidOfc

3

我认为Michal的回答是最好的,但我们可以更进一步,根据原始问题动态加载Android CSS:

var isAndroid = /(android)/i.test(navigator.userAgent);
if (isAndroid) {
    var css = document.createElement("link");
    css.setAttribute("rel", "stylesheet");
    css.setAttribute("type", "text/css");
    css.setAttribute("href", "/css/android.css");
    document.body.appendChild(css);
}

1
为什么要这样做,而不使用媒体查询呢?JS设备检测应该只用于增强功能,比如添加安装应用的邀请。页面渲染永远不应该依赖它,因为这会导致性能问题和可用性体验非常糟糕。 - camilokawerin
1
@camilokawerin 你的回复应该直接针对作者。我只是在回答他的问题。但有时候你可能需要特定于平台的CSS。例如,如果你想让界面的视觉风格与设备匹配。 - drlarsen

2
;(function() {
    var redirect = false
    if (navigator.userAgent.match(/iPhone/i)) {
        redirect = true
    }
    if (navigator.userAgent.match(/iPod/i)) {
        redirect = true
    }
    var isAndroid = /(android)/i.test(navigator.userAgent)
    var isMobile = /(mobile)/i.test(navigator.userAgent)
    if (isAndroid && isMobile) {
        redirect = true
    }
    if (redirect) {
        window.location.replace('jQueryMobileSite')
    }
})()

0
另一种CSS部分的选项是这样做:
document.documentElement.className += ((/(android)/i.test(navigator.userAgent) ? " android" : " notAndroid");

然后使用简单的CSS选择器,例如:
html.android .mainMenu {
  width: 100%;
}

html.notAndroid .mainMenu {
  width: 50%;
}

-1

JS版本,也可以捕获iPad:

var is_mobile = /mobile|android/i.test (navigator.userAgent);

3
无法工作,因为它捕获了许多设备,不仅包括问题所要求的Android设备。 - NickG
1
使用类似这样的代码:/android.*(?=mobile)/i.test(navigator.userAgent); 来检测 Android 手机。但是这个正则表达式包含了“昂贵”的量词,因此菲利普的答案使用两个单独的测试可能更合适。 - Vadim P.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接