Skip to content
uupaa edited this page Apr 10, 2017 · 44 revisions

Namespace

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 に配置することも可能です

API

UserAgent.DISABLE_CACHE

UserAgent.DISABLE_CACHE:Boolean = falsenew UserAgent(...) の動作を切り替えます。デフォルトは false (キャッシュ有効)です。キャッシュが不要な場合は true を設定します。

UserAgent.parse

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

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

OS名です。

"iOS", "Mac", "Android", "Windows", "Chrome OS", "Firefox OS" または "" になります。

Feature Phone では常に "" になります。

OS_VERSION

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

PC

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

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 では、これらは常に "" になります。

BROWSER_VERSION

ブラウザのバージョン番号です。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

USER_AGENT

判別に使用した 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";

LANGUAGE

navigator.language ("language-cultureCode" フォーマットの文字列) から language 部分を取り出した物になります。

navigator.language LANGUAGE
"en-US" "en"
"ja-JP" "ja"
var ua = new UserAgent();

ua.LANGUAGE // -> "en"

WEB_VIEW

WebView でページを表示している場合に true になります。

Feature Phone では常に false になります。

Type OS Facebook Twitter Line その他 備考
WKWebView 8以上 🉑 判別可能です
UIWebView 🉑 判別可能です
Chromium
WebView
4.4以上 🉑 判別可能です
AOSP/WebKit
WebView
4.3未満 判別不能です
常にfalseになります
var ua = new UserAgent();

ua.WEB_VIEW // -> true

DEVICE

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" といった特殊なデバイス名を返す場合があります。

TOUCH_3D

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

FEATURE_PHONE

CARRIER は通信キャリア名になります。値は、"DOCOMO", "KDDI", "SOFTBANK" または "" です。

FEATURE_PHONE は Feature Phone で true になります。

CARRIERFEATURE_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

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 になります
  • ES2015ES6 の alias です

iOS

Mac

macOS

Android

Windows

該当する OS で true になります。MacmacOS の 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

IE

Edge

Firefox

Chrome

Safari

Silk

AOSP

WebKit

Chromium

該当するブラウザで 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

iPod

iPad

iPhone

Kindle

該当するデバイスで 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

get

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"