通过Javascript / jQuery检测Android手机


122

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

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

谢谢

Answers:


223

看一下: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
别忘了还要检查Android平板电脑:googlewebmastercentral.blogspot.com/2011/03/...

2
值得注意的是,这并不总是适用于android设备,例如,Kindle Fire HD设备报告的用户代理根本不包含“ android”一词。
djbp

3
navigator.userAgent方法不适用于三星银河设备。浏览器规格中没有“ Android”。
AsafK 2014年

2
JS解决方案的前两行可以简化为:var isAndroid = /Android/i.test(navigator.userAgent)
Dave Koo 2014年

4
您的解决方案不起作用。这是诺基亚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

我认为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 '16

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')
    }
})()

-3

js版本,也赶上iPad:

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

3
不起作用,因为它可以捕获许多设备,而不仅仅是这个问题所需要的Android。
NickG

1
至少使用以下内容:/android.*(?=mobile)/i.test(navigator.userAgent); 检测Android手机。但是此正则表达式包含“昂贵”的量词,因此Philip的2个单独测试的答案可能更合适。
Vadim P.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.