Skip to content

Commit c9d1ab9

Browse files
committed
Merge branch 'develop'
2 parents cf09322 + f815ca6 commit c9d1ab9

File tree

5 files changed

+327
-44
lines changed

5 files changed

+327
-44
lines changed

readme.md

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -80,19 +80,19 @@ The methods are self explanatory, here's a small overview on all the available m
8080
# Possible 'browser.name':
8181
2345Explorer, 360 Browser, Amaya, Android Browser, Arora, Avant, Avast, AVG,
8282
BIDUBrowser, Baidu, Basilisk, Blazer, Bolt, Brave, Bowser, Camino, Chimera,
83-
Chrome Headless, Chrome WebView, Chrome, Chromium, Comodo Dragon, Dillo,
83+
Chrome Headless, Chrome WebView, Chrome, Chromium, Cobalt, Comodo Dragon, Dillo,
8484
Dolphin, Doris, DuckDuckGo, Edge, Electron, Epiphany, Facebook, Falkon, Fennec,
8585
Firebird, Firefox [Focus/Reality], Flock, Flow, GSA, GoBrowser, Huawei Browser,
8686
ICE Browser, IE, IEMobile, IceApe, IceCat, IceDragon, Iceweasel, Instagram,
87-
Iridium, Iron, Jasmine, K-Meleon, Kindle, Klar, Konqueror, LBBROWSER, Line,
88-
LinkedIn, Links, Lunascape, Lynx, MIUI Browser, Maemo Browser, Maemo, Maxthon,
89-
MetaSr Midori, Minimo, Mobile Safari, Mosaic, Mozilla, NetFront, NetSurf, Netfront,
90-
Netscape, NokiaBrowser, Obigo, Oculus Browser, OmniWeb, Opera Coast,
91-
Opera [Mini/Mobi/Tablet], PaleMoon, PhantomJS, Phoenix, Polaris, Puffin, QQ,
92-
QQBrowser, QQBrowserLite, Quark, QupZilla, RockMelt, Safari, Sailfish Browser,
93-
Samsung Browser, SeaMonkey, Silk, Skyfire, Sleipnir, Slim, SlimBrowser, Swiftfox,
94-
Tesla, Tizen Browser, UCBrowser, UP.Browser, Vivaldi, Waterfox, WeChat, Weibo,
95-
Yandex, baidu, iCab, w3m, Whale Browser...
87+
Iridium, Iron, Jasmine, Kakao[Story/Talk], K-Meleon, Kindle, Klar, Konqueror,
88+
LBBROWSER, Line, LinkedIn, Links, Lunascape, Lynx, MIUI Browser, Maemo Browser,
89+
Maemo, Maxthon, MetaSr Midori, Minimo, Mobile Safari, Mosaic, Mozilla, NetFront,
90+
NetSurf, Netfront, Netscape, NokiaBrowser, Obigo, Oculus Browser, OmniWeb,
91+
Opera Coast, Opera [Mini/Mobi/Tablet], PaleMoon, PhantomJS, Phoenix, Polaris,
92+
Puffin, QQ, QQBrowser, QQBrowserLite, Quark, QupZilla, RockMelt, Safari,
93+
Sailfish Browser, Samsung Browser, SeaMonkey, Silk, Skyfire, Sleipnir, Slim,
94+
SlimBrowser, Swiftfox, Tesla, Tizen Browser, UCBrowser, UP.Browser, Viera,
95+
Vivaldi, Waterfox, WeChat, Weibo, Yandex, baidu, iCab, w3m, Whale Browser...
9696

