JavaScript / jQueryを介してAndroidフォンを検出する


122

使用中のデバイスがモバイルWebサイト用のAndroidであることをどのように検出しますか?

Androidプラットフォームに特定のcss属性を適用する必要があります。

ありがとう

回答:


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
たとえば、Kindle Fire HDデバイスによって報告されるユーザーエージェントには「android」という単語がまったく含まれていないため、これはAndroidデバイスでは常に機能するとは限りません。
djbp 2013年

3
navigator.userAgentアプローチは、samsungギャラクシーデバイスでは機能しません。ブラウザの仕様に「Android」はありません。
AsafK 2014

2
:JS溶液の最初の2行はに簡略化することができるvar isAndroid = /Android/i.test(navigator.userAgent)
デイブクー

4
あなたの解決策は機能しません。これがNokia Lumiaユーザーエージェントです。そして、何を推測しますか?それはアンドロイドと一致します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

私は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 2016

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 2013

1
少なくとも次のようなものを使用してください:/android.*(?=mobile)/i.test(navigator.userAgent); Androidフォンを検出します。しかし、この正規表現には「高価な」数量詞が含まれているため、2つの個別のテストによるフィリップの回答の方が適切な場合があります。
Vadim P.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.