http://whatsmyuseragent.com/ に移動すると、4.2.1を実行しているGalaxy NexusのストックAndroidブラウザーにユーザーエージェントが表示されます
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24
このユーザーエージェントには、ストックAndroidブラウザーであることを一意に検出できるものはありません。 ChromeアプリのAndroidには、少なくともUAにAndroid
があります。ストックAndroidアプリを検出する方法はありますか?
var navU = navigator.userAgent;
// Android Mobile
var isAndroidMobile = navU.indexOf('Android') > -1 && navU.indexOf('Mozilla/5.0') > -1 && navU.indexOf('AppleWebKit') > -1;
// Apple webkit
var regExAppleWebKit = new RegExp(/AppleWebKit\/([\d.]+)/);
var resultAppleWebKitRegEx = regExAppleWebKit.exec(navU);
var appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : parseFloat(regExAppleWebKit.exec(navU)[1]));
// Chrome
var regExChrome = new RegExp(/Chrome\/([\d.]+)/);
var resultChromeRegEx = regExChrome.exec(navU);
var chromeVersion = (resultChromeRegEx === null ? null : parseFloat(regExChrome.exec(navU)[1]));
// Native Android Browser
var isAndroidBrowser = isAndroidMobile && (appleWebKitVersion !== null && appleWebKitVersion < 537) || (chromeVersion !== null && chromeVersion < 37);
「Android Browser」はブラウザの名前です。おそらく混乱しますが、このような質問では、そうすべきではありません。大半のAndroidデバイスが付属しているブラウザーであり、Chromeについては明らかに話していない。
http://www.useragentstring.com/ によると、これはAndroid Stock Browser文字列の完全なリストです。現在、より良い方法があるかどうかはわかりません。一度にすべてを選択します。いくつかは追加され続けるため、また、Androidで誤ってChromeをターゲットにしないようになります。これについて行く方法。
Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
Mozilla/5.0 (Linux; U; Android 2.3; en-us) AppleWebKit/999+ (KHTML, like Gecko) Safari/999.9
Mozilla/5.0 (Linux; U; Android 2.3.5; zh-cn; HTC_IncredibleS_S710e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; HTC Vision Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.3.4; fr-fr; HTC Desire Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; T-Mobile myTouch 3G Slide Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC_Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC_Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari
Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.3.3; ko-kr; LG-LU3000 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile
Mozilla/5.0 (Linux; U; Android 2.3.3; de-de; HTC Desire Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.3.3; de-ch; HTC Desire Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.2; fr-lu; HTC Legend Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.2; en-sa; HTC_DesireHD_A9191 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.2.1; fr-fr; HTC_DesireZ_A7272 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.2.1; en-gb; HTC_DesireZ_A7272 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.2.1; en-ca; LG-P505R Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.2.1; de-de; HTC_Wildfire_A3333 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.1-update1; es-mx; SonyEricssonE10a Build/2.0.A.0.504) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17
Mozilla/5.0 (Linux; U; Android 1.6; ar-us; SonyEricssonX10i Build/R2BA026) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1
現在のところ、これを検出する真の方法はありません。私は現在Android 4.2.2ストックGalaxy S4 AT&Tを使用しており、デフォルトのブラウザにはユーザーエージェントにChromeがありますが、TouchWizの問題はまだあります位置固定)
Samsungがa)touchwizを修正するか、b)ua文字列からchromeを削除するまで、Androidデフォルトブラウザを検出する真の方法はありません。これはすべての4.2x +電話に当てはまりますが、これは製造/ブラウザ固有のクエリを必要とする開発チームにとって大きな問題です。
私は、モバイルエンドWebアプリのアクティブな開発チームの一員です。TouchWizは、開発中のさまざまな側面について多くの問題を引き起こしているようです。
もう1つの問題は、Dolphin(素晴らしいブラウザ、ひどいUA)のような企業があり、これらのすべての場合、「dolphin」文字列を提供せず、AppleWebKit534xを使用するため、デフォルトのブラウザとして表示されます。
また、ユーザーエージェント文字列のUに関しては、どのブラウザとも関係がありません。実際には、これは各ブラウザーで使用されている暗号化方法(通常は場所に基づく標準)に関係しています
「Netscape NavigatorやInternet Explorerなど、米国で作成されたWebブラウザーは、U、I、およびNの文字を使用してユーザーエージェント文字列で暗号化強度を指定します。1996年まで、米国政府はキーによる暗号化をより長く禁止しましたベンダーは、40ビットをエクスポートするために、さまざまな暗号化強度のさまざまなブラウザバージョンを出荷しました。「U」は「USA」(128ビット暗号化バージョン)、「I」は「International」を表します。ビット暗号化であり、世界のどこでも使用できます。また、「N」は「なし」(暗号化なし)を意味します(事実上)。[10]輸出規制の撤廃後、ほとんどのベンダーは256ビット暗号化をサポートしました。
ソース: http://en.wikipedia.org/wiki/User_agent#Encryption_strength_notations
efusien's answer(Nov 11 '13 at 20:18)for work、ただし、変数は宣言されておらず、セミコロンの代わりにコンマが1つの場所で使用されていましたコピー/貼り付けの回答を探している人にとっては大きな失敗になります。
「ネイティブブラウザの場合」条件を使用した実用的な例を含めて、以下が私にとってうまくいったものです。
var navU = navigator.userAgent;
// Android Mobile
var isAndroidMobile = navU.indexOf('Android') > -1 && navU.indexOf('Mozilla/5.0') > -1 && navU.indexOf('AppleWebKit') > -1;
// Android Browser (not Chrome)
var regExAppleWebKit = new RegExp(/AppleWebKit\/([\d.]+)/);
var resultAppleWebKitRegEx = regExAppleWebKit.exec(navU);
var appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : parseFloat(regExAppleWebKit.exec(navU)[1]));
var isAndroidBrowser = isAndroidMobile && appleWebKitVersion !== null && appleWebKitVersion < 537;
$(window).load(function() {
if (isAndroidBrowser) {
// It's Android's native browser (and not Chrome), so do something
}
});
「Linux; U; Android」の存在は、ストックブラウザの一貫した差別化要因のようです。 「U」の意味を誰が知っているのかはわかりませんが、将来的には信頼性がなくなると思います。うまくいけば、ブラウザが消えるか、文字列が変更されるとChromeのように再生を開始します。他のいくつかの文字列は比較のために下にあります
Android Chrome:「Mozilla/5.0(Linux; Android 4.1.2; SAMSUNG-SGH-I727 Build/JZO54K)AppleWebKit/537.36(KHTML、Geckoなど)Chrome/28.0.1500.94 Mobile Safari/537.36 "
Android Firefox:「Mozilla/5.0(Android; Mobile; rv:23.0)Gecko/23.0 Firefox/23.0」
Android Opera:「Mozilla/5.0(Linux; Android 4.1.2; SAMSUNG-SGH-I727 Build/JZO54K)AppleWebKit/537.36(KHTML、Geckoなど)Chrome/28.0.1500.63 Mobile Safari/537.36 OPR/15.0.1162.61541 "
サーバー側のUAスニッフィングの代わりにJavaScriptがオプションの場合は、(!!window.chrome) && (!window.chrome.app)
を試してください。 ただし、これが「安全」であること、「永久に」動作すること、またはそのようなことを保証することはできません。テスト目的のみに使用するのは悪意のあるハックと考えてください。
説明:Chrome(またはChromium?)ブラウザ(まあ、ここでテストしたものはChrome and = Android株式)にはwindow.chrome
という名前のオブジェクトがありますが、Android株式ブラウザ、少なくとも私がテストしたもの、このオブジェクトにはapp
プロパティがありません。
編集:古いChromeバージョンはこのソリューションで誤検知を与えます。順番に、ストックブラウザの新しいバージョンは「偽陰性」を与えます。
あなたはこれを探していると思います:
Androidネイティブブラウザーはバージョン534.30より上に更新されていないため、バージョンとAndroid UA文字列の組み合わせにフィルターできます(上記では、Chromeブラウザー)
これが私のサンプルJavaScriptコードです。
(特定のスタイリングが必要な場合は、次のJSスニペットでボディにクラスを追加します)
var defectAndroid = $window.navigator && $window.navigator.userAgent.indexOf('534.30') > 0 && $window.navigator.userAgent.toLowerCase().match(/Android/);
if (defectAndroid) {
// sample code specific for your Android Stock browser
}
(一部のAndroid 'Android'を報告するデバイスのため、小文字の会話が必要です)
私はAndroid Box Browserがボックスサイズを適切に処理していないように見えるため、いくつかのカスタムスタイルを追加するためにストックブラウザを検出する必要があります。 。(Galaxy Note 2でストックブラウザーを検出しませんでした)
var navU = navigator.userAgent;
var isAndroidMobile = navU.indexOf('Android') > -1 && navU.indexOf('Mozilla/5.0') > -1 && navU.indexOf('AppleWebKit') > -1;
var regExAppleWebKit = new RegExp(/AppleWebKit\/([\d.]+)/);
var resultAppleWebKitRegEx = regExAppleWebKit.exec(navU);
var appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : parseFloat(regExAppleWebKit.exec(navU)[1]));
var isAndroidStockBrowser = isAndroidMobile && (appleWebKitVersion !== null && appleWebKitVersion < 535);
たぶん、これは他の誰かにも役立つでしょう。
デスクトップビューを使用しているため、UAでAndroid
を取得できません。これがそのモードのモバイルデバイスであることを識別する方法はないようです。通常の表示に切り替えると、正しいUAが表示されます。
Nickとefusienの回答からの参照。これは、Android OS 4.4.2で動作します
// Native Android Browser
var navU = navigator.userAgent;
var isAndroidMobile = navU.indexOf('Android') > -1 && navU.indexOf('Mozilla/5.0') > -1 && navU.indexOf('AppleWebKit') > -1;
var regExAppleWebKit = new RegExp(/AppleWebKit\/([\d.]+)/);
var resultAppleWebKitRegEx = regExAppleWebKit.exec(navU);
var appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : parseFloat(regExAppleWebKit.exec(navU)[1]));
var regExChrome = new RegExp(/Chrome\/([\d.]+)/);
var resultChromeRegEx = regExChrome.exec(navU);
var chromeVersion = (resultChromeRegEx === null ? null : parseFloat(regExChrome.exec(navU)[1]));
var isAndroidBrowser = isAndroidMobile && (appleWebKitVersion !== null && appleWebKitVersion >= 537) && (chromeVersion !== null && chromeVersion < 29);
現在KitKatでは、Android=はAndroid Chrome=と同じWebKit 537.36を使用しています。userAgentをログに記録するとき。chromeVersion<29もチェックすると、ブラウザのAndroid 4.4.2。(Samsung S4のChromeバージョンは現在40です)。
異なるAndroid version: http://jimbergman.net/webkit-version-in-Android-version/ のこのリンクWebKitテーブルを参照してください。
Samsung Galaxy Note 3 running Android 4.4.2には、ストック「インターネット」ブラウザ用の次のUA文字列があります(not Chromeまたはその他のブラウザ):
Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-N900 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36
Samsung Galaxy S5を実行しているAndroid 4.4.2には、ストック「インターネット」ブラウザ用の次のUA文字列があります(not Chromeまたはany他のブラウザ):
Mozilla/5.0 (Linux; Android 4.4.2; en-gb; SAMSUNG SM-G900H Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.6 Chrome/28.0.1500.94 Mobile Safari/537.36
AppleWebKit <537のみをチェックすることはできなくなりました。
現在、AppleWebKit <537 OR =Chrome <29ユーザーefusienの方法を使用しているかどうかを確認しています。
正規表現が必要な場合:
/Android[\s|/].+(AppleWebKit|Nokia)(.(?!Chrome|Presto|UCBrowser))+.$/gi