Виявити телефон Android через Javascript / jQuery


122

Як я можу виявити, що використовуваний пристрій - це веб-сайт Android для мобільних пристроїв?

Мені потрібно застосувати певні атрибути css до платформи Android.

Дякую

Відповіді:


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 не працює на пристроях Samsung Galaxy. У специфікації браузера немає "Android".
AsafK

2
Перші два рядки рішення JS можна спростити до:var isAndroid = /Android/i.test(navigator.userAgent)
Дейв Куо

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
Сем Джейсон Бреддок


2

Я вважаю, що відповідь Міхала найкраща, але ми можемо зробити її на крок далі і динамічно завантажувати 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')
    }
})()

-3

версія js також захоплює iPad:

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

3
Не працює, тому що ловить багато пристроїв, а не лише Android, як вимагає питання.
NickG

1
Використовуйте хоча б щось подібне: /android.*(?=mobile)/i.test(navigator.userAgent); виявити телефон Android. Але цей регулярний вираз містить "дорогі" квантори, тому відповідь Філіпа з двома окремими тестами може бути більш доречною.
Вадим П.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.