Skip to content

Commit 172f57f

Browse files
committed
Fix #636 - Add new browser: HeyTap | Fix #248 - Add 'Mobile' prefix for mobile version of Chrome, Firefox, Safari
1 parent 33f0209 commit 172f57f

File tree

3 files changed

+41
-30
lines changed

3 files changed

+41
-30
lines changed

readme.md

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

src/ua-parser.js

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@
7575
XIAOMI = 'Xiaomi',
7676
ZEBRA = 'Zebra',
7777
ZTE = 'ZTE',
78-
SUFFIX_BROWSER = 'Browser',
79-
SUFFIX_MOBILE = 'Mobile',
78+
PREFIX_MOBILE = 'Mobile ',
79+
SUFFIX_BROWSER = ' Browser',
8080
CHROME = 'Chrome',
8181
EDGE = 'Edge',
8282
FIREFOX = 'Firefox',
@@ -280,8 +280,9 @@
280280

281281
browser : [[
282282

283+
// Most common regardless engine
283284
/\b(?:crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS
284-
], [VERSION, [NAME, 'Chrome']], [
285+
], [VERSION, [NAME, PREFIX_MOBILE + 'Chrome']], [
285286
/edg(?:e|ios|a)?\/([\w\.]+)/i // Microsoft Edge
286287
], [VERSION, [NAME, 'Edge']], [
287288

@@ -305,11 +306,12 @@
305306

306307
// Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
307308
/(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,
308-
// Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ
309+
// Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo
310+
/(heytap|ovi)browser\/([\d\.]+)/i, // HeyTap/Ovi
309311
/(weibo)__([\d\.]+)/i // Weibo
310312
], [NAME, VERSION], [
311313
/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i // UCBrowser
312-
], [VERSION, [NAME, 'UC'+SUFFIX_BROWSER]], [
314+
], [VERSION, [NAME, 'UCBrowser']], [
313315
/microm.+\bqbcore\/([\w\.]+)/i, // WeChat Desktop for Windows Built-in Browser
314316
/\bqbcore\/([\w\.]+).+microm/i
315317
], [VERSION, [NAME, 'WeChat(Win) Desktop']], [
@@ -322,7 +324,7 @@
322324
/ya(?:search)?browser\/([\w\.]+)/i // Yandex
323325
], [VERSION, [NAME, 'Yandex']], [
324326
/(avast|avg)\/([\w\.]+)/i // Avast/AVG Secure Browser
325-
], [[NAME, /(.+)/, '$1 Secure '+SUFFIX_BROWSER], VERSION], [
327+
], [[NAME, /(.+)/, '$1 Secure' + SUFFIX_BROWSER], VERSION], [
326328
/\bfocus\/([\w\.]+)/i // Firefox Focus
327329
], [VERSION, [NAME, FIREFOX+' Focus']], [
328330
/\bopt\/([\w\.]+)/i // Opera Touch
@@ -334,13 +336,13 @@
334336
/coast\/([\w\.]+)/i // Opera Coast
335337
], [VERSION, [NAME, OPERA+' Coast']], [
336338
/miuibrowser\/([\w\.]+)/i // MIUI Browser
337-
], [VERSION, [NAME, 'MIUI '+SUFFIX_BROWSER]], [
339+
], [VERSION, [NAME, 'MIUI' + SUFFIX_BROWSER]], [
338340
/fxios\/([\w\.-]+)/i // Firefox for iOS
339-
], [VERSION, [NAME, 'Firefox '+SUFFIX_MOBILE]], [
341+
], [VERSION, [NAME, PREFIX_MOBILE + 'Firefox']], [
340342
/\bqihu|(qi?ho?o?|360)browser/i // 360
341-
], [[NAME, '360 '+SUFFIX_BROWSER]], [
343+
], [[NAME, '360' + SUFFIX_BROWSER]], [
342344
/(oculus|samsung|sailfish|huawei)browser\/([\w\.]+)/i
343-
], [[NAME, /(.+)/, '$1 '+SUFFIX_BROWSER], VERSION], [ // Oculus/Samsung/Sailfish/Huawei Browser
345+
], [[NAME, /(.+)/, '$1' + SUFFIX_BROWSER], VERSION], [ // Oculus/Samsung/Sailfish/Huawei Browser
344346
/(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon
345347
], [[NAME, /_/g, ' '], VERSION], [
346348
/(electron)\/([\w\.]+) safari/i, // Electron-based App
@@ -371,19 +373,18 @@
371373
], [[NAME, CHROME+' WebView'], VERSION], [
372374

373375
/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i // Android Browser
374-
], [VERSION, [NAME, 'Android '+SUFFIX_BROWSER]], [
376+
], [VERSION, [NAME, 'Android' + SUFFIX_BROWSER]], [
375377

376-
/chrome\/([\w\.]+) mobile/i, // Chrome Mobile
377-
/(?:(?:android.+)crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS
378-
], [VERSION, [NAME, 'Chrome '+SUFFIX_MOBILE]], [
378+
/chrome\/([\w\.]+) mobile/i // Chrome Mobile
379+
], [VERSION, [NAME, PREFIX_MOBILE + 'Chrome']], [
379380

380381
/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia
381382
], [NAME, VERSION], [
382383

383384
/version\/([\w\.\,]+) .*mobile(?:\/\w+ | ?)safari/i // Safari Mobile
384-
], [VERSION, [NAME, 'Safari '+SUFFIX_MOBILE]], [
385+
], [VERSION, [NAME, PREFIX_MOBILE + 'Safari']], [
385386
/iphone .*mobile(?:\/\w+ | ?)safari/i
386-
], [[NAME, 'Safari '+SUFFIX_MOBILE]], [
387+
], [[NAME, PREFIX_MOBILE + 'Safari']], [
387388
/version\/([\w\.\,]+) .*(safari)/i // Safari
388389
], [VERSION, NAME], [
389390
/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
@@ -394,7 +395,7 @@
394395

395396
// Gecko based
396397
/(?:mobile|tablet);.*(firefox)\/([\w\.-]+)/i // Firefox Mobile
397-
], [[NAME, 'Firefox '+SUFFIX_MOBILE], VERSION], [
398+
], [[NAME, PREFIX_MOBILE + 'Firefox'], VERSION], [
398399
/(navigator|netscape\d?)\/([-\w\.]+)/i // Netscape
399400
], [[NAME, 'Netscape'], VERSION], [
400401
/mobile vr; rv:([\w\.]+)\).+firefox/i // Firefox Reality

test/browser-test.json

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@
234234
"ua" : "Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3",
235235
"expect" :
236236
{
237-
"name" : "Chrome",
237+
"name" : "Mobile Chrome",
238238
"version" : "19.0.1084.60",
239239
"major" : "19"
240240
}
@@ -254,7 +254,7 @@
254254
"ua" : "Mozilla/5.0 (Linux; U; Android-4.0.3; en-us; Galaxy Nexus Build/IML74K) AppleWebKit/535.7 (KHTML, like Gecko) CrMo/16.0.912.75 Mobile Safari/535.7",
255255
"expect" :
256256
{
257-
"name" : "Chrome",
257+
"name" : "Mobile Chrome",
258258
"version" : "16.0.912.75",
259259
"major" : "16"
260260
}
@@ -508,6 +508,16 @@
508508
"major" : "1"
509509
}
510510
},
511+
{
512+
"desc" : "HeyTap",
513+
"ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.61 Safari/537.36 HeyTapBrowser/40.8.10.1",
514+
"expect" :
515+
{
516+
"name" : "HeyTap",
517+
"version" : "40.8.10.1",
518+
"major" : "40"
519+
}
520+
},
511521
{
512522
"desc" : "HuaweiBrowser",
513523
"ua" : "Mozilla/5.0 (Linux; Android 6.0.1; LYA-AL00;HMSCore/4.0.0 GMS/10.4 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.64 HuaweiBrowser/10.0.3.102 Mobile Safari/537.36",
@@ -753,7 +763,7 @@
753763
"ua" : "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7",
754764
"expect" :
755765
{
756-
"name" : "Safari Mobile",
766+
"name" : "Mobile Safari",
757767
"version" : "4.0.5",
758768
"major" : "4"
759769
}
@@ -763,7 +773,7 @@
763773
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 16_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Safari/604.1",
764774
"expect" :
765775
{
766-
"name" : "Safari Mobile",
776+
"name" : "Mobile Safari",
767777
"version" : "undefined",
768778
"major" : "undefined"
769779
}
@@ -1413,7 +1423,7 @@
14131423
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) FxiOS/1.1 Mobile/13B143 Safari/601.1.46",
14141424
"expect" :
14151425
{
1416-
"name" : "Firefox Mobile",
1426+
"name" : "Mobile Firefox",
14171427
"version" : "1.1",
14181428
"major" : "1"
14191429
}
@@ -1423,7 +1433,7 @@
14231433
"ua" : "Mozilla/5.0 (iPad; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4",
14241434
"expect" :
14251435
{
1426-
"name" : "Firefox Mobile",
1436+
"name" : "Mobile Firefox",
14271437
"version" : "1.0",
14281438
"major" : "1"
14291439
}
@@ -1617,7 +1627,7 @@
16171627
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 15_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.6,2 Mobile/15E148 Safari/604.1",
16181628
"expect" :
16191629
{
1620-
"name" : "Safari Mobile",
1630+
"name" : "Mobile Safari",
16211631
"version" : "15.6,2",
16221632
"major" : "15"
16231633
}
@@ -1708,7 +1718,7 @@
17081718
"ua" : "Mozilla/5.0 (Linux; Android 7.1.2; Nexus 5X Build/N2G47W) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36",
17091719
"expect" :
17101720
{
1711-
"name" : "Chrome Mobile",
1721+
"name" : "Mobile Chrome",
17121722
"version" : "58.0.3029.83",
17131723
"major" : "58"
17141724
}
@@ -1718,7 +1728,7 @@
17181728
"ua" : "Mozilla/5.0 (Linux; Android 7.1.2; Nexus 5X Build/N2G47W) AppleWebKit/537.36 (KHTML, like Gecko) FxiOS/7.5b3349 Mobile/14F89 Safari/603.2.4",
17191729
"expect" :
17201730
{
1721-
"name" : "Firefox Mobile",
1731+
"name" : "Mobile Firefox",
17221732
"version" : "7.5b3349",
17231733
"major" : "7"
17241734
}
@@ -1728,7 +1738,7 @@
17281738
"ua" : "Mozilla/5.0 (Android 5.0; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0",
17291739
"expect" :
17301740
{
1731-
"name" : "Firefox Mobile",
1741+
"name" : "Mobile Firefox",
17321742
"version" : "41.0",
17331743
"major" : "41"
17341744
}

0 commit comments

Comments
 (0)