|
75 | 75 | XIAOMI = 'Xiaomi', |
76 | 76 | ZEBRA = 'Zebra', |
77 | 77 | ZTE = 'ZTE', |
78 | | - SUFFIX_BROWSER = 'Browser', |
79 | | - SUFFIX_MOBILE = 'Mobile', |
| 78 | + PREFIX_MOBILE = 'Mobile ', |
| 79 | + SUFFIX_BROWSER = ' Browser', |
80 | 80 | CHROME = 'Chrome', |
81 | 81 | EDGE = 'Edge', |
82 | 82 | FIREFOX = 'Firefox', |
|
280 | 280 |
|
281 | 281 | browser : [[ |
282 | 282 |
|
| 283 | + // Most common regardless engine |
283 | 284 | /\b(?:crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS |
284 | | - ], [VERSION, [NAME, 'Chrome']], [ |
| 285 | + ], [VERSION, [NAME, PREFIX_MOBILE + 'Chrome']], [ |
285 | 286 | /edg(?:e|ios|a)?\/([\w\.]+)/i // Microsoft Edge |
286 | 287 | ], [VERSION, [NAME, 'Edge']], [ |
287 | 288 |
|
|
305 | 306 |
|
306 | 307 | // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon |
307 | 308 | /(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 |
309 | 311 | /(weibo)__([\d\.]+)/i // Weibo |
310 | 312 | ], [NAME, VERSION], [ |
311 | 313 | /(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i // UCBrowser |
312 | | - ], [VERSION, [NAME, 'UC'+SUFFIX_BROWSER]], [ |
| 314 | + ], [VERSION, [NAME, 'UCBrowser']], [ |
313 | 315 | /microm.+\bqbcore\/([\w\.]+)/i, // WeChat Desktop for Windows Built-in Browser |
314 | 316 | /\bqbcore\/([\w\.]+).+microm/i |
315 | 317 | ], [VERSION, [NAME, 'WeChat(Win) Desktop']], [ |
|
322 | 324 | /ya(?:search)?browser\/([\w\.]+)/i // Yandex |
323 | 325 | ], [VERSION, [NAME, 'Yandex']], [ |
324 | 326 | /(avast|avg)\/([\w\.]+)/i // Avast/AVG Secure Browser |
325 | | - ], [[NAME, /(.+)/, '$1 Secure '+SUFFIX_BROWSER], VERSION], [ |
| 327 | + ], [[NAME, /(.+)/, '$1 Secure' + SUFFIX_BROWSER], VERSION], [ |
326 | 328 | /\bfocus\/([\w\.]+)/i // Firefox Focus |
327 | 329 | ], [VERSION, [NAME, FIREFOX+' Focus']], [ |
328 | 330 | /\bopt\/([\w\.]+)/i // Opera Touch |
|
334 | 336 | /coast\/([\w\.]+)/i // Opera Coast |
335 | 337 | ], [VERSION, [NAME, OPERA+' Coast']], [ |
336 | 338 | /miuibrowser\/([\w\.]+)/i // MIUI Browser |
337 | | - ], [VERSION, [NAME, 'MIUI '+SUFFIX_BROWSER]], [ |
| 339 | + ], [VERSION, [NAME, 'MIUI' + SUFFIX_BROWSER]], [ |
338 | 340 | /fxios\/([\w\.-]+)/i // Firefox for iOS |
339 | | - ], [VERSION, [NAME, 'Firefox '+SUFFIX_MOBILE]], [ |
| 341 | + ], [VERSION, [NAME, PREFIX_MOBILE + 'Firefox']], [ |
340 | 342 | /\bqihu|(qi?ho?o?|360)browser/i // 360 |
341 | | - ], [[NAME, '360 '+SUFFIX_BROWSER]], [ |
| 343 | + ], [[NAME, '360' + SUFFIX_BROWSER]], [ |
342 | 344 | /(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 |
344 | 346 | /(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon |
345 | 347 | ], [[NAME, /_/g, ' '], VERSION], [ |
346 | 348 | /(electron)\/([\w\.]+) safari/i, // Electron-based App |
|
371 | 373 | ], [[NAME, CHROME+' WebView'], VERSION], [ |
372 | 374 |
|
373 | 375 | /droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i // Android Browser |
374 | | - ], [VERSION, [NAME, 'Android '+SUFFIX_BROWSER]], [ |
| 376 | + ], [VERSION, [NAME, 'Android' + SUFFIX_BROWSER]], [ |
375 | 377 |
|
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']], [ |
379 | 380 |
|
380 | 381 | /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia |
381 | 382 | ], [NAME, VERSION], [ |
382 | 383 |
|
383 | 384 | /version\/([\w\.\,]+) .*mobile(?:\/\w+ | ?)safari/i // Safari Mobile |
384 | | - ], [VERSION, [NAME, 'Safari '+SUFFIX_MOBILE]], [ |
| 385 | + ], [VERSION, [NAME, PREFIX_MOBILE + 'Safari']], [ |
385 | 386 | /iphone .*mobile(?:\/\w+ | ?)safari/i |
386 | | - ], [[NAME, 'Safari '+SUFFIX_MOBILE]], [ |
| 387 | + ], [[NAME, PREFIX_MOBILE + 'Safari']], [ |
387 | 388 | /version\/([\w\.\,]+) .*(safari)/i // Safari |
388 | 389 | ], [VERSION, NAME], [ |
389 | 390 | /webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i // Safari < 3.0 |
|
394 | 395 |
|
395 | 396 | // Gecko based |
396 | 397 | /(?:mobile|tablet);.*(firefox)\/([\w\.-]+)/i // Firefox Mobile |
397 | | - ], [[NAME, 'Firefox '+SUFFIX_MOBILE], VERSION], [ |
| 398 | + ], [[NAME, PREFIX_MOBILE + 'Firefox'], VERSION], [ |
398 | 399 | /(navigator|netscape\d?)\/([-\w\.]+)/i // Netscape |
399 | 400 | ], [[NAME, 'Netscape'], VERSION], [ |
400 | 401 | /mobile vr; rv:([\w\.]+)\).+firefox/i // Firefox Reality |
|
0 commit comments