9797
# 'browser.version' determined dynamically
9898
```
@@ -113,10 +113,10 @@ console, mobile, tablet, smarttv, wearable, embedded
113113

114114
# Possible 'device.vendor':
115115
Acer, Alcatel, Amazon, Apple, Archos, ASUS, AT&T, BenQ, BlackBerry, Dell,
116-
Essential, Fairphone, GeeksPhone, Google, HP, HTC, Huawei, Jolla, Lenovo, LG,
117-
Meizu, Microsoft, Motorola, Nexian, Nintendo, Nokia, Nvidia, OnePlus, OPPO, Ouya,
118-
Palm, Panasonic, Pebble, Polytron, Realme, RIM, Roku, Samsung, Sharp, Siemens,
119-
Sony[Ericsson], Sprint, Tesla, Vivo, Vodafone, Xbox, Xiaomi, Zebra, ZTE, ...
116+
Essential, Facebook, Fairphone, GeeksPhone, Google, HP, HTC, Huawei, Jolla, Kobo,
117+
Lenovo, LG, Meizu, Microsoft, Motorola, Nexian, Nintendo, Nokia, Nvidia, OnePlus,
118+
OPPO, Ouya, Palm, Panasonic, Pebble, Polytron, Realme, RIM, Roku, Samsung, Sharp,
119+
Siemens, Sony[Ericsson], Sprint, Tesla, Vivo, Vodafone, Xbox, Xiaomi, Zebra, ZTE, ...
120120

121121
# 'device.model' determined dynamically
122122
```
@@ -141,10 +141,10 @@ AIX, Amiga OS, Android[-x86], Arch, Bada, BeOS, BlackBerry, CentOS, Chromium OS,
141141
Contiki, Fedora, Firefox OS, FreeBSD, Debian, Deepin, DragonFly, elementary OS,
142142
Fuchsia, Gentoo, GhostBSD, GNU, Haiku, HarmonyOS, HP-UX, Hurd, iOS, Joli, KaiOS,
143143
Linpus, Linspire,Linux, Mac OS, Maemo, Mageia, Mandriva, Manjaro, MeeGo, Minix,
144-
Mint, Morph OS, NetBSD, Nintendo, OpenBSD, OpenVMS, OS/2, Palm, PC-BSD, PCLinuxOS,
145-
Plan9, PlayStation, QNX, Raspbian, RedHat, RIM Tablet OS, RISC OS, Sabayon,
146-
Sailfish, Series40, Slackware, Solaris, SUSE, Symbian, Tizen, Ubuntu, Unix,
147-
VectorLinux, WebOS, Windows [Phone/Mobile], Zenwalk, ...
144+
Mint, Morph OS, NetBSD, NetRange, NetTV, Nintendo, OpenBSD, OpenVMS, OS/2, Palm,
145+
PC-BSD, PCLinuxOS, Plan9, PlayStation, QNX, Raspbian, RedHat, RIM Tablet OS,
146+
RISC OS, Sabayon, Sailfish, Series40, Slackware, Solaris, SUSE, Symbian, Tizen,
147+
Ubuntu, Unix, VectorLinux, Viera, WebOS, Windows [Phone/Mobile], Zenwalk, ...
148148

149149
# 'os.version' determined dynamically
150150
```

src/ua-parser.js

Lines changed: 44 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
SAMSUNG = 'Samsung',
5757
SHARP = 'Sharp',
5858
SONY = 'Sony',
59+
VIERA = 'Viera',
5960
XIAOMI = 'Xiaomi',
6061
ZEBRA = 'Zebra',
6162
FACEBOOK = 'Facebook';
@@ -116,6 +117,7 @@
116117
// try matching uastring with regexes
117118
while (j < regex.length && !matches) {
118119

120+
if (!regex[j]) { break; }
119121
matches = regex[j++].exec(ua);
120122

121123
if (!!matches) {
@@ -232,7 +234,7 @@
232234
/(?:ms|\()(ie) ([\w\.]+)/i, // Internet Explorer
233235

234236
// Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
235-
/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i,
237+
/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i,
236238
// Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ
237239
/(weibo)__([\d\.]+)/i // Weibo
238240
], [NAME, VERSION], [
@@ -283,6 +285,8 @@
283285
// WebView
284286
/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i // Facebook App for iOS & Android
285287
], [[NAME, FACEBOOK], VERSION], [
288+
/(kakao(?:talk|story))[\/ ]([\w\.]+)/i, // Kakao App
289+
/(naver)\(.*?(\d+\.[\w\.]+).*\)/i, // Naver InApp
286290
/safari (line)\/([\w\.]+)/i, // Line App for iOS
287291
/\b(line)\/([\w\.]+)\/iab/i, // Line App for Android
288292
/(chromium|instagram)[\/ ]([-\w\.]+)/i // Chromium/Instagram
@@ -329,7 +333,8 @@
329333
// Other
330334
/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
331335
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser
332-
/(links) \(([\w\.]+)/i // Links
336+
/(links) \(([\w\.]+)/i, // Links
337+
/panasonic;(viera)/i // Panasonic Viera
333338
], [NAME, VERSION], [
334339

335340
/(cobalt)\/([\w\.]+)/i // Cobalt
@@ -372,13 +377,12 @@
372377

373378
//////////////////////////
374379
// MOBILES & TABLETS
375-
// Ordered by popularity
376380
/////////////////////////
377381

378382
// Samsung
379383
/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i
380384
], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [
381-
/\b((?:s[cgp]h|gt|sm)-\w+|galaxy nexus)/i,
385+
/\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
382386
/samsung[- ]([-\w]+)/i,
383387
/sec-(sgh\w+)/i
384388
], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [
@@ -393,6 +397,10 @@
393397
/(macintosh);/i
394398
], [MODEL, [VENDOR, APPLE]], [
395399

400+
// Sharp
401+
/\b(sh-?[altvz]?\d\d[a-ekm]?)/i
402+
], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [
403+
396404
// Huawei
397405
/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i
398406
], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [
@@ -496,7 +504,7 @@
496504

497505
// ZTE
498506
/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
499-
/(alcatel|geeksphone|nexian|panasonic|sony(?!-bra))[-_ ]?([-\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
507+
/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
500508
], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
501509

502510
// Acer
@@ -508,10 +516,6 @@
508516
/\bmz-([-\w]{2,})/i
509517
], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [
510518

511-
// Sharp
512-
/\b(sh-?[altvz]?\d\d[a-ekm]?)/i
513-
], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [
514-
515519
// MIXED
516520
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i,
517521
// BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
@@ -523,6 +527,7 @@
523527
/(oppo) ?([\w ]+) bui/i // OPPO
524528
], [VENDOR, MODEL, [TYPE, MOBILE]], [
525529

530+
/(kobo)\s(ereader|touch)/i, // Kobo
526531
/(archos) (gamepad2?)/i, // Archos
527532
/(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad
528533
/(kindle)\/([\w\.]+)/i, // Kindle
@@ -592,20 +597,6 @@
592597
/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i
593598
], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [
594599

595-
///////////////////
596-
// CONSOLES
597-
///////////////////
598-
599-
/(ouya)/i, // Ouya
600-
/(nintendo) ([wids3utch]+)/i // Nintendo
601-
], [VENDOR, MODEL, [TYPE, CONSOLE]], [
602-
/droid.+; (shield) bui/i // Nvidia
603-
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [
604-
/(playstation [345portablevi]+)/i // Playstation
605-
], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [
606-
/\b(xbox(?: one)?(?!; xbox))[\); ]/i // Microsoft Xbox
607-
], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [
608-
609600
///////////////////
610601
// SMARTTVS
611602
///////////////////
@@ -629,12 +620,28 @@
629620
], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [
630621
/(mitv-\w{5}) bui/i // Xiaomi
631622
], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [
623+
/Hbbtv.*(technisat) (.*);/i // TechniSAT
624+
], [VENDOR, MODEL, [TYPE, SMARTTV]], [
632625
/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, // Roku
633-
/hbbtv\/\d+\.\d+\.\d+ +\([\w ]*; *(\w[^;]*);([^;]*)/i // HbbTV devices
626+
/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i // HbbTV devices
634627
], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [
635628
/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i // SmartTV from Unidentified Vendors
636629
], [[TYPE, SMARTTV]], [
637630

631+
///////////////////
632+
// CONSOLES
633+
///////////////////
634+
635+
/(ouya)/i, // Ouya
636+
/(nintendo) ([wids3utch]+)/i // Nintendo
637+
], [VENDOR, MODEL, [TYPE, CONSOLE]], [
638+
/droid.+; (shield) bui/i // Nvidia
639+
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [
640+
/(playstation [345portablevi]+)/i // Playstation
641+
], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [
642+
/\b(xbox(?: one)?(?!; xbox))[\); ]/i // Microsoft Xbox
643+
], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [
644+
638645
///////////////////
639646
// WEARABLES
640647
///////////////////
@@ -645,7 +652,7 @@
645652
], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [
646653
/droid.+; (wt63?0{2,3})\)/i
647654
], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [
648-
/(quest( 2)?)/i // Oculus Quest
655+
/(quest( 2| pro)?)/i // Oculus Quest
649656
], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [
650657

651658
///////////////////
@@ -734,6 +741,11 @@
734741
/(cros) [\w]+ ([\w\.]+\w)/i // Chromium OS
735742
], [[NAME, 'Chromium OS'], VERSION],[
736743

744+
// Smart TVs
745+
/panasonic;(viera)/i, // Panasonic Viera
746+
/(netrange)mmh/i, // Netrange
747+
/(nettv)\/(\d+\.[\w\.]+)/i, // NetTV
748+
737749
// Console
738750
/(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation
739751
/(xbox); +xbox ([^\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)
@@ -775,6 +787,7 @@
775787
}
776788

777789
var _ua = ua || ((typeof window !== UNDEF_TYPE && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
790+
var _uach = (typeof window !== UNDEF_TYPE && window.navigator && window.navigator.userAgentData) ? window.navigator.userAgentData : undefined;
778791
var _rgxmap = extensions ? extend(regexes, extensions) : regexes;
779792

780793
this.getBrowser = function () {
@@ -797,6 +810,9 @@
797810
_device[MODEL] = undefined;
798811
_device[TYPE] = undefined;
799812
rgxMapper.call(_device, _ua, _rgxmap.device);
813+
if (!_device[TYPE] && _uach && _uach.mobile) {
814+
_device[TYPE] = MOBILE;
815+
}
800816
return _device;
801817
};
802818
this.getEngine = function () {
@@ -811,6 +827,9 @@
811827
_os[NAME] = undefined;
812828
_os[VERSION] = undefined;
813829
rgxMapper.call(_os, _ua, _rgxmap.os);
830+
if (!_os[NAME] && _uach && _uach.platform != 'Unknown') {
831+
_os[NAME] = _uach.platform.replace(/chrome/i, 'Chromium').replace(/mac/i, 'Mac ');
832+
}
814833
return _os;
815834
};
816835
this.getResult = function () {

test/browser-test.json

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1278,6 +1278,16 @@
12781278
"major" : "1"
12791279
}
12801280
},
1281+
{
1282+
"desc" : "Viera",
1283+
"ua" : "HbbTV/1.2.1 (;Panasonic;VIERA 2015;3.014;a001-003 4000-0000;)",
1284+
"expect" :
1285+
{
1286+
"name" : "VIERA",
1287+
"version" : "undefined",
1288+
"major" : "undefined"
1289+
}
1290+
},
12811291
{
12821292
"desc" : "Yandex",
12831293
"ua" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.5 (KHTML, like Gecko) YaBrowser/1.0.1084.5402 Chrome/19.0.1084.5402 Safari/536.5",
@@ -1627,5 +1637,50 @@
16271637
"version": "9.0",
16281638
"major" : "9"
16291639
}
1640+
},
1641+
{
1642+
"desc" : "KakaoTalk App Android",
1643+
"ua" : "Mozilla/5.0 (Linux; Android 12; SM-G988N Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.79 Mobile Safari/537.36;KAKAOTALK 2409760",
1644+
"expect" : {
1645+
"name" : "KAKAOTALK",
1646+
"version": "2409760",
1647+
"major" : "2409760"
1648+
}
1649+
},
1650+
{
1651+
"desc" : "KakaoStory App Android",
1652+
"ua" : "Mozilla/5.0 (Linux; Android 12; SM-G988N Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.79 Mobile Safari/537.36 KAKAOSTORY/6.8.3_21046",
1653+
"expect" : {
1654+
"name" : "KAKAOSTORY",
1655+
"version": "6.8.3_21046",
1656+
"major" : "6"
1657+
}
1658+
},
1659+
{
1660+
"desc" : "KakaoTalk App iOS",
1661+
"ua" : "Mozilla/5.0 (iPhone; CPU; iPhone OS 15_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 BizWebView KAKAOTALK 9.7.6",
1662+
"expect" : {
1663+
"name" : "KAKAOTALK",
1664+
"version": "9.7.6",
1665+
"major" : "9"
1666+
}
1667+
},
1668+
{
1669+
"desc" : "Naver App Android",
1670+
"ua" : "Mozilla/5.0 (Linux; Android 12; SM-G988N Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/90.0.4430.232 Whale/1.0.0.0 Crosswalk/26.90.3.21 Mobile Safari/537.36 NAVER(inapp; search; 1010; 11.11.2)",
1671+
"expect" : {
1672+
"name" : "NAVER",
1673+
"version": "11.11.2",
1674+
"major" : "11"
1675+
}
1676+
},
1677+
{
1678+
"desc" : "Naver App iOS",
1679+
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/605.1 NAVER(inapp; search; 720; 10.25.0; 11PRO)",
1680+
"expect" : {
1681+
"name" : "NAVER",
1682+
"version": "10.25.0",
1683+
"major" : "10"
1684+
}
16301685
}
16311686
]

0 commit comments

Comments
 (0)