blob: df9fdf3a5d6d3e8e4a0eefd9f20c6d3ae2acc80b [file] [log] [blame]
import './version'
import './params'
const lib = window.lib || (window.lib = {})
const env = lib.env || (lib.env = {})
const ua = window.navigator.userAgent
let match
/**
* os
*/
match = ua.match(/Windows\sPhone\s(?:OS\s)?([\d.]+)/)
if (match) {
/**
* @type {Object}
* @memberof lib.env
* @property {String} name - os name, e.g. Android/AndroidPad/iPhone/iPod/iPad/Windows Phone/unknown, etc.
* @property {lib.env~Version} version - os version.
* @property {Boolean} isWindowsPhone
* @property {Boolean} isIPhone - is iPhone/iTouch
* @property {Boolean} isIPad
* @property {Boolean} isIOS
* @property {Boolean} isAndroid
* @property {Boolean} isAndroidPad
*/
env.os = {
name: 'Windows Phone',
isWindowsPhone: true,
version: match[1]
}
}
else if (!!ua.match(/Safari/) && (match = ua.match(/Android[\s/]([\d.]+)/))) {
env.os = {
version: match[1]
}
if ((ua.match(/Mobile\s+Safari/))) {
env.os.name = 'Android'
env.os.isAndroid = true
}
else {
env.os.name = 'AndroidPad'
env.os.isAndroidPad = true
}
}
else if ((match = ua.match(/(iPhone|iPad|iPod)/))) {
const name = match[1]
match = ua.match(/OS ([\d_.]+) like Mac OS X/)
env.os = {
name: name,
isIPhone: (name === 'iPhone' || name === 'iPod'),
isIPad: name === 'iPad',
isIOS: true,
version: match && match[1].split('_').join('.') || ''
}
}
else {
env.os = {
name: 'unknown',
version: '0.0.0'
}
}
if (lib.version) {
env.os.version = lib.version(env.os.version)
}
/**
* browser
*/
match = ua.match(/(?:UCWEB|UCBrowser\/)([\d.]+)/)
if (match) {
/**
* @type {Object}
* @memberof env
* @property {String} name - browser nameļ¼Œe.g. UC/QQ/Firefox/Chrome/Android/Safari/iOS Webview/Chrome Webview/IE/IEMobile/unknown, etc.
* @property {env~Version} version - browser version.
* @property {Boolean} isUC
* @property {Boolean} isQQ
* @property {Boolean} isIE
* @property {Boolean} isIEMobile
* @property {Boolean} isIELikeWebkit
* @property {Boolean} isChrome
* @property {Boolean} isAndroid
* @property {Boolean} isSafari
* @property {Boolean} isWebview
*/
env.browser = {
name: 'UC',
isUC: true,
version: match[1]
}
}
else if ((match = ua.match(/MQQBrowser\/([\d.]+)/))) {
env.browser = {
name: 'QQ',
isQQ: true,
version: match[1]
}
}
else if ((match = ua.match(/Firefox\/([\d.]+)/))) {
env.browser = {
name: 'Firefox',
isFirefox: true,
version: match[1]
}
}
else if ((match = ua.match(/MSIE\s([\d.]+)/))
|| (match = ua.match(/IEMobile\/([\d.]+)/))) {
env.browser = {
version: match[1]
}
if (ua.match(/IEMobile/)) {
env.browser.name = 'IEMobile'
env.browser.isIEMobile = true
}
else {
env.browser.name = 'IE'
env.browser.isIE = true
}
if (ua.match(/Android|iPhone/)) {
env.browser.isIELikeWebkit = true
}
}
else if ((match = ua.match(/(?:Chrome|CriOS)\/([\d.]+)/))) {
env.browser = {
name: 'Chrome',
isChrome: true,
version: match[1]
}
if (ua.match(/Version\/[\d+.]+\s*Chrome/)) {
env.browser.name = 'Chrome Webview'
env.browser.isWebview = true
}
}
else if (!!ua.match(/Safari/) && (match = ua.match(/Android[\s/]([\d.]+)/))) {
env.browser = {
name: 'Android',
isAndroid: true,
version: match[1]
}
}
else if (ua.match(/iPhone|iPad|iPod/)) {
if (ua.match(/Safari/)) {
match = ua.match(/Version\/([\d.]+)/)
env.browser = {
name: 'Safari',
isSafari: true,
version: match && match[1] || ''
}
}
else {
match = ua.match(/OS ([\d_.]+) like Mac OS X/)
env.browser = {
name: 'iOS Webview',
isWebview: true,
version: match && match[1].replace(/_/g, '.') || ''
}
}
}
else {
env.browser = {
name: 'unknown',
version: '0.0.0'
}
}
if (lib.version) {
env.browser.version = lib.version(env.browser.version)
}