-
Notifications
You must be signed in to change notification settings - Fork 11
UserAgent
UserAgent.js is located in global.WebModule.UserAgent. To invoke more easily, it can also be placed in global.UserAgent.
UserAgent.js の名前空間は global.WebModule.UserAgent です。 より手軽に呼び出せるように、global.UserAgent に配置することも可能です。
- UserAgent.DISABLE_CACHE - cache on/off
- UserAgent.parse - parse UserAgent string (without cache)
- new UserAgent - parse UserAgent string (with cache)
UserAgent.DISABLE_CACHE:Boolean = false は new UserAgent(...) の動作を切り替えます。デフォルトは false (キャッシュ有効)です。キャッシュが不要な場合は true を設定します。
UserAgent.parse(userAgent:String = navigator.userAgent, options:Object = {}) はUserAgentをパースし、環境の判別を行い、その結果を Object で返します。
-
userAgent が与えられた場合は与えられた文字列を解析します。デフォルト値は navigator.userAgent です。navigator が存在しない環境では "" になります。
-
options には { FULL_SCREEN:Boolean, FILE_SYSTEM:Boolean, DISPLAY_DPR:Number, DISPLAY_LONG:Integer, DISPLAY_SHORT:Integer } を指定できます。options はユニットテスト用です
-
OS_VERSION や BROWSER_VERSION は SemVer format string (
Major.Minor.Patch
)で返しますua.BROWSER_VERSION // -> "44.0.3"
- MajorとMinorがほしい場合は
parseFloat(ua.BROWSER_VERSION)
で数値の44.0
を取得できます - Majorが欲しい場合は
parseInt(ua.BROWSER_VERSION)
で数値の44
を取得できます
var ua = UserAgent.parse();
ua.OS // -> "iOS"
ua.OS_VERSION // -> "8.1.0"
ua.PC // -> false
ua.MOBILE // -> true
ua.BROWSER // -> "Safari"
ua.BASE_BROWSER // -> "WebKit"
ua.BROWSER_VERSION // -> "8.0.0"
ua.USER_AGENT // -> "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B411 Safari/600.1.4"
ua.LANGUAGE // -> "ja"
ua.WEB_VIEW // -> false
ua.DEVICE // -> "iPhone 5"
ua.TOUCH_3D // -> false
ua.CARRIER // -> ""
ua.FEATURE_PHONE // -> false
ua.ES5 // -> true
ua.ES6 // -> false
ua.ES2015 // -> false
// --- OS ---
ua.iOS // -> true
ua.Mac // -> false
ua.macOS // -> false
ua.Android // -> false
ua.Windows // -> false
// --- Browser ---
ua.IE // -> false
ua.Edge // -> false
ua.Firefox // -> false
ua.Chrome // -> false
ua.Safari // -> true
ua.Silk // -> false
ua.AOSP // -> false
ua.WebKit // -> true
ua.Chromium // -> false
// --- Device ---
ua.iPod // -> false
ua.iPad // -> false
ua.iPhone // -> true
ua.Kindle // -> false
new UserAgent(userAgent:String = navigator.userAgent, options:Object = {}) は必要に応じて UserAgent.parse() を呼び出し Object を返します。
new UserAgent() は UserAgent.DISABLE_CACHE の値で動作が異なります
-
UserAgent.DISABLE_CACHE が false の場合
- キャッシュが存在する場合はキャッシュを返します(userAgent と options を無視します)
- キャッシュが存在しない場合は UserAgent.parse() を実行し、その結果をキャッシュし、キャッシュを返します
-
UserAgent.DISABLE_CACHE が true の場合
- UserAgent.parse() を実行し、その結果を返します(キャッシュは行いません)
var ua = new UserAgent();
OS名です。
"iOS"
, "Mac"
, "Android"
, "Windows"
, "Chrome OS"
, "Firefox OS"
または ""
になります。
Feature Phone では常に "" になります。
Android, iOS, Windows, macOS の OSバージョン番号です。
- フォーマットは SemVer format(
Major.Minor.Patch
) です - Kindle は Android OS のバージョンを返します
- 不明な OS は
"0.0.0"
になります
Feature Phone では常に "" になります。
var ua = new UserAgent();
// get Major.Minor.Patch version string
ua.OS_VERSION // -> "4.4.2"
// get Major.Minor version number
parseFloat( ua.OS_VERSION ) // -> 4.4
// get Major version number
parseInt( ua.OS_VERSION ) // -> 4
MOBILE はモバイル環境(Android, iOS, Windows Phone, Feature Phone) で true になります。
PC はモバイル環境以外で true になります。
Feature Phone では常に false になります。
var ua = new UserAgent()
ua.PC // -> true
ua.MOBILE // -> false
BROWSER はブラウザ名です。判別出来ない場合は空文字列 ""
になります。
BASE_BROWSER はベースとなるブラウザ名です。"Chromium"
, "Firefox"
, "IE"
, "Edge"
, "WebKit"
または ""
のいずれかになります。
以下は BROWSER, BASE_BROWSER と実際のブラウザの対応状況です。
BROWSER | BASE_BROWSERS | Browser Candidates |
---|---|---|
"Chrome" | "Chromium" | - Chrome - Android System WebView - Chromium based Browser - Chrome for Android - Samsung Browser |
"Firefox" | "Firefox" | - Firefox |
"IE" | "IE" | - Internet Explorer (IE 6/7/8/9/10/11) |
"Edge" | "Edge" | - Microsoft Edge |
"AOSP" | "WebKit" | - AOSP browser (Android 2.x - 4.3) |
"Safari" | "WebKit" | - Mac Safari - Mobile Safari |
"WebKit" | "WebKit" | - WebKit based browser (exclude Safari and AOSP) |
"Chrome for iOS" | "WebKit" | - Chrome for iOS (UIWebKit / WKWebKit based) |
"Silk" | "WebKit" or "Chromium" |
- Amazon Silk browser (WebKit or Chromium based) |
"" | "" | Unknown browser |
Feature Phone では、これらは常に "" になります。
ブラウザのバージョン番号です。SemVer formatです。取得出来ない場合は "0.0.0"
になります。
Feature Phone では常に "0.0.0"
になります。
var ua = new UserAgent();
ua.BROWSER_VERSION // -> "30.0.0"
parseFloat( ua.BROWSER_VERSION ) // -> 30.0
parseInt( ua.BROWSER_VERSION ) // -> 30
判別に使用した userAgent を格納しています。
var ua = new UserAgent(navigator.userAgent);
ua.USER_AGENT // -> "Mozilla/5.0 (Linux; Android 4.3; Nexus 7 Build/JWR66N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.111 Safari/537.36";
navigator.language
("language-cultureCode" フォーマットの文字列) から language 部分を取り出した物になります。
navigator.language | LANGUAGE |
---|---|
"en-US" | "en" |
"ja-JP" | "ja" |
var ua = new UserAgent();
ua.LANGUAGE // -> "en"
WebView でページを表示している場合に true になります。
Feature Phone では常に false になります。
Type | OS | Line | その他 | 備考 | ||
---|---|---|---|---|---|---|
WKWebView | 8以上 | ✅ | ✅ | ✅ | 🉑 | 判別可能です |
UIWebView | ✅ | ✅ | ✅ | 🉑 | 判別可能です | |
Chromium WebView |
4.4以上 | ✅ | ✅ | ✅ | 🉑 | 判別可能です |
AOSP/WebKit WebView |
4.3未満 | ❌ | ❌ | ❌ | ❌ | 判別不能です 常にfalseになります |
var ua = new UserAgent();
ua.WEB_VIEW // -> true
Android, iOS, Feature Phone のデバイス名です。それ以外のデバイス(Windows Phone や Firefox OS 端末)には対応していません。
var ua = new UserAgent();
ua.DEVICE // -> "iPhone 5s"
iOS デバイスも可能な限り判別を行っていますが、一部判別できない端末が存在します。
以下は制限になります。
- iPhone 5c は
"iPhone 5"
になります - iPad 1 と iPad mini は
"iPad 2"
になります - iPad mini 3 と iPad Air は
"iPad mini 2"
になります
発売されたばかりの iOS デバイスで、UserAgent.js の対応が完了していない物については "iPhone x"
, "iPad x"
, "iPod x"
といった特殊なデバイス名を返す場合があります。
3D Touch が利用可能なデバイスで true になります。
以下のデバイスで true になります。
- iPhone
- iPhone 6s
- iPhone 6s Plus
- iPhone 7
- iPhone 7 Plus
- iPad
- iPad Pro (iOS 10 + Apple pencil)
- iPad Pro 9.7inch (iOS 10 + Apple pencil)
var ua = new UserAgent();
ua.TOUCH_3D // -> true or false
CARRIER は通信キャリア名になります。値は、"DOCOMO", "KDDI", "SOFTBANK" または "" です。
FEATURE_PHONE は Feature Phone で true になります。
CARRIER と FEATURE_PHONE は Feature Phone用です。Smart Phone では機能しません。
var ua = new UserAgent("DoCoMo/2.0 P07A3(c500;TB;W24H15)");
ua.CARRIER // -> "DOCOMO"
ua.FEATURE_PHONE // -> true
ua.DEVICE // -> "P07A3"
ES5, ES6(ES2015) をサポートしている環境で true になります。
var ua = new UserAgent(); // ES6 ready env
ua.ES5 // -> false
ua.ES6 // -> true
ua.ES2015 // -> true
- ES5 は Object.keys をサポートしている環境で true になります
- ES6 は String.raw をサポートしている環境で true になります
- ES2015 は ES6 の alias です
該当する OS で true になります。Mac は macOS の alias です。
var iPhone6 = "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25";
var ua = new UserAgent(iPhone6);
ua.iOS // -> true
ua.Mac // -> false
ua.macOS // -> false
ua.Android // -> false
ua.Windows // -> false
該当するブラウザで true になります。デフォルトは false です。
以下は BROWSER との対応状況です。
BROWSER | IE | Edge | WebKit | Firefox | Chromium |
---|---|---|---|---|---|
"IE" | true | ||||
"Edge" | true | ||||
"Firefox" | true | ||||
"Chrome" | true | ||||
"Safari" | true | ||||
"Silk" | true | true | |||
"AOSP" | true | ||||
"WebKit" | true | ||||
"Chrome for iOS" | true | ||||
"" |
var ua = new UserAgent(); // iPhone 5s
ua.Safari // -> true
ua.WebKit // -> true
AOSP は Android 4.4 未満に搭載されていた WebKit ベースのブラウザ(AOSP Stock Browser, Android Browser) で true になります。
var ua = new UserAgent(); // Android 4.1, AOSP Browser
ua.AOSP // -> true
該当するデバイスで true になります
var iPhone = "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B411 Safari/600.1.4";
var ua = new UserAgent(iPhone);
ua.iPod // -> false
ua.iPad // -> false
ua.iPhone // -> true
ua.Kindle // -> false
has(property:String):Boolean は、property が存在する場合に true を返します。
get(property:String):Any は、property が存在する場合に対応する value を返します。
var Nexus5 = "Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/BuildID) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36";
var ua = new UserAgent(Nexus5);
ua.OS // -> "Android"
ua.OS_VERSION // -> "4.4.0"
ua.has("OS"); // -> true
ua.get("OS"); // -> "Android"
ua.get("OS_VERSION"); // -> "4.4.0"