mirror of
https://github.com/faisalman/ua-parser-js.git
synced 2025-11-16 23:21:52 +03:00
Compare commits
39 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a88934fadf | ||
|
|
8cf2a87938 | ||
|
|
b1d6eda6e1 | ||
|
|
a9fc6163b8 | ||
|
|
7ef62a68de | ||
|
|
de3b3bd55e | ||
|
|
700220f2b9 | ||
|
|
90ae87ec17 | ||
|
|
f60fdbefa5 | ||
|
|
97e919024b | ||
|
|
a88b70bdd4 | ||
|
|
89635fcc6e | ||
|
|
b6d2bb5262 | ||
|
|
73192e64d4 | ||
|
|
557c46f413 | ||
|
|
9fb502ea6d | ||
|
|
37cac21d0c | ||
|
|
95f37b4ce5 | ||
|
|
cc479f81ae | ||
|
|
d1a7f365ad | ||
|
|
a4da1e2b65 | ||
|
|
795139e1b8 | ||
|
|
97dc89ae03 | ||
|
|
995e872ff8 | ||
|
|
3bad800860 | ||
|
|
bc4fd7417c | ||
|
|
6f27f8b862 | ||
|
|
df5229cb62 | ||
|
|
732cf5834e | ||
|
|
ddcc29f63f | ||
|
|
ce95d9ac17 | ||
|
|
56978dec0a | ||
|
|
60c4c2b693 | ||
|
|
213d2296df | ||
|
|
ed1ccb3902 | ||
|
|
61e5d24bb5 | ||
|
|
7c5991a725 | ||
|
|
3a5a701375 | ||
|
|
f6ef14d0cd |
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "ua-parser-js",
|
"name": "ua-parser-js",
|
||||||
"version": "0.7.19",
|
"version": "0.7.20",
|
||||||
"authors": [
|
"authors": [
|
||||||
"Faisal Salman <fyzlman@gmail.com>"
|
"Faisal Salman <f@faisalman.com>"
|
||||||
],
|
],
|
||||||
"private": false,
|
"private": false,
|
||||||
"main": "src/ua-parser.js",
|
"main": "src/ua-parser.js",
|
||||||
|
|||||||
8
dist/ua-parser.min.js
vendored
8
dist/ua-parser.min.js
vendored
File diff suppressed because one or more lines are too long
8
dist/ua-parser.pack.js
vendored
8
dist/ua-parser.pack.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2012-2018 Faisal Salman <<f@faisalman.com>>
|
Copyright (c) 2012-2019 Faisal Salman <<f@faisalman.com>>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
Package.describe({
|
Package.describe({
|
||||||
name: 'faisalman:ua-parser-js',
|
name: 'faisalman:ua-parser-js',
|
||||||
version: '0.7.19',
|
version: '0.7.20',
|
||||||
summary: 'Lightweight JavaScript-based user-agent string parser',
|
summary: 'Lightweight JavaScript-based user-agent string parser',
|
||||||
git: 'https://github.com/faisalman/ua-parser-js.git',
|
git: 'https://github.com/faisalman/ua-parser-js.git',
|
||||||
documentation: 'readme.md'
|
documentation: 'readme.md'
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"title": "UAParser.js",
|
"title": "UAParser.js",
|
||||||
"name": "ua-parser-js",
|
"name": "ua-parser-js",
|
||||||
"version": "0.7.19",
|
"version": "0.7.20",
|
||||||
"author": "Faisal Salman <f@faisalman.com> (http://faisalman.com)",
|
"author": "Faisal Salman <f@faisalman.com> (http://faisalman.com)",
|
||||||
"description": "Lightweight JavaScript-based user-agent string parser",
|
"description": "Lightweight JavaScript-based user-agent string parser",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
@@ -125,7 +125,7 @@
|
|||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/faisalman/ua-parser-js.git"
|
"url": "https://github.com/faisalman/ua-parser-js.git"
|
||||||
},
|
},
|
||||||
"license": "(GPL-2.0 OR MIT)",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "*"
|
"node": "*"
|
||||||
},
|
},
|
||||||
|
|||||||
40
readme.md
40
readme.md
@@ -30,16 +30,16 @@
|
|||||||
2345Explorer, Amaya, Android Browser, Arora, Avant, BIDUBrowser, Baidu,
|
2345Explorer, Amaya, Android Browser, Arora, Avant, BIDUBrowser, Baidu,
|
||||||
Basilisk, Blazer, Bolt, Bowser, Camino, Chimera, Chrome Headless,
|
Basilisk, Blazer, Bolt, Bowser, Camino, Chimera, Chrome Headless,
|
||||||
Chrome WebView, Chrome, Chromium, Comodo Dragon, Dillo, Dolphin, Doris, Edge,
|
Chrome WebView, Chrome, Chromium, Comodo Dragon, Dillo, Dolphin, Doris, Edge,
|
||||||
Epiphany, Facebook, Fennec, Firebird, Firefox, Flock, GSA, GoBrowser,
|
Epiphany, Facebook, Falkon, Fennec, Firebird, Firefox, Flock, GSA, GoBrowser,
|
||||||
ICE Browser, IE, IEMobile, IceApe, IceCat, IceDragon, Iceape, Iceweasel,
|
ICE Browser, IE, IEMobile, IceApe, IceCat, IceDragon, Iceape, Iceweasel,
|
||||||
Iridium, Iron, Jasmine, K-Meleon, Kindle, Konqueror, LBBROWSER Line, Links,
|
Iridium, Iron, Jasmine, K-Meleon, Kindle, Konqueror, LBBROWSER Line, Links,
|
||||||
Lunascape, Lynx, MIUI Browser, Maemo Browser, Maemo, Maxthon, MetaSr Midori,
|
Lunascape, Lynx, MIUI Browser, Maemo Browser, Maemo, Maxthon, MetaSr Midori,
|
||||||
Minimo, Mobile Safari, Mosaic, Mozilla, NetFront, NetSurf, Netfront, Netscape,
|
Minimo, Mobile Safari, Mosaic, Mozilla, NetFront, NetSurf, Netfront, Netscape,
|
||||||
NokiaBrowser, Oculus Browser, OmniWeb, Opera Coast, Opera Mini, Opera Mobi,
|
NokiaBrowser, Oculus Browser, OmniWeb, Opera Coast, Opera Mini, Opera Mobi,
|
||||||
Opera Tablet, Opera, PaleMoon, PhantomJS, Phoenix, Polaris, Puffin, QQ,
|
Opera Tablet, Opera, PaleMoon, PhantomJS, Phoenix, Polaris, Puffin, QQ,
|
||||||
QQBrowser, QQBrowserLite, Quark, RockMelt, Safari, Samsung Browser, SeaMonkey,
|
QQBrowser, QQBrowserLite, Quark, QupZilla, RockMelt, Safari, Samsung Browser,
|
||||||
Silk, Skyfire, Sleipnir, Slim, SlimBrowser, Swiftfox, Tizen Browser, UCBrowser,
|
SeaMonkey, Silk, Skyfire, Sleipnir, Slim, SlimBrowser, Swiftfox, Tizen Browser,
|
||||||
Vivaldi, Waterfox, WeChat, Yandex, baidu, iCab, w3m, ...
|
UCBrowser, Vivaldi, Waterfox, WeChat, Yandex, baidu, iCab, w3m, ...
|
||||||
|
|
||||||
# 'browser.version' determined dynamically
|
# 'browser.version' determined dynamically
|
||||||
```
|
```
|
||||||
@@ -65,8 +65,8 @@ RIM, Samsung, Sharp, Siemens, Sony[Ericsson], Sprint, Xbox, Xiaomi, ZTE, ...
|
|||||||
|
|
||||||
```sh
|
```sh
|
||||||
# Possible 'engine.name'
|
# Possible 'engine.name'
|
||||||
Amaya, EdgeHTML, Gecko, iCab, KHTML, Links, Lynx, NetFront, NetSurf, Presto,
|
Amaya, Blink, EdgeHTML, Gecko, Goanna, iCab, KHTML, Links, Lynx, NetFront, NetSurf,
|
||||||
Tasman, Trident, w3m, WebKit
|
Presto, Tasman, Trident, w3m, WebKit
|
||||||
|
|
||||||
# 'engine.version' determined dynamically
|
# 'engine.version' determined dynamically
|
||||||
```
|
```
|
||||||
@@ -241,18 +241,6 @@ $ npm install --save @types/ua-parser-js
|
|||||||
# https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ua-parser-js
|
# https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ua-parser-js
|
||||||
```
|
```
|
||||||
|
|
||||||
## Using CLI
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ node ua-parser.min.js "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)"
|
|
||||||
# multiple args
|
|
||||||
$ node ua-parser.min.js "Opera/1.2" "Opera/3.4"
|
|
||||||
# piped args
|
|
||||||
$ echo "Opera/1.2" | node ua-parser.min.js
|
|
||||||
# log file
|
|
||||||
$ cat ua.log | node ua-parser.min.js
|
|
||||||
```
|
|
||||||
|
|
||||||
## Using jQuery/Zepto ($.ua)
|
## Using jQuery/Zepto ($.ua)
|
||||||
|
|
||||||
Although written in vanilla js (which means it doesn't depends on jQuery), this library will automatically detect if jQuery/Zepto is present and create `$.ua` object based on browser's user-agent (although in case you need, `window.UAParser` constructor is still present). To get/set user-agent you can use: `$.ua.get()` / `$.ua.set(uastring)`.
|
Although written in vanilla js (which means it doesn't depends on jQuery), this library will automatically detect if jQuery/Zepto is present and create `$.ua` object based on browser's user-agent (although in case you need, `window.UAParser` constructor is still present). To get/set user-agent you can use: `$.ua.get()` / `$.ua.set(uastring)`.
|
||||||
@@ -325,16 +313,16 @@ Do you use & like UAParser.js but you don’t find a way to show some love? If y
|
|||||||
|
|
||||||
# License
|
# License
|
||||||
|
|
||||||
Dual licensed under GPLv2 or MIT
|
MIT License
|
||||||
|
|
||||||
Copyright © 2012-2018 Faisal Salman <<f@faisalman.com>>
|
Copyright (c) 2012-2019 Faisal Salman <<f@faisalman.com>>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
the Software without restriction, including without limitation the rights to use,
|
in the Software without restriction, including without limitation the rights
|
||||||
copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
Software, and to permit persons to whom the Software is furnished to do so,
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
subject to the following conditions:
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
The above copyright notice and this permission notice shall be included in all
|
||||||
copies or substantial portions of the Software.
|
copies or substantial portions of the Software.
|
||||||
|
|||||||
310
src/ua-parser.js
310
src/ua-parser.js
@@ -1,10 +1,10 @@
|
|||||||
/*!
|
/*!
|
||||||
* UAParser.js v0.7.19
|
* UAParser.js v0.7.20
|
||||||
* Lightweight JavaScript-based User-Agent string parser
|
* Lightweight JavaScript-based User-Agent string parser
|
||||||
* https://github.com/faisalman/ua-parser-js
|
* https://github.com/faisalman/ua-parser-js
|
||||||
*
|
*
|
||||||
* Copyright © 2012-2016 Faisal Salman <fyzlman@gmail.com>
|
* Copyright © 2012-2019 Faisal Salman <f@faisalman.com>
|
||||||
* Dual licensed under GPLv2 or MIT
|
* Licensed under MIT License
|
||||||
*/
|
*/
|
||||||
|
|
||||||
(function (window, undefined) {
|
(function (window, undefined) {
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
/////////////
|
/////////////
|
||||||
|
|
||||||
|
|
||||||
var LIBVERSION = '0.7.19',
|
var LIBVERSION = '0.7.20',
|
||||||
EMPTY = '',
|
EMPTY = '',
|
||||||
UNKNOWN = '?',
|
UNKNOWN = '?',
|
||||||
FUNC_TYPE = 'function',
|
FUNC_TYPE = 'function',
|
||||||
@@ -45,15 +45,15 @@
|
|||||||
|
|
||||||
var util = {
|
var util = {
|
||||||
extend : function (regexes, extensions) {
|
extend : function (regexes, extensions) {
|
||||||
var margedRegexes = {};
|
var mergedRegexes = {};
|
||||||
for (var i in regexes) {
|
for (var i in regexes) {
|
||||||
if (extensions[i] && extensions[i].length % 2 === 0) {
|
if (extensions[i] && extensions[i].length % 2 === 0) {
|
||||||
margedRegexes[i] = extensions[i].concat(regexes[i]);
|
mergedRegexes[i] = extensions[i].concat(regexes[i]);
|
||||||
} else {
|
} else {
|
||||||
margedRegexes[i] = regexes[i];
|
mergedRegexes[i] = regexes[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return margedRegexes;
|
return mergedRegexes;
|
||||||
},
|
},
|
||||||
has : function (str1, str2) {
|
has : function (str1, str2) {
|
||||||
if (typeof str1 === "string") {
|
if (typeof str1 === "string") {
|
||||||
@@ -83,14 +83,7 @@
|
|||||||
|
|
||||||
rgx : function (ua, arrays) {
|
rgx : function (ua, arrays) {
|
||||||
|
|
||||||
//var result = {},
|
var i = 0, j, k, p, q, matches, match;
|
||||||
var i = 0, j, k, p, q, matches, match;//, args = arguments;
|
|
||||||
|
|
||||||
/*// construct object barebones
|
|
||||||
for (p = 0; p < args[1].length; p++) {
|
|
||||||
q = args[1][p];
|
|
||||||
result[typeof q === OBJ_TYPE ? q[0] : q] = undefined;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
// loop through all regexes maps
|
// loop through all regexes maps
|
||||||
while (i < arrays.length && !matches) {
|
while (i < arrays.length && !matches) {
|
||||||
@@ -138,8 +131,6 @@
|
|||||||
}
|
}
|
||||||
i += 2;
|
i += 2;
|
||||||
}
|
}
|
||||||
// console.log(this);
|
|
||||||
//return this;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
str : function (str, map) {
|
str : function (str, map) {
|
||||||
@@ -254,14 +245,17 @@
|
|||||||
|
|
||||||
// Webkit/KHTML based
|
// Webkit/KHTML based
|
||||||
/(rekonq)\/([\w\.]*)/i, // Rekonq
|
/(rekonq)\/([\w\.]*)/i, // Rekonq
|
||||||
/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark)\/([\w\.-]+)/i
|
/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\/([\w\.-]+)/i
|
||||||
// Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser
|
// Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
|
||||||
], [NAME, VERSION], [
|
], [NAME, VERSION], [
|
||||||
|
|
||||||
|
/(konqueror)\/([\w\.]+)/i // Konqueror
|
||||||
|
], [[NAME, 'Konqueror'], VERSION], [
|
||||||
|
|
||||||
/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i // IE11
|
/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i // IE11
|
||||||
], [[NAME, 'IE'], VERSION], [
|
], [[NAME, 'IE'], VERSION], [
|
||||||
|
|
||||||
/(edge|edgios|edga)\/((\d+)?[\w\.]+)/i // Microsoft Edge
|
/(edge|edgios|edga|edg)\/((\d+)?[\w\.]+)/i // Microsoft Edge
|
||||||
], [[NAME, 'Edge'], VERSION], [
|
], [[NAME, 'Edge'], VERSION], [
|
||||||
|
|
||||||
/(yabrowser)\/([\w\.]+)/i // Yandex
|
/(yabrowser)\/([\w\.]+)/i // Yandex
|
||||||
@@ -282,6 +276,9 @@
|
|||||||
/(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon
|
/(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon
|
||||||
], [[NAME, /_/g, ' '], VERSION], [
|
], [[NAME, /_/g, ' '], VERSION], [
|
||||||
|
|
||||||
|
/(windowswechat qbcore)\/([\w\.]+)/i // WeChat Desktop for Windows Built-in Browser
|
||||||
|
], [[NAME, 'WeChat(Win) Desktop'], VERSION], [
|
||||||
|
|
||||||
/(micromessenger)\/([\w\.]+)/i // WeChat
|
/(micromessenger)\/([\w\.]+)/i // WeChat
|
||||||
], [[NAME, 'WeChat'], VERSION], [
|
], [[NAME, 'WeChat'], VERSION], [
|
||||||
|
|
||||||
@@ -331,6 +328,9 @@
|
|||||||
/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i // Android Browser
|
/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i // Android Browser
|
||||||
], [VERSION, [NAME, 'Android Browser']], [
|
], [VERSION, [NAME, 'Android Browser']], [
|
||||||
|
|
||||||
|
/(sailfishbrowser)\/([\w\.]+)/i // Sailfish Browser
|
||||||
|
], [[NAME, 'Sailfish Browser'], VERSION], [
|
||||||
|
|
||||||
/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i
|
/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i
|
||||||
// Chrome/OmniWeb/Arora/Tizen/Nokia
|
// Chrome/OmniWeb/Arora/Tizen/Nokia
|
||||||
], [NAME, VERSION], [
|
], [NAME, VERSION], [
|
||||||
@@ -359,7 +359,6 @@
|
|||||||
/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
|
/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
|
||||||
], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [
|
], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [
|
||||||
|
|
||||||
/(konqueror)\/([\w\.]+)/i, // Konqueror
|
|
||||||
/(webkit|khtml)\/([\w\.]+)/i
|
/(webkit|khtml)\/([\w\.]+)/i
|
||||||
], [NAME, VERSION], [
|
], [NAME, VERSION], [
|
||||||
|
|
||||||
@@ -382,117 +381,6 @@
|
|||||||
/(ice\s?browser)\/v?([\w\._]+)/i, // ICE Browser
|
/(ice\s?browser)\/v?([\w\._]+)/i, // ICE Browser
|
||||||
/(mosaic)[\/\s]([\w\.]+)/i // Mosaic
|
/(mosaic)[\/\s]([\w\.]+)/i // Mosaic
|
||||||
], [NAME, VERSION]
|
], [NAME, VERSION]
|
||||||
|
|
||||||
/* /////////////////////
|
|
||||||
// Media players BEGIN
|
|
||||||
////////////////////////
|
|
||||||
|
|
||||||
, [
|
|
||||||
|
|
||||||
/(apple(?:coremedia|))\/((\d+)[\w\._]+)/i, // Generic Apple CoreMedia
|
|
||||||
/(coremedia) v((\d+)[\w\._]+)/i
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(aqualung|lyssna|bsplayer)\/((\d+)?[\w\.-]+)/i // Aqualung/Lyssna/BSPlayer
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(ares|ossproxy)\s((\d+)[\w\.-]+)/i // Ares/OSSProxy
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(audacious|audimusicstream|amarok|bass|core|dalvik|gnomemplayer|music on console|nsplayer|psp-internetradioplayer|videos)\/((\d+)[\w\.-]+)/i,
|
|
||||||
// Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/Dalvik/GnomeMplayer/MoC
|
|
||||||
// NSPlayer/PSP-InternetRadioPlayer/Videos
|
|
||||||
/(clementine|music player daemon)\s((\d+)[\w\.-]+)/i, // Clementine/MPD
|
|
||||||
/(lg player|nexplayer)\s((\d+)[\d\.]+)/i,
|
|
||||||
/player\/(nexplayer|lg player)\s((\d+)[\w\.-]+)/i // NexPlayer/LG Player
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
/(nexplayer)\s((\d+)[\w\.-]+)/i // Nexplayer
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(flrp)\/((\d+)[\w\.-]+)/i // Flip Player
|
|
||||||
], [[NAME, 'Flip Player'], VERSION], [
|
|
||||||
|
|
||||||
/(fstream|nativehost|queryseekspider|ia-archiver|facebookexternalhit)/i
|
|
||||||
// FStream/NativeHost/QuerySeekSpider/IA Archiver/facebookexternalhit
|
|
||||||
], [NAME], [
|
|
||||||
|
|
||||||
/(gstreamer) souphttpsrc (?:\([^\)]+\)){0,1} libsoup\/((\d+)[\w\.-]+)/i
|
|
||||||
// Gstreamer
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(htc streaming player)\s[\w_]+\s\/\s((\d+)[\d\.]+)/i, // HTC Streaming Player
|
|
||||||
/(java|python-urllib|python-requests|wget|libcurl)\/((\d+)[\w\.-_]+)/i,
|
|
||||||
// Java/urllib/requests/wget/cURL
|
|
||||||
/(lavf)((\d+)[\d\.]+)/i // Lavf (FFMPEG)
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(htc_one_s)\/((\d+)[\d\.]+)/i // HTC One S
|
|
||||||
], [[NAME, /_/g, ' '], VERSION], [
|
|
||||||
|
|
||||||
/(mplayer)(?:\s|\/)(?:(?:sherpya-){0,1}svn)(?:-|\s)(r\d+(?:-\d+[\w\.-]+){0,1})/i
|
|
||||||
// MPlayer SVN
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(mplayer)(?:\s|\/|[unkow-]+)((\d+)[\w\.-]+)/i // MPlayer
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(mplayer)/i, // MPlayer (no other info)
|
|
||||||
/(yourmuze)/i, // YourMuze
|
|
||||||
/(media player classic|nero showtime)/i // Media Player Classic/Nero ShowTime
|
|
||||||
], [NAME], [
|
|
||||||
|
|
||||||
/(nero (?:home|scout))\/((\d+)[\w\.-]+)/i // Nero Home/Nero Scout
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(nokia\d+)\/((\d+)[\w\.-]+)/i // Nokia
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/\s(songbird)\/((\d+)[\w\.-]+)/i // Songbird/Philips-Songbird
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(winamp)3 version ((\d+)[\w\.-]+)/i, // Winamp
|
|
||||||
/(winamp)\s((\d+)[\w\.-]+)/i,
|
|
||||||
/(winamp)mpeg\/((\d+)[\w\.-]+)/i
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(ocms-bot|tapinradio|tunein radio|unknown|winamp|inlight radio)/i // OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
|
|
||||||
// inlight radio
|
|
||||||
], [NAME], [
|
|
||||||
|
|
||||||
/(quicktime|rma|radioapp|radioclientapplication|soundtap|totem|stagefright|streamium)\/((\d+)[\w\.-]+)/i
|
|
||||||
// QuickTime/RealMedia/RadioApp/RadioClientApplication/
|
|
||||||
// SoundTap/Totem/Stagefright/Streamium
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(smp)((\d+)[\d\.]+)/i // SMP
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(vlc) media player - version ((\d+)[\w\.]+)/i, // VLC Videolan
|
|
||||||
/(vlc)\/((\d+)[\w\.-]+)/i,
|
|
||||||
/(xbmc|gvfs|xine|xmms|irapp)\/((\d+)[\w\.-]+)/i, // XBMC/gvfs/Xine/XMMS/irapp
|
|
||||||
/(foobar2000)\/((\d+)[\d\.]+)/i, // Foobar2000
|
|
||||||
/(itunes)\/((\d+)[\d\.]+)/i // iTunes
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(wmplayer)\/((\d+)[\w\.-]+)/i, // Windows Media Player
|
|
||||||
/(windows-media-player)\/((\d+)[\w\.-]+)/i
|
|
||||||
], [[NAME, /-/g, ' '], VERSION], [
|
|
||||||
|
|
||||||
/windows\/((\d+)[\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ (home media server)/i
|
|
||||||
// Windows Media Server
|
|
||||||
], [VERSION, [NAME, 'Windows']], [
|
|
||||||
|
|
||||||
/(com\.riseupradioalarm)\/((\d+)[\d\.]*)/i // RiseUP Radio Alarm
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(rad.io)\s((\d+)[\d\.]+)/i, // Rad.io
|
|
||||||
/(radio.(?:de|at|fr))\s((\d+)[\d\.]+)/i
|
|
||||||
], [[NAME, 'rad.io'], VERSION]
|
|
||||||
|
|
||||||
//////////////////////
|
|
||||||
// Media players END
|
|
||||||
////////////////////*/
|
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
cpu : [[
|
cpu : [[
|
||||||
@@ -523,7 +411,7 @@
|
|||||||
|
|
||||||
device : [[
|
device : [[
|
||||||
|
|
||||||
/\((ipad|playbook);[\w\s\);-]+(rim|apple)/i // iPad/PlayBook
|
/\((ipad|playbook);[\w\s\),;-]+(rim|apple)/i // iPad/PlayBook
|
||||||
], [MODEL, VENDOR, [TYPE, TABLET]], [
|
], [MODEL, VENDOR, [TYPE, TABLET]], [
|
||||||
|
|
||||||
/applecoremedia\/[\w\.]+ \((ipad)/ // iPad
|
/applecoremedia\/[\w\.]+ \((ipad)/ // iPad
|
||||||
@@ -561,13 +449,13 @@
|
|||||||
/\(bb10;\s(\w+)/i // BlackBerry 10
|
/\(bb10;\s(\w+)/i // BlackBerry 10
|
||||||
], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [
|
||||||
// Asus Tablets
|
// Asus Tablets
|
||||||
/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone)/i
|
/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone|p00c)/i
|
||||||
], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/(sony)\s(tablet\s[ps])\sbuild\//i, // Sony
|
/(sony)\s(tablet\s[ps])\sbuild\//i, // Sony
|
||||||
/(sony)?(?:sgp.+)\sbuild\//i
|
/(sony)?(?:sgp.+)\sbuild\//i
|
||||||
], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [
|
], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [
|
||||||
/android.+\s([c-g]\d{4}|so[-l]\w+)\sbuild\//i
|
/android.+\s([c-g]\d{4}|so[-l]\w+)(?=\sbuild\/|\).+chrome\/(?![1-6]{0,1}\d\.))/i
|
||||||
], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [
|
||||||
|
|
||||||
/\s(ouya)\s/i, // Ouya
|
/\s(ouya)\s/i, // Ouya
|
||||||
@@ -583,13 +471,10 @@
|
|||||||
/(sprint\s(\w+))/i // Sprint Phones
|
/(sprint\s(\w+))/i // Sprint Phones
|
||||||
], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [
|
], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [
|
||||||
|
|
||||||
/(lenovo)\s?(S(?:5000|6000)+(?:[-][\w+]))/i // Lenovo tablets
|
/(htc)[;_\s-]+([\w\s]+(?=\)|\sbuild)|\w+)/i, // HTC
|
||||||
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
|
||||||
|
|
||||||
/(htc)[;_\s-]+([\w\s]+(?=\))|\w+)*/i, // HTC
|
|
||||||
/(zte)-(\w*)/i, // ZTE
|
/(zte)-(\w*)/i, // ZTE
|
||||||
/(alcatel|geeksphone|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i
|
/(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i
|
||||||
// Alcatel/GeeksPhone/Lenovo/Nexian/Panasonic/Sony
|
// Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
||||||
], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
|
], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
|
||||||
|
|
||||||
/(nexus\s9)/i // HTC Nexus 9
|
/(nexus\s9)/i // HTC Nexus 9
|
||||||
@@ -642,7 +527,7 @@
|
|||||||
/(nokia)[\s_-]?([\w-]*)/i
|
/(nokia)[\s_-]?([\w-]*)/i
|
||||||
], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [
|
], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [
|
||||||
|
|
||||||
/android\s3\.[\s\w;-]{10}(a\d{3})/i // Acer
|
/android[x\d\.\s;]+\s([ab][1-7]\-?[0178a]\d\d?)/i // Acer
|
||||||
], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+([vl]k\-?\d{3})\s+build/i // LG Tablet
|
/android.+([vl]k\-?\d{3})\s+build/i // LG Tablet
|
||||||
@@ -656,8 +541,12 @@
|
|||||||
/android.+lg(\-?[\d\w]+)\s+build/i
|
/android.+lg(\-?[\d\w]+)\s+build/i
|
||||||
], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [
|
||||||
|
|
||||||
|
/(lenovo)\s?(s(?:5000|6000)(?:[\w-]+)|tab(?:[\s\w]+))/i // Lenovo tablets
|
||||||
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
||||||
/android.+(ideatab[a-z0-9\-\s]+)/i // Lenovo
|
/android.+(ideatab[a-z0-9\-\s]+)/i // Lenovo
|
||||||
], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [
|
||||||
|
/(lenovo)[_\s-]?([\w-]+)/i
|
||||||
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
||||||
|
|
||||||
/linux;.+((jolla));/i // Jolla
|
/linux;.+((jolla));/i // Jolla
|
||||||
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
||||||
@@ -677,19 +566,20 @@
|
|||||||
/android.+;\s(pixel c)[\s)]/i // Google Pixel C
|
/android.+;\s(pixel c)[\s)]/i // Google Pixel C
|
||||||
], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+;\s(pixel( [23])?( xl)?)\s/i // Google Pixel
|
/android.+;\s(pixel( [23])?( xl)?)[\s)]/i // Google Pixel
|
||||||
], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [
|
||||||
|
|
||||||
/android.+;\s(\w+)\s+build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
/android.+;\s(\w+)\s+build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
||||||
/android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i, // Xiaomi Hongmi
|
/android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i, // Xiaomi Hongmi
|
||||||
/android.+(mi[\s\-_]*(?:one|one[\s_]plus|note lte)?[\s_]*(?:\d?\w?)[\s_]*(?:plus)?)\s+build/i, // Xiaomi Mi
|
/android.+(mi[\s\-_]*(?:a\d|one|one[\s_]plus|note lte)?[\s_]*(?:\d?\w?)[\s_]*(?:plus)?)\s+build/i,
|
||||||
|
// Xiaomi Mi
|
||||||
/android.+(redmi[\s\-_]*(?:note)?(?:[\s_]*[\w\s]+))\s+build/i // Redmi Phones
|
/android.+(redmi[\s\-_]*(?:note)?(?:[\s_]*[\w\s]+))\s+build/i // Redmi Phones
|
||||||
], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [
|
], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [
|
||||||
/android.+(mi[\s\-_]*(?:pad)(?:[\s_]*[\w\s]+))\s+build/i // Mi Pad tablets
|
/android.+(mi[\s\-_]*(?:pad)(?:[\s_]*[\w\s]+))\s+build/i // Mi Pad tablets
|
||||||
],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [
|
],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [
|
||||||
/android.+;\s(m[1-5]\snote)\sbuild/i // Meizu Tablet
|
/android.+;\s(m[1-5]\snote)\sbuild/i // Meizu
|
||||||
], [MODEL, [VENDOR, 'Meizu'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [
|
||||||
/(mz)-([\w-]{2,})/i // Meizu Phone
|
/(mz)-([\w-]{2,})/i
|
||||||
], [[VENDOR, 'Meizu'], MODEL, [TYPE, MOBILE]], [
|
], [[VENDOR, 'Meizu'], MODEL, [TYPE, MOBILE]], [
|
||||||
|
|
||||||
/android.+a000(1)\s+build/i, // OnePlus
|
/android.+a000(1)\s+build/i, // OnePlus
|
||||||
@@ -767,60 +657,11 @@
|
|||||||
/\s(mobile)(?:[;\/]|\ssafari)/i // Unidentifiable Mobile
|
/\s(mobile)(?:[;\/]|\ssafari)/i // Unidentifiable Mobile
|
||||||
], [[TYPE, util.lowerize], VENDOR, MODEL], [
|
], [[TYPE, util.lowerize], VENDOR, MODEL], [
|
||||||
|
|
||||||
|
/[\s\/\(](smart-?tv)[;\)]/i // SmartTV
|
||||||
|
], [[TYPE, SMARTTV]], [
|
||||||
|
|
||||||
/(android[\w\.\s\-]{0,9});.+build/i // Generic Android Device
|
/(android[\w\.\s\-]{0,9});.+build/i // Generic Android Device
|
||||||
], [MODEL, [VENDOR, 'Generic']]
|
], [MODEL, [VENDOR, 'Generic']]
|
||||||
|
|
||||||
|
|
||||||
/*//////////////////////////
|
|
||||||
// TODO: move to string map
|
|
||||||
////////////////////////////
|
|
||||||
|
|
||||||
/(C6603)/i // Sony Xperia Z C6603
|
|
||||||
], [[MODEL, 'Xperia Z C6603'], [VENDOR, 'Sony'], [TYPE, MOBILE]], [
|
|
||||||
/(C6903)/i // Sony Xperia Z 1
|
|
||||||
], [[MODEL, 'Xperia Z 1'], [VENDOR, 'Sony'], [TYPE, MOBILE]], [
|
|
||||||
|
|
||||||
/(SM-G900[F|H])/i // Samsung Galaxy S5
|
|
||||||
], [[MODEL, 'Galaxy S5'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
|
||||||
/(SM-G7102)/i // Samsung Galaxy Grand 2
|
|
||||||
], [[MODEL, 'Galaxy Grand 2'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
|
||||||
/(SM-G530H)/i // Samsung Galaxy Grand Prime
|
|
||||||
], [[MODEL, 'Galaxy Grand Prime'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
|
||||||
/(SM-G313HZ)/i // Samsung Galaxy V
|
|
||||||
], [[MODEL, 'Galaxy V'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
|
||||||
/(SM-T805)/i // Samsung Galaxy Tab S 10.5
|
|
||||||
], [[MODEL, 'Galaxy Tab S 10.5'], [VENDOR, 'Samsung'], [TYPE, TABLET]], [
|
|
||||||
/(SM-G800F)/i // Samsung Galaxy S5 Mini
|
|
||||||
], [[MODEL, 'Galaxy S5 Mini'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
|
||||||
/(SM-T311)/i // Samsung Galaxy Tab 3 8.0
|
|
||||||
], [[MODEL, 'Galaxy Tab 3 8.0'], [VENDOR, 'Samsung'], [TYPE, TABLET]], [
|
|
||||||
|
|
||||||
/(T3C)/i // Advan Vandroid T3C
|
|
||||||
], [MODEL, [VENDOR, 'Advan'], [TYPE, TABLET]], [
|
|
||||||
/(ADVAN T1J\+)/i // Advan Vandroid T1J+
|
|
||||||
], [[MODEL, 'Vandroid T1J+'], [VENDOR, 'Advan'], [TYPE, TABLET]], [
|
|
||||||
/(ADVAN S4A)/i // Advan Vandroid S4A
|
|
||||||
], [[MODEL, 'Vandroid S4A'], [VENDOR, 'Advan'], [TYPE, MOBILE]], [
|
|
||||||
|
|
||||||
/(V972M)/i // ZTE V972M
|
|
||||||
], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [
|
|
||||||
|
|
||||||
/(i-mobile)\s(IQ\s[\d\.]+)/i // i-mobile IQ
|
|
||||||
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
|
||||||
/(IQ6.3)/i // i-mobile IQ IQ 6.3
|
|
||||||
], [[MODEL, 'IQ 6.3'], [VENDOR, 'i-mobile'], [TYPE, MOBILE]], [
|
|
||||||
/(i-mobile)\s(i-style\s[\d\.]+)/i // i-mobile i-STYLE
|
|
||||||
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
|
||||||
/(i-STYLE2.1)/i // i-mobile i-STYLE 2.1
|
|
||||||
], [[MODEL, 'i-STYLE 2.1'], [VENDOR, 'i-mobile'], [TYPE, MOBILE]], [
|
|
||||||
|
|
||||||
/(mobiistar touch LAI 512)/i // mobiistar touch LAI 512
|
|
||||||
], [[MODEL, 'Touch LAI 512'], [VENDOR, 'mobiistar'], [TYPE, MOBILE]], [
|
|
||||||
|
|
||||||
/////////////
|
|
||||||
// END TODO
|
|
||||||
///////////*/
|
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
engine : [[
|
engine : [[
|
||||||
@@ -828,8 +669,12 @@
|
|||||||
/windows.+\sedge\/([\w\.]+)/i // EdgeHTML
|
/windows.+\sedge\/([\w\.]+)/i // EdgeHTML
|
||||||
], [VERSION, [NAME, 'EdgeHTML']], [
|
], [VERSION, [NAME, 'EdgeHTML']], [
|
||||||
|
|
||||||
|
/webkit\/537\.36.+chrome\/(?!27)/i // Blink
|
||||||
|
], [[NAME, 'Blink']], [
|
||||||
|
|
||||||
/(presto)\/([\w\.]+)/i, // Presto
|
/(presto)\/([\w\.]+)/i, // Presto
|
||||||
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m
|
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,
|
||||||
|
// WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna
|
||||||
/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, // KHTML/Tasman/Links
|
/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, // KHTML/Tasman/Links
|
||||||
/(icab)[\/\s]([23]\.[\d\.]+)/i // iCab
|
/(icab)[\/\s]([23]\.[\d\.]+)/i // iCab
|
||||||
], [NAME, VERSION], [
|
], [NAME, VERSION], [
|
||||||
@@ -855,9 +700,8 @@
|
|||||||
], [[NAME, 'BlackBerry'], VERSION], [
|
], [[NAME, 'BlackBerry'], VERSION], [
|
||||||
/(blackberry)\w*\/?([\w\.]*)/i, // Blackberry
|
/(blackberry)\w*\/?([\w\.]*)/i, // Blackberry
|
||||||
/(tizen)[\/\s]([\w\.]+)/i, // Tizen
|
/(tizen)[\/\s]([\w\.]+)/i, // Tizen
|
||||||
/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]*)/i,
|
/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|sailfish|contiki)[\/\s-]?([\w\.]*)/i
|
||||||
// Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki
|
// Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS
|
||||||
/linux;.+(sailfish);/i // Sailfish OS
|
|
||||||
], [NAME, VERSION], [
|
], [NAME, VERSION], [
|
||||||
/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]*)/i // Symbian
|
/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]*)/i // Symbian
|
||||||
], [[NAME, 'Symbian'], VERSION], [
|
], [[NAME, 'Symbian'], VERSION], [
|
||||||
@@ -915,22 +759,6 @@
|
|||||||
/////////////////
|
/////////////////
|
||||||
// Constructor
|
// Constructor
|
||||||
////////////////
|
////////////////
|
||||||
/*
|
|
||||||
var Browser = function (name, version) {
|
|
||||||
this[NAME] = name;
|
|
||||||
this[VERSION] = version;
|
|
||||||
};
|
|
||||||
var CPU = function (arch) {
|
|
||||||
this[ARCHITECTURE] = arch;
|
|
||||||
};
|
|
||||||
var Device = function (vendor, model, type) {
|
|
||||||
this[VENDOR] = vendor;
|
|
||||||
this[MODEL] = model;
|
|
||||||
this[TYPE] = type;
|
|
||||||
};
|
|
||||||
var Engine = Browser;
|
|
||||||
var OS = Browser;
|
|
||||||
*/
|
|
||||||
var UAParser = function (uastring, extensions) {
|
var UAParser = function (uastring, extensions) {
|
||||||
|
|
||||||
if (typeof uastring === 'object') {
|
if (typeof uastring === 'object') {
|
||||||
@@ -944,11 +772,6 @@
|
|||||||
|
|
||||||
var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
|
var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
|
||||||
var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;
|
var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;
|
||||||
//var browser = new Browser();
|
|
||||||
//var cpu = new CPU();
|
|
||||||
//var device = new Device();
|
|
||||||
//var engine = new Engine();
|
|
||||||
//var os = new OS();
|
|
||||||
|
|
||||||
this.getBrowser = function () {
|
this.getBrowser = function () {
|
||||||
var browser = { name: undefined, version: undefined };
|
var browser = { name: undefined, version: undefined };
|
||||||
@@ -991,11 +814,6 @@
|
|||||||
};
|
};
|
||||||
this.setUA = function (uastring) {
|
this.setUA = function (uastring) {
|
||||||
ua = uastring;
|
ua = uastring;
|
||||||
//browser = new Browser();
|
|
||||||
//cpu = new CPU();
|
|
||||||
//device = new Device();
|
|
||||||
//engine = new Engine();
|
|
||||||
//os = new OS();
|
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
return this;
|
return this;
|
||||||
@@ -1029,7 +847,6 @@
|
|||||||
NAME : NAME,
|
NAME : NAME,
|
||||||
VERSION : VERSION
|
VERSION : VERSION
|
||||||
};
|
};
|
||||||
//UAParser.Utils = util;
|
|
||||||
|
|
||||||
///////////
|
///////////
|
||||||
// Export
|
// Export
|
||||||
@@ -1042,39 +859,10 @@
|
|||||||
if (typeof module !== UNDEF_TYPE && module.exports) {
|
if (typeof module !== UNDEF_TYPE && module.exports) {
|
||||||
exports = module.exports = UAParser;
|
exports = module.exports = UAParser;
|
||||||
}
|
}
|
||||||
// TODO: test!!!!!!!!
|
|
||||||
/*
|
|
||||||
if (require && require.main === module && process) {
|
|
||||||
// cli
|
|
||||||
var jsonize = function (arr) {
|
|
||||||
var res = [];
|
|
||||||
for (var i in arr) {
|
|
||||||
res.push(new UAParser(arr[i]).getResult());
|
|
||||||
}
|
|
||||||
process.stdout.write(JSON.stringify(res, null, 2) + '\n');
|
|
||||||
};
|
|
||||||
if (process.stdin.isTTY) {
|
|
||||||
// via args
|
|
||||||
jsonize(process.argv.slice(2));
|
|
||||||
} else {
|
|
||||||
// via pipe
|
|
||||||
var str = '';
|
|
||||||
process.stdin.on('readable', function() {
|
|
||||||
var read = process.stdin.read();
|
|
||||||
if (read !== null) {
|
|
||||||
str += read;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
process.stdin.on('end', function () {
|
|
||||||
jsonize(str.replace(/\n$/, '').split('\n'));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
exports.UAParser = UAParser;
|
exports.UAParser = UAParser;
|
||||||
} else {
|
} else {
|
||||||
// requirejs env (optional)
|
// requirejs env (optional)
|
||||||
if (typeof(define) === FUNC_TYPE && define.amd) {
|
if (typeof(define) === 'function' && define.amd) {
|
||||||
define(function () {
|
define(function () {
|
||||||
return UAParser;
|
return UAParser;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -59,6 +59,16 @@
|
|||||||
"major" : "3"
|
"major" : "3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Sailfish Browser",
|
||||||
|
"ua" : "Mozilla/5.0 (Linux; U; Sailfish 3.0; Mobile; rv:45.0) Gecko/45.0 Firefox/45.0 SailfishBrowser/1.0",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "Sailfish Browser",
|
||||||
|
"version" : "1.0",
|
||||||
|
"major" : "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc" : "Arora",
|
"desc" : "Arora",
|
||||||
"ua" : "Mozilla/5.0 (Windows; U; Windows NT 5.1; de-CH) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.2",
|
"ua" : "Mozilla/5.0 (Windows; U; Windows NT 5.1; de-CH) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.2",
|
||||||
@@ -289,6 +299,16 @@
|
|||||||
"major" : "91"
|
"major" : "91"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Falkon",
|
||||||
|
"ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Falkon/3.0.0 Chrome/61.0.3163.140 Safari/537.36",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "Falkon",
|
||||||
|
"version" : "3.0.0",
|
||||||
|
"major" : "3"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc" : "Firebird",
|
"desc" : "Firebird",
|
||||||
"ua" : "Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.5) Gecko/20031007 Firebird/0.7",
|
"ua" : "Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.5) Gecko/20031007 Firebird/0.7",
|
||||||
@@ -448,6 +468,16 @@
|
|||||||
"major" : "3"
|
"major" : "3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Konqueror",
|
||||||
|
"ua" : "Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.34 (KHTML, like Gecko) konqueror/5.0.97 Safari/534.34",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "Konqueror",
|
||||||
|
"version" : "5.0.97",
|
||||||
|
"major" : "5"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc" : "LINE on Android",
|
"desc" : "LINE on Android",
|
||||||
"ua" : "Mozilla/5.0 (Linux; Android 5.0; ASUS_Z00AD Build/LRX21V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/51.0.2704.81 Mobile Safari/537.36 Line/6.5.1/IAB",
|
"ua" : "Mozilla/5.0 (Linux; Android 5.0; ASUS_Z00AD Build/LRX21V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/51.0.2704.81 Mobile Safari/537.36 Line/6.5.1/IAB",
|
||||||
@@ -778,6 +808,16 @@
|
|||||||
"major" : "7"
|
"major" : "7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc" : "QupZilla",
|
||||||
|
"ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) QupZilla/1.8.9 Safari/538.1",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "QupZilla",
|
||||||
|
"version" : "1.8.9",
|
||||||
|
"major" : "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc" : "RockMelt",
|
"desc" : "RockMelt",
|
||||||
"ua" : "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) RockMelt/0.8.36.78 Chrome/7.0.517.44 Safari/534.7",
|
"ua" : "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) RockMelt/0.8.36.78 Chrome/7.0.517.44 Safari/534.7",
|
||||||
@@ -1018,6 +1058,16 @@
|
|||||||
"major" : "42"
|
"major" : "42"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Microsoft Edge Chromium",
|
||||||
|
"ua" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.48 Safari/537.36 Edg/74.1.96.24",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "Edge",
|
||||||
|
"version" : "74.1.96.24",
|
||||||
|
"major" : "74"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc" : "Iridium",
|
"desc" : "Iridium",
|
||||||
"ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Iridium/43.8 Safari/537.36 Chrome/43.0.2357.132",
|
"ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Iridium/43.8 Safari/537.36 Chrome/43.0.2357.132",
|
||||||
@@ -1058,6 +1108,16 @@
|
|||||||
"major" : "6"
|
"major" : "6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc" : "WeChat Desktop for Windows Built-in Browser",
|
||||||
|
"ua" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.901.400 QQBrowser/9.0.2524.400",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "WeChat(Win) Desktop",
|
||||||
|
"version" : "3.43.901.400",
|
||||||
|
"major" : "3"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc" : "GSA on iOS",
|
"desc" : "GSA on iOS",
|
||||||
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) GSA/30.1.161623614 Mobile/14F89 Safari/602.1",
|
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) GSA/30.1.161623614 Mobile/14F89 Safari/602.1",
|
||||||
|
|||||||
@@ -16,6 +16,24 @@
|
|||||||
"type": "tablet"
|
"type": "tablet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Asus ZenPad 10",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 6.0; P00C Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Asus",
|
||||||
|
"model": "P00C",
|
||||||
|
"type": "tablet"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Acer Iconia A1-810",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 4.2.2; A1-810 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Acer",
|
||||||
|
"model": "A1-810",
|
||||||
|
"type": "tablet"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Desktop (IE11 with Tablet string)",
|
"desc": "Desktop (IE11 with Tablet string)",
|
||||||
"ua": "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0; GWX:MANAGED; rv:11.0) like Gecko",
|
"ua": "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0; GWX:MANAGED; rv:11.0) like Gecko",
|
||||||
@@ -34,6 +52,15 @@
|
|||||||
"type": "mobile"
|
"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",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "HTC",
|
||||||
|
"model": "Desire 820",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "HTC Evo Shift 4G",
|
"desc": "HTC Evo Shift 4G",
|
||||||
"ua": "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Sprint APA7373KT Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0",
|
"ua": "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Sprint APA7373KT Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0",
|
||||||
@@ -88,6 +115,15 @@
|
|||||||
"type": "mobile"
|
"type": "mobile"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "iPad using UCBrowser",
|
||||||
|
"ua": "Mozilla/5.0 (iPad; U; CPU OS 11_2 like Mac OS X; zh-CN; iPad5,3) AppleWebKit/534.46 (KHTML, like Gecko) UCBrowser/3.0.1.776 U3/ Mobile/10A403 Safari/7543.48.3",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Apple",
|
||||||
|
"model": "iPad",
|
||||||
|
"type": "tablet"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "iPod",
|
"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",
|
"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",
|
||||||
@@ -97,6 +133,15 @@
|
|||||||
"type": "mobile"
|
"type": "mobile"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Lenovo Tab 2",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 5.0.1; Lenovo TAB 2 A7-30HC Build/LRX21M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.157 Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Lenovo",
|
||||||
|
"model": "TAB 2 A7",
|
||||||
|
"type": "tablet"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "LG Nexus 4",
|
"desc": "LG Nexus 4",
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 4.2.1; Nexus 4 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19",
|
"ua": "Mozilla/5.0 (Linux; Android 4.2.1; Nexus 4 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19",
|
||||||
@@ -121,7 +166,7 @@
|
|||||||
"expect": {
|
"expect": {
|
||||||
"vendor": "Meizu",
|
"vendor": "Meizu",
|
||||||
"model": "M5 Note",
|
"model": "M5 Note",
|
||||||
"type": "tablet"
|
"type": "mobile"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -333,6 +378,15 @@
|
|||||||
"type": "smarttv"
|
"type": "smarttv"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Samsung SmartTV",
|
||||||
|
"ua": "Mozilla/5.0 (SMART-TV; X11; Linux armv7l) AppleWebkit/537.42 (KHTML, like Gecko) Safari/537.42",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "undefined",
|
||||||
|
"model": "undefined",
|
||||||
|
"type": "smarttv"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Samsung SmartTV",
|
"desc": "Samsung SmartTV",
|
||||||
"ua": "Mozilla/5.0 (SMART-TV; Linux; Tizen 2.3) AppleWebkit/538.1 (KHTML, like Gecko) SamsungBrowser/1.0 TV Safari/538.1",
|
"ua": "Mozilla/5.0 (SMART-TV; Linux; Tizen 2.3) AppleWebkit/538.1 (KHTML, like Gecko) SamsungBrowser/1.0 TV Safari/538.1",
|
||||||
@@ -342,6 +396,15 @@
|
|||||||
"type": "smarttv"
|
"type": "smarttv"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Sony G8141 (Xperia XZ Premium)",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 8.0.0; G8141) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Sony",
|
||||||
|
"model": "G8141",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Sony C5303 (Xperia SP)",
|
"desc": "Sony C5303 (Xperia SP)",
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 4.3; C5303 Build/12.1.A.1.205) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.93 Mobile Safari/537.36",
|
"ua": "Mozilla/5.0 (Linux; Android 4.3; C5303 Build/12.1.A.1.205) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.93 Mobile Safari/537.36",
|
||||||
@@ -468,6 +531,15 @@
|
|||||||
"type": "mobile"
|
"type": "mobile"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Xiaomi Mi A1",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 8.0.0; Mi A1 Build/OPR1.170623.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Xiaomi",
|
||||||
|
"model": "Mi A1",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Xiaomi Mi Note",
|
"desc": "Xiaomi Mi Note",
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 4.4.4; MI NOTE LTE Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36",
|
"ua": "Mozilla/5.0 (Linux; Android 4.4.4; MI NOTE LTE Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36",
|
||||||
@@ -504,6 +576,15 @@
|
|||||||
"type": "mobile"
|
"type": "mobile"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Samsung Galaxy C9 Pro",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 6.0; SAMSUNG SM-C900F Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.2 Chrome/44.0.2403.133 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Samsung",
|
||||||
|
"model": "SM-C900F",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Samsung Galaxy S5",
|
"desc": "Samsung Galaxy S5",
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 5.0; SM-G900F Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.78 Mobile Safari/537.36",
|
"ua": "Mozilla/5.0 (Linux; Android 5.0; SM-G900F Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.78 Mobile Safari/537.36",
|
||||||
@@ -593,6 +674,15 @@
|
|||||||
"type": "mobile"
|
"type": "mobile"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Google Pixel XL",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 9; Pixel XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Google",
|
||||||
|
"model": "Pixel XL",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Google Pixel 2",
|
"desc": "Google Pixel 2",
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; Pixel 2 Build/OPM1.171019.013) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Safari/537.36",
|
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; Pixel 2 Build/OPM1.171019.013) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Safari/537.36",
|
||||||
@@ -611,6 +701,15 @@
|
|||||||
"type": "mobile"
|
"type": "mobile"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Google Pixel 2 XL",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 9; Pixel 2 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Google",
|
||||||
|
"model": "Pixel 2 XL",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Google Pixel 3",
|
"desc": "Google Pixel 3",
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PD1A.180720.030) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36",
|
"ua": "Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PD1A.180720.030) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36",
|
||||||
@@ -629,6 +728,15 @@
|
|||||||
"type": "mobile"
|
"type": "mobile"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Google Pixel 3 XL",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 9; Pixel 3 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Google",
|
||||||
|
"model": "Pixel 3 XL",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Generic Android Device",
|
"desc": "Generic Android Device",
|
||||||
"ua": "Mozilla/5.0 (Linux; U; Android 6.0.1; i980 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
|
"ua": "Mozilla/5.0 (Linux; U; Android 6.0.1; i980 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
|
||||||
|
|||||||
@@ -1,4 +1,13 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"desc" : "Blink",
|
||||||
|
"ua" : "Mozilla/5.0 (Linux; Android 7.0; SM-G920I Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/3.4.9 SamsungBrowser/4.0 Chrome/57.0.2987.146 Mobile VR Safari/537.36",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "Blink",
|
||||||
|
"version" : "undefined"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc" : "EdgeHTML",
|
"desc" : "EdgeHTML",
|
||||||
"ua" : "Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 Edge/12.0",
|
"ua" : "Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 Edge/12.0",
|
||||||
@@ -17,6 +26,15 @@
|
|||||||
"version" : "2.0b9pre"
|
"version" : "2.0b9pre"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Goanna",
|
||||||
|
"ua" : "Mozilla/5.0 (Windows NT 5.1; rv:38.9) Gecko/20100101 Goanna/2.2 Firefox/38.9 PaleMoon/26.5.0",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "Goanna",
|
||||||
|
"version" : "2.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc" : "KHTML",
|
"desc" : "KHTML",
|
||||||
"ua" : "Mozilla/5.0 (compatible; Konqueror/4.5; FreeBSD) KHTML/4.5.4 (like Gecko)",
|
"ua" : "Mozilla/5.0 (compatible; Konqueror/4.5; FreeBSD) KHTML/4.5.4 (like Gecko)",
|
||||||
@@ -70,5 +88,14 @@
|
|||||||
"name" : "WebKit",
|
"name" : "WebKit",
|
||||||
"version" : "533.19.4"
|
"version" : "533.19.4"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc" : "WebKit",
|
||||||
|
"ua" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/27.0.1453.110 Safari/537.36",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "WebKit",
|
||||||
|
"version" : "537.36"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -170,6 +170,15 @@
|
|||||||
"version" : "2.2.2"
|
"version" : "2.2.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Sailfish",
|
||||||
|
"ua" : "Mozilla/5.0 (Linux; U; Sailfish 3.0; Mobile; rv:45.0) Gecko/45.0 Firefox/45.0 SailfishBrowser/1.0",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "Sailfish",
|
||||||
|
"version" : "3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc" : "WebOS",
|
"desc" : "WebOS",
|
||||||
"ua" : "",
|
"ua" : "",
|
||||||
|
|||||||
Reference in New Issue
Block a user