ตรวจจับโทรศัพท์ 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)
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

47

ซับเดียวนี่ล่ะ

var isAndroid = /(android)/i.test(navigator.userAgent);

iปรับปรุงถูกใช้เพื่อดำเนินการจับคู่กรณีตาย


เทคนิคที่นำมาจากโครงการทดสอบ Cordova AdMob: https://github.com/floatinghotpot/cordova-admob-pro/wiki/00.-How-To-Use-with-PhoneGap-Build


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

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 แต่ regex นี้มีตัวบ่งชี้ที่ "แพง" ดังนั้นคำตอบของ Philip ที่มีการทดสอบแยกกัน 2 แบบจึงอาจเหมาะสมกว่า
Vadim P.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.