mirror of
https://github.com/faisalman/ua-parser-js.git
synced 2025-11-15 22:52:16 +03:00
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f95aced43b | ||
|
|
24950f97ae | ||
|
|
cb30756f48 | ||
|
|
0868e372e0 | ||
|
|
9d431cfddd | ||
|
|
c937400e8e | ||
|
|
8bea5c552a | ||
|
|
3843578de9 | ||
|
|
be9a066029 | ||
|
|
6f2ba7fcd5 | ||
|
|
d72de26ef9 | ||
|
|
80fae81eee | ||
|
|
91fa6dd5cc |
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ua-parser-js",
|
||||
"version": "0.7.26",
|
||||
"version": "0.7.27",
|
||||
"authors": [
|
||||
"Faisal Salman <f@faisalman.com>"
|
||||
],
|
||||
|
||||
4
dist/ua-parser.min.js
vendored
4
dist/ua-parser.min.js
vendored
File diff suppressed because one or more lines are too long
4
dist/ua-parser.pack.js
vendored
4
dist/ua-parser.pack.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
Package.describe({
|
||||
name: 'faisalman:ua-parser-js',
|
||||
version: '0.7.26',
|
||||
version: '0.7.27',
|
||||
summary: 'Lightweight JavaScript-based user-agent string parser',
|
||||
git: 'https://github.com/faisalman/ua-parser-js.git',
|
||||
documentation: 'readme.md'
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"title": "UAParser.js",
|
||||
"name": "ua-parser-js",
|
||||
"version": "0.7.26",
|
||||
"version": "0.7.27",
|
||||
"author": "Faisal Salman <f@faisalman.com> (http://faisalman.com)",
|
||||
"description": "Lightweight JavaScript-based user-agent string parser",
|
||||
"keywords": [
|
||||
|
||||
20
readme.md
20
readme.md
@@ -39,16 +39,16 @@ JavaScript library to detect Browser, Engine, OS, CPU, and Device type/model fro
|
||||
BIDUBrowser, Baidu, Basilisk, Blazer, Bolt, Brave, Bowser, Camino, Chimera,
|
||||
Chrome Headless, Chrome WebView, Chrome, Chromium, Comodo Dragon, Dillo,
|
||||
Dolphin, Doris, Edge, Electron, Epiphany, Facebook, Falkon, Fennec, Firebird,
|
||||
Firefox, Flock, GSA, GoBrowser, ICE Browser, IE, IEMobile, IceApe, IceCat,
|
||||
IceDragon, Iceape, Iceweasel, Instagram, Iridium, Iron, Jasmine, K-Meleon,
|
||||
Firefox [Reality], Flock, Flow, GSA, GoBrowser, ICE Browser, IE, IEMobile, IceApe,
|
||||
IceCat, IceDragon, Iceweasel, Instagram, Iridium, Iron, Jasmine, K-Meleon,
|
||||
Kindle, Konqueror, LBBROWSER, Line, Links, Lunascape, Lynx, MIUI Browser,
|
||||
Maemo Browser, Maemo, Maxthon, MetaSr Midori, Minimo, Mobile Safari, Mosaic,
|
||||
Mozilla, NetFront, NetSurf, Netfront, Netscape, NokiaBrowser, Oculus Browser,
|
||||
OmniWeb, Opera Coast, Opera Mini, Opera Mobi, Opera Tablet, Opera, PaleMoon,
|
||||
PhantomJS, Phoenix, Polaris, Puffin, QQ, QQBrowser, QQBrowserLite, Quark,
|
||||
QupZilla, RockMelt, Safari, Sailfish Browser, Samsung Browser, SeaMonkey, Silk,
|
||||
Skyfire, Sleipnir, Slim, SlimBrowser, Swiftfox, Tizen Browser, UCBrowser,
|
||||
Vivaldi, Waterfox, WeChat, Weibo, Yandex, baidu, iCab, w3m, Whale Browser...
|
||||
OmniWeb, Opera Coast, Opera [Mini/Mobi/Tablet], PaleMoon, PhantomJS, Phoenix,
|
||||
Polaris, Puffin, QQ, QQBrowser, QQBrowserLite, Quark, QupZilla, RockMelt, Safari,
|
||||
Sailfish Browser, Samsung Browser, SeaMonkey, Silk, Skyfire, Sleipnir, Slim,
|
||||
SlimBrowser, Swiftfox, Tizen Browser, UCBrowser, Vivaldi, Waterfox, WeChat, Weibo,
|
||||
Yandex, baidu, iCab, w3m, Whale Browser...
|
||||
|
||||
# 'browser.version' determined dynamically
|
||||
```
|
||||
@@ -62,8 +62,8 @@ console, mobile, tablet, smarttv, wearable, embedded
|
||||
|
||||
# Possible 'device.vendor':
|
||||
Acer, Alcatel, Amazon, Apple, Archos, ASUS, AT&T, BenQ, BlackBerry, Dell,
|
||||
Essential, GeeksPhone, Google, HP, HTC, Huawei, Jolla, Lenovo, LG, Meizu,
|
||||
Microsoft, Motorola, Nexian, Nintendo, Nokia, Nvidia, OnePlus, OPPO, Ouya,
|
||||
Essential, Fairphone, GeeksPhone, Google, HP, HTC, Huawei, Jolla, Lenovo, LG,
|
||||
Meizu, Microsoft, Motorola, Nexian, Nintendo, Nokia, Nvidia, OnePlus, OPPO, Ouya,
|
||||
Palm, Panasonic, Pebble, Polytron, Realme, RIM, Samsung, Sharp, Siemens,
|
||||
Sony[Ericsson], Sprint, Vivo, Vodafone, Xbox, Xiaomi, Zebra, ZTE, ...
|
||||
|
||||
@@ -75,7 +75,7 @@ Sony[Ericsson], Sprint, Vivo, Vodafone, Xbox, Xiaomi, Zebra, ZTE, ...
|
||||
|
||||
```sh
|
||||
# Possible 'engine.name'
|
||||
Amaya, Blink, EdgeHTML, Gecko, Goanna, iCab, KHTML, Links, Lynx, NetFront,
|
||||
Amaya, Blink, EdgeHTML, Flow, Gecko, Goanna, iCab, KHTML, Links, Lynx, NetFront,
|
||||
NetSurf, Presto, Tasman, Trident, w3m, WebKit
|
||||
|
||||
# 'engine.version' determined dynamically
|
||||
|
||||
111
src/ua-parser.js
111
src/ua-parser.js
@@ -1,5 +1,5 @@
|
||||
/*!@license
|
||||
* UAParser.js v0.7.26
|
||||
* UAParser.js v0.7.27
|
||||
* Lightweight JavaScript-based User-Agent string parser
|
||||
* https://github.com/faisalman/ua-parser-js
|
||||
*
|
||||
@@ -16,7 +16,7 @@
|
||||
/////////////
|
||||
|
||||
|
||||
var LIBVERSION = '0.7.26',
|
||||
var LIBVERSION = '0.7.27',
|
||||
EMPTY = '',
|
||||
UNKNOWN = '?',
|
||||
FUNC_TYPE = 'function',
|
||||
@@ -223,8 +223,7 @@
|
||||
// Presto based
|
||||
/(opera\smini)\/([\w\.-]+)/i, // Opera Mini
|
||||
/(opera\s[mobiletab]{3,6})\b.+version\/([\w\.-]+)/i, // Opera Mobi/Tablet
|
||||
/(opera).+version\/([\w\.]+)/i, // Opera > 9.80
|
||||
/(opera)[\/\s]+([\w\.]+)/i // Opera < 9.80
|
||||
/(opera)(?:.+version\/|[\/\s]+)([\w\.]+)/i, // Opera
|
||||
], [NAME, VERSION], [
|
||||
/opios[\/\s]+([\w\.]+)/i // Opera mini on iphone >= 8.0
|
||||
], [VERSION, [NAME, 'Opera Mini']], [
|
||||
@@ -287,7 +286,7 @@
|
||||
|
||||
// WebView
|
||||
/;fbav\/([\w\.]+);/i // Facebook App for iOS & Android with version
|
||||
], [VERSION, [NAME, 'Facebook']], [
|
||||
], [VERSION, [NAME, 'Facebook']], [
|
||||
/FBAN\/FBIOS|FB_IAB\/FB4A/i // Facebook App for iOS & Android without version
|
||||
], [[NAME, 'Facebook']], [
|
||||
/\s(electron)\/([\w\.]+)\ssafari/i, // Electron-based App
|
||||
@@ -322,6 +321,9 @@
|
||||
// Gecko based
|
||||
/(navigator|netscape)\/([\w\.-]+)/i // Netscape
|
||||
], [[NAME, 'Netscape'], VERSION], [
|
||||
/ile\svr;\srv:([\w\.]+)\).+firefox/i // Firefox Reality
|
||||
], [VERSION, [NAME, 'Firefox Reality']], [
|
||||
/ekiohf.+(flow)\/([\w\.]+)/i, // Flow
|
||||
/(swiftfox)/i, // Swiftfox
|
||||
/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,
|
||||
// IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
|
||||
@@ -373,15 +375,16 @@
|
||||
],
|
||||
|
||||
device : [[
|
||||
|
||||
//////////////////////
|
||||
|
||||
//////////////////////////
|
||||
// MOBILES & TABLETS
|
||||
/////////////////////
|
||||
|
||||
// Ordered by popularity
|
||||
/////////////////////////
|
||||
|
||||
// Samsung
|
||||
/\b(sch-i[89]0\d|shw-m380s|sm-p(?:605|610|587)|sm-t\w+|gt-p\d{4}|gt-n\d+|sgh-t8[56]9|nexus\s10)/i,
|
||||
/\b(sch-i[89]0\d|shw-m380s|sm-[pt]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus\s10)/i
|
||||
], [MODEL, [VENDOR, 'Samsung'], [TYPE, TABLET]], [
|
||||
/(s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+)/i,
|
||||
/\b((?:s[cgp]h|gt|sm)-\w+|galaxy\snexus)/i,
|
||||
/\ssamsung[\s-]([\w-]+)/i,
|
||||
/sec-(sgh\w+)/i
|
||||
], [MODEL, [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
||||
@@ -389,22 +392,22 @@
|
||||
// Apple
|
||||
/\((ip(?:hone|od)[\s\w]*);/i // iPod/iPhone
|
||||
], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [
|
||||
/\((ipad);[\w\s\),;-]+(apple)/i // iPad
|
||||
], [MODEL, VENDOR, [TYPE, TABLET]], [
|
||||
/applecoremedia\/[\w\.]+\s\((ipad)/i
|
||||
/\((ipad);[\w\s\),;-]+apple/i, // iPad
|
||||
/applecoremedia\/[\w\.]+\s\((ipad)/i,
|
||||
/\b(ipad)\d\d?,\d\d?[;\]].+ios/i
|
||||
], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [
|
||||
|
||||
// Huawei
|
||||
/\b((?:agr|ags[23]|bah2?|sht?)-a?[lw]\d{2})/i,
|
||||
], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [
|
||||
/d\/huawei([\w\s-]+)[;\)]/i,
|
||||
/\b(nexus\s6p|vog-[at]?l\d\d|ane-[at]?l[x\d]\d|eml-a?l\d\da?|lya-[at]?l\d[\dc]|clt-a?l\d\di?|ele-l\d\d)/i,
|
||||
/\b(\w{2,4}-[atu][ln][01259][019])[;\)\s]/i
|
||||
], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [
|
||||
/\b(bah2?-a?[lw]\d{2})/i // Huawei MediaPad
|
||||
], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [
|
||||
|
||||
// Xiaomi
|
||||
/\b(poco[\s\w]+)(?:\sbuild|\))/i, // Xiaomi POCO
|
||||
/\b;\s(\w+)\s+build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
||||
/\b(poco[\s\w]+)(?:\sbuild|\))/i, // Xiaomi POCO
|
||||
/\b;\s(\w+)\sbuild\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
||||
/\b(hm[\s\-_]?note?[\s_]?(?:\d\w)?)\sbuild/i, // Xiaomi Hongmi
|
||||
/\b(redmi[\s\-_]?(?:note|k)?[\w\s_]+)(?:\sbuild|\))/i, // Xiaomi Redmi
|
||||
/\b(mi[\s\-_]?(?:a\d|one|one[\s_]plus|note lte)?[\s_]?(?:\d?\w?)[\s_]?(?:plus)?)\sbuild/i // Xiaomi Mi
|
||||
@@ -421,7 +424,7 @@
|
||||
/\svivo\s(\w+)(?:\sbuild|\))/i,
|
||||
/\s(v[12]\d{3}\w?[at])(?:\sbuild|;)/i
|
||||
], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [
|
||||
|
||||
|
||||
// Realme
|
||||
/\s(rmx[12]\d{3})(?:\sbuild|;)/i
|
||||
], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [
|
||||
@@ -429,24 +432,22 @@
|
||||
// Motorola
|
||||
/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)\b[\w\s]+build\//i,
|
||||
/\smot[\s-](\w*)/i,
|
||||
/(moto[\s\w\(\)]+(?=\sbuild|\)))/i,
|
||||
/(xt\d{3,4})\sbuild\//i,
|
||||
/(nexus\s6)/i
|
||||
/((?:moto[\s\w\(\)]+|xt\d{3,4}|nexus\s6)(?=\sbuild|\)))/i
|
||||
], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [
|
||||
/\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i
|
||||
], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [
|
||||
|
||||
// LG
|
||||
/((?=lg)?[vl]k\-?\d{3})\s+build|\s3\.[\s\w;-]{10}lg?-([06cv9]{3,4})/i
|
||||
/((?=lg)?[vl]k\-?\d{3})\sbuild|\s3\.[\s\w;-]{10}lg?-([06cv9]{3,4})/i
|
||||
], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [
|
||||
/(nexus\s[45])/i,
|
||||
/lg[e;\s\/-]+((?!browser|netcast)\w+)/i,
|
||||
/\blg(\-?[\d\w]+)\s+build/i
|
||||
/\blg(\-?[\d\w]+)\sbuild/i
|
||||
], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [
|
||||
|
||||
// Lenovo
|
||||
/(ideatab[\w\-\s]+)/i,
|
||||
/lenovo\s?(s(?:5000|6000)(?:[\w-]+)|tab(?:[\s\w]+)|[\w-]+)/i // Lenovo tablets
|
||||
/lenovo\s?(s(?:5000|6000)(?:[\w-]+)|tab(?:[\s\w]+)|yt[\d\w-]{6}|tb[\d\w-]{6})/i // Lenovo tablets
|
||||
], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [
|
||||
|
||||
// Nokia
|
||||
@@ -469,12 +470,13 @@
|
||||
|
||||
// OnePlus
|
||||
/\s(kb2005|in20[12]5|be20[12][59])\b/i,
|
||||
/\ba000(1)\s+build/i, // OnePlus
|
||||
/\ba000(1)\sbuild/i, // OnePlus
|
||||
/\boneplus\s(a\d{4})[\s)]/i
|
||||
], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
|
||||
|
||||
// Amazon
|
||||
/(alexa)webm/i,
|
||||
/(kf[a-z]{2}wi)(\sbuild\/|\))/i, // Kindle Fire without Silk
|
||||
/(kf[a-z]+)(\sbuild\/|\)).+silk\//i // Kindle Fire HD
|
||||
], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
||||
/(sd|kf)[0349hijorstuw]+(\sbuild\/|\)).+silk\//i // Fire Phone
|
||||
@@ -485,9 +487,9 @@
|
||||
], [MODEL, VENDOR, [TYPE, TABLET]], [
|
||||
/\(bb10;\s(\w+)/i // BlackBerry 10
|
||||
], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [
|
||||
|
||||
|
||||
// Asus
|
||||
/\b(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus\s7|padfone|p00c)/i
|
||||
/(?:\b|asus_)(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus\s7|padfone|p00[cj])/i
|
||||
], [MODEL, [VENDOR, 'ASUS'], [TYPE, TABLET]], [
|
||||
/\s(z[es]6[027][01][km][ls]|zenfone\s\d\w?)\b/i
|
||||
], [MODEL, [VENDOR, 'ASUS'], [TYPE, MOBILE]], [
|
||||
@@ -524,8 +526,7 @@
|
||||
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
||||
|
||||
/(archos)\s(gamepad2?)/i, // Archos
|
||||
/(hp).+(touchpad)/i, // HP TouchPad
|
||||
/(hp).+(tablet)/i, // HP Tablet
|
||||
/(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad
|
||||
/(kindle)\/([\w\.]+)/i, // Kindle
|
||||
/\s(nook)[\w\s]+build\/(\w+)/i, // Nook
|
||||
/(dell)\s(strea[kpr\s\d]*[\dko])/i, // Dell Streak
|
||||
@@ -537,6 +538,8 @@
|
||||
|
||||
/\s(surface\sduo)\s/i // Surface Duo
|
||||
], [MODEL, [VENDOR, 'Microsoft'], [TYPE, TABLET]], [
|
||||
/droid\s[\d\.]+;\s(fp\du?)\sbuild/i
|
||||
], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [
|
||||
/\s(u304aa)\sbuild/i // AT&T
|
||||
], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [
|
||||
/sie-(\w*)/i // Siemens
|
||||
@@ -610,12 +613,11 @@
|
||||
///////////////////
|
||||
|
||||
/smart-tv.+(samsung)/i // Samsung
|
||||
], [VENDOR, [TYPE, SMARTTV], MODEL], [
|
||||
], [VENDOR, [TYPE, SMARTTV]], [
|
||||
/hbbtv.+maple;(\d+)/i
|
||||
], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [
|
||||
/linux;\snetcast.+smarttv/i, // LG SmartTV
|
||||
/lg\snetcast\.tv-201\d/i
|
||||
], [[VENDOR, 'LG'], MODEL, [TYPE, SMARTTV]], [
|
||||
/(?:linux;\snetcast.+smarttv|lg\snetcast\.tv-201\d)/i, // LG SmartTV
|
||||
], [[VENDOR, 'LG'], [TYPE, SMARTTV]], [
|
||||
/(apple)\s?tv/i // Apple TV
|
||||
], [VENDOR, [MODEL, 'Apple TV'], [TYPE, SMARTTV]], [
|
||||
/crkey/i // Google Chromecast
|
||||
@@ -666,8 +668,8 @@
|
||||
], [VERSION, [NAME, 'Blink']], [
|
||||
|
||||
/(presto)\/([\w\.]+)/i, // Presto
|
||||
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,
|
||||
// WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna
|
||||
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna
|
||||
/ekioh(flow)\/([\w\.]+)/i, // Flow
|
||||
/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, // KHTML/Tasman/Links
|
||||
/(icab)[\/\s]([23]\.[\d\.]+)/i // iCab
|
||||
], [NAME, VERSION], [
|
||||
@@ -696,18 +698,16 @@
|
||||
/(macintosh|mac(?=_powerpc)\s)(?!.+haiku)/i // Mac OS
|
||||
], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [
|
||||
|
||||
// Mobile OSes
|
||||
// Mobile OSes // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS
|
||||
/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|sailfish|contiki)[\/\s-]?([\w\.]*)/i,
|
||||
// Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS
|
||||
/(blackberry)\w*\/([\w\.]*)/i, // Blackberry
|
||||
/(tizen|kaios)[\/\s]([\w\.]+)/i // Tizen/KaiOS
|
||||
/(tizen|kaios)[\/\s]([\w\.]+)/i, // Tizen/KaiOS
|
||||
/\((series40);/i // Series 40
|
||||
], [NAME, VERSION], [
|
||||
/\(bb(10);/i // BlackBerry 10
|
||||
], [VERSION, [NAME, 'BlackBerry']], [
|
||||
/(?:symbian\s?os|symbos|s60(?=;)|series60)[\/\s-]?([\w\.]*)/i // Symbian
|
||||
], [VERSION, [NAME, 'Symbian']], [
|
||||
/\((series40);/i // Series 40
|
||||
], [NAME], [
|
||||
/mozilla.+\(mobile;.+gecko.+firefox/i // Firefox OS
|
||||
], [[NAME, 'Firefox OS']], [
|
||||
/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i // WebOS
|
||||
@@ -716,6 +716,8 @@
|
||||
// Google Chromecast
|
||||
/crkey\/([\d\.]+)/i // Google Chromecast
|
||||
], [VERSION, [NAME, 'Chromecast']], [
|
||||
/(cros)\s[\w]+\s([\w\.]+\w)/i // Chromium OS
|
||||
], [[NAME, 'Chromium OS'], VERSION],[
|
||||
|
||||
// Console
|
||||
/(nintendo|playstation)\s([wids345portablevuch]+)/i, // Nintendo/Playstation
|
||||
@@ -728,28 +730,19 @@
|
||||
// Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware
|
||||
// Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus
|
||||
/(hurd|linux)\s?([\w\.]*)/i, // Hurd/Linux
|
||||
/(gnu)\s?([\w\.]*)/i // GNU
|
||||
], [NAME, VERSION], [
|
||||
|
||||
/(cros)\s[\w]+\s([\w\.]+\w)/i // Chromium OS
|
||||
], [[NAME, 'Chromium OS'], VERSION],[
|
||||
|
||||
// Solaris
|
||||
/(sunos)\s?([\w\.\d]*)/i // Solaris
|
||||
], [[NAME, 'Solaris'], VERSION], [
|
||||
/(gnu)\s?([\w\.]*)/i, // GNU
|
||||
|
||||
// BSD based
|
||||
/\s([frentopc-]{0,4}bsd|dragonfly)\s?(?!amd|[ix346]{1,2}86)([\w\.]*)/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly
|
||||
], [NAME, VERSION],[
|
||||
|
||||
/\s([frentopc-]{0,4}bsd|dragonfly)\s?(?!amd|[ix346]{1,2}86)([\w\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly
|
||||
/(haiku)\s(\w+)/i // Haiku
|
||||
], [NAME, VERSION],[
|
||||
], [NAME, VERSION], [
|
||||
|
||||
// Other
|
||||
/(sunos)\s?([\w\.\d]*)/i // Solaris
|
||||
], [[NAME, 'Solaris'], VERSION], [
|
||||
/((?:open)?solaris)[\/\s-]?([\w\.]*)/i, // Solaris
|
||||
/(aix)\s((\d)(?=\.|\)|\s)[\w\.])*/i, // AIX
|
||||
/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms|fuchsia)/i,
|
||||
// Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia
|
||||
/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms|fuchsia)/i, // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia
|
||||
/(unix)\s?([\w\.]*)/i // UNIX
|
||||
], [NAME, VERSION]
|
||||
]
|
||||
@@ -765,11 +758,11 @@
|
||||
extensions = ua;
|
||||
ua = undefined;
|
||||
}
|
||||
|
||||
|
||||
if (!(this instanceof UAParser)) {
|
||||
return new UAParser(ua, extensions).getResult();
|
||||
}
|
||||
|
||||
|
||||
var _ua = ua || ((typeof window !== 'undefined' && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
|
||||
var _rgxmap = extensions ? util.extend(regexes, extensions) : regexes;
|
||||
|
||||
@@ -813,7 +806,7 @@
|
||||
return _ua;
|
||||
};
|
||||
this.setUA = function (ua) {
|
||||
_ua = ua.length > UA_MAX_LENGTH ? util.trim(ua, UA_MAX_LENGTH) : ua;
|
||||
_ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? util.trim(ua, UA_MAX_LENGTH) : ua;
|
||||
return this;
|
||||
};
|
||||
this.setUA(_ua);
|
||||
|
||||
@@ -289,6 +289,16 @@
|
||||
"major" : "1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc" : "Flow",
|
||||
"ua" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) EkiohFlow/5.7.4.30559 Flow/5.7.4 (like Gecko Firefox/53.0 rv:53.0)",
|
||||
"expect" :
|
||||
{
|
||||
"name" : "Flow",
|
||||
"version" : "5.7.4",
|
||||
"major" : "5"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc" : "Waterfox",
|
||||
"ua" : "Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.2.2 Waterfox/55.2.2",
|
||||
@@ -389,6 +399,16 @@
|
||||
"major" : "15"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc" : "Firefox Reality",
|
||||
"ua" : "Mozilla/5.0 (Android 7.1.2; Mobile VR; rv:65.0) Gecko/65.0 Firefox/65.0",
|
||||
"expect" :
|
||||
{
|
||||
"name" : "Firefox Reality",
|
||||
"version" : "65.0",
|
||||
"major" : "65"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc" : "Firefox-based browser",
|
||||
"ua" : "Mozilla/5.0 (X11; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0 AppName/1.0",
|
||||
|
||||
@@ -25,6 +25,15 @@
|
||||
"type": "tablet"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "ASUS ZenPad Z8s",
|
||||
"ua": "Mozilla/5.0 (Linux; Android 7.0; ASUS_P00J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.111 Safari/537.36\n",
|
||||
"expect": {
|
||||
"vendor": "ASUS",
|
||||
"model": "P00J",
|
||||
"type": "tablet"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "ASUS ROG",
|
||||
"ua": "Mozilla/5.0 (Linux; Android 8.1; ZS600KL Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.126 Mobile Safari/537.36",
|
||||
@@ -151,6 +160,15 @@
|
||||
"type": "mobile"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "Fairphone 1U",
|
||||
"ua": "Mozilla/5.0 (Linux; U; Android 4.2.2; FP1U Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
|
||||
"expect": {
|
||||
"vendor": "Fairphone",
|
||||
"model": "FP1U",
|
||||
"type": "mobile"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "HTC Desire 820",
|
||||
"ua": "Mozilla/5.0 (Linux; Android 6.0.1; HTC Desire 820 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36",
|
||||
@@ -232,6 +250,15 @@
|
||||
"type": "tablet"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "iPad using Facebook Browser",
|
||||
"ua": "Mozilla/5.0 (iPad; CPU OS 14_4_2 like Mac OS X) WebKit/8610 (KHTML, like Gecko) Mobile/18D70 [FBAN/FBIOS;FBDV/iPad7,11;FBMD/iPad;FBSN/iOS;FBSV/14.4.2;FBSS/2;FBID/tablet;FBLC/en_US;FBOP/5]",
|
||||
"expect": {
|
||||
"vendor": "Apple",
|
||||
"model": "iPad",
|
||||
"type": "tablet"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "iPod",
|
||||
"ua": "Mozilla/5.0 (iPod touch; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B554a Safari/9537.53",
|
||||
@@ -250,6 +277,15 @@
|
||||
"type": "tablet"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "Lenovo Phone",
|
||||
"ua": "Mozilla/5.0 (Linux; Android 6.0; Lenovo PB2-650M Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.105 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/311.0.0.44.117;]",
|
||||
"expect": {
|
||||
"vendor": "Lenovo",
|
||||
"model": "PB2-650M",
|
||||
"type": "mobile"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "Lenovo Tab 3 Pro",
|
||||
"ua": "Mozilla/5.0 (Linux; Android 6.0.1; Lenovo YT3-X90F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.99 Safari/537.36",
|
||||
@@ -414,6 +450,15 @@
|
||||
"type": "mobile"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "iPhone SE using Facebook App",
|
||||
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 [FBAN/FBIOS;FBDV/iPhone8,4;FBMD/iPhone;FBSN/iOS;FBSV/13.3.1;FBSS/2;FBID/phone;FBLC/en_US;FBOP/5;FBCR/]",
|
||||
"expect": {
|
||||
"vendor": "Apple",
|
||||
"model": "iPhone",
|
||||
"type": "mobile"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "iPhone 11 Pro Max",
|
||||
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 [FBAN/FBIOS;FBDV/iPhone12,5;FBMD/iPhone;FBSN/iOS;FBSV/13.3.1;FBSS/3;FBID/phone;FBLC/en_US;FBOP/5;FBCR/]",
|
||||
@@ -828,6 +873,15 @@
|
||||
"type": "tablet"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "Samsung Galaxy Tab A 9.7",
|
||||
"ua": "Mozilla/5.0 (Linux; Android 7.1.1; SM-P550 Build/NMF26X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.90 Safari/537.36",
|
||||
"expect": {
|
||||
"vendor": "Samsung",
|
||||
"model": "SM-P550",
|
||||
"type": "tablet"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "Samsung Galaxy Tab S7",
|
||||
"ua": "Mozilla/5.0 (Linux; Android 10; SM-T870) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36",
|
||||
@@ -1831,6 +1885,15 @@
|
||||
"type": "tablet"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "Amazon Kindle Fire Tablet",
|
||||
"ua": "Mozilla/5.0 (Linux; Android 9; KFMAWI Build/PS7312; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.110 Safari/537.36",
|
||||
"expect": {
|
||||
"vendor": "Amazon",
|
||||
"model": "KFMAWI",
|
||||
"type": "tablet"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "Amazon Fire TV",
|
||||
"ua": "Mozilla/5.0 (Linux; Android 4.2.2; AFTB Build/JDQ39) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.173 Mobile Safari/537.22",
|
||||
@@ -1876,6 +1939,51 @@
|
||||
"type": "tablet"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "HUAWEI MediaPad M5 Lite",
|
||||
"ua": "Mozilla/5.0 (Linux; Android 8.0.0; BAH2-W19 Build/HUAWEIBAH2-W19; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Safari/537.36",
|
||||
"expect": {
|
||||
"vendor": "Huawei",
|
||||
"model": "BAH2-W19",
|
||||
"type": "tablet"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "HUAWEI MediaPad M5",
|
||||
"ua": "Mozilla/5.0 (Linux; Android 9; SHT-AL09 Build/HUAWEISHT-AL09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.90 Mobile Safari/537.36",
|
||||
"expect": {
|
||||
"vendor": "Huawei",
|
||||
"model": "SHT-AL09",
|
||||
"type": "tablet"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "HUAWEI MediaPad T5",
|
||||
"ua": "Mozilla/5.0 (Linux; Android 8.0.0; AGS2-L09 Build/HUAWEIAGS2-L09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/84.0.4147.125 Safari/537.36",
|
||||
"expect": {
|
||||
"vendor": "Huawei",
|
||||
"model": "AGS2-L09",
|
||||
"type": "tablet"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "HUAWEI MediaPad T10",
|
||||
"ua": "Mozilla/5.0 (Linux; Android 10; AGR-W09 Build/HUAWEIAGR-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Safari/537.36",
|
||||
"expect": {
|
||||
"vendor": "Huawei",
|
||||
"model": "AGR-W09",
|
||||
"type": "tablet"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "HUAWEI MediaPad T10s",
|
||||
"ua": "Mozilla/5.0 (Linux; Android 10; AGS3-W09 Build/HUAWEIAGS3-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Safari/537.36",
|
||||
"expect": {
|
||||
"vendor": "Huawei",
|
||||
"model": "AGS3-W09",
|
||||
"type": "tablet"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc": "Huawei Mate 10 Pro",
|
||||
"ua": "Mozilla/5.0 (Linux; Android 8.0; BLA-L29 Build/HUAWEIBLA-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3236.6 Mobile Safari/537.36",
|
||||
|
||||
@@ -17,6 +17,15 @@
|
||||
"version" : "12.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc" : "Flow",
|
||||
"ua" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) EkiohFlow/5.7.4.30559 Flow/5.7.4 (like Gecko Firefox/53.0 rv:53.0)",
|
||||
"expect" :
|
||||
{
|
||||
"name" : "Flow",
|
||||
"version" : "5.7.4.30559"
|
||||
}
|
||||
},
|
||||
{
|
||||
"desc" : "Gecko",
|
||||
"ua" : "Mozilla/5.0 (X11; Linux x86_64; rv:2.0b9pre) Gecko/20110111 Firefox/4.0b9pre",
|
||||
|
||||
@@ -46,6 +46,14 @@ describe('UAParser()', function () {
|
||||
assert.deepStrictEqual(UAParser(ua), new UAParser().setUA(ua).getResult());
|
||||
});
|
||||
|
||||
describe('UAParser() constructor does not throw with undefined ua argument', function () {
|
||||
assert.doesNotThrow(() => new UAParser(undefined).getResult());
|
||||
});
|
||||
|
||||
describe('UAParser.setUA method does not throw with undefined ua argument', function () {
|
||||
assert.doesNotThrow(() => new UAParser().setUA(undefined).getResult());
|
||||
});
|
||||
|
||||
for (var i in methods) {
|
||||
describe(methods[i]['title'], function () {
|
||||
for (var j in methods[i]['list']) {
|
||||
|
||||
Reference in New Issue
Block a user