mirror of
https://github.com/faisalman/ua-parser-js.git
synced 2025-11-16 23:21:52 +03:00
Compare commits
96 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3da59cef3d | ||
|
|
4d94c6b3e3 | ||
|
|
daeb118543 | ||
|
|
1667f5f2b2 | ||
|
|
10475761cf | ||
|
|
db381cad92 | ||
|
|
bb16473fac | ||
|
|
ebccc29d97 | ||
|
|
1a8cd671ab | ||
|
|
d1ba5f5914 | ||
|
|
e402a6a55c | ||
|
|
e612b44ecd | ||
|
|
fc1d3b0719 | ||
|
|
c626c01a5e | ||
|
|
d1ea2f0dc4 | ||
|
|
70a586d4b1 | ||
|
|
9da55e9791 | ||
|
|
6c44b3fcc5 | ||
|
|
b1f34c1620 | ||
|
|
1cfe34f517 | ||
|
|
6c87e069ec | ||
|
|
d658ef364b | ||
|
|
f85dc8cb9a | ||
|
|
cdac86782b | ||
|
|
46615e70db | ||
|
|
6aa3ff1374 | ||
|
|
dce862364b | ||
|
|
ec5a864abb | ||
|
|
d78a2e0361 | ||
|
|
f661da9d47 | ||
|
|
9999815ac8 | ||
|
|
809439e20e | ||
|
|
5b83893476 | ||
|
|
9d154cc41b | ||
|
|
7679003f87 | ||
|
|
cd1bfd87c5 | ||
|
|
45bf76a0fe | ||
|
|
f543c5ad72 | ||
|
|
89a72c27a7 | ||
|
|
314131d003 | ||
|
|
386ebc29f1 | ||
|
|
b0f14de2a4 | ||
|
|
fd8a583020 | ||
|
|
cc2da937c6 | ||
|
|
34e2e800c5 | ||
|
|
26c74ef356 | ||
|
|
e4b3029668 | ||
|
|
b7d4865afd | ||
|
|
d5ab75a14e | ||
|
|
c7475db860 | ||
|
|
83d37b4887 | ||
|
|
2d53ceb8bf | ||
|
|
d107155a57 | ||
|
|
43fb4d16a7 | ||
|
|
6d1f26df05 | ||
|
|
86471ad7e2 | ||
|
|
9dfa5fc675 | ||
|
|
4547dbc0b4 | ||
|
|
7b23335d29 | ||
|
|
da53c35f91 | ||
|
|
edd84eaa72 | ||
|
|
1a75bc845f | ||
|
|
e72371c34d | ||
|
|
e96f95802d | ||
|
|
aa190ad319 | ||
|
|
233d3bae22 | ||
|
|
3547f16d08 | ||
|
|
da113f9fad | ||
|
|
150ad0b176 | ||
|
|
ba5324d3cd | ||
|
|
631d0501bb | ||
|
|
20ceaf9000 | ||
|
|
a8972c7d70 | ||
|
|
8196cb1c43 | ||
|
|
624eaf3f8a | ||
|
|
4ca311224f | ||
|
|
5230745280 | ||
|
|
cc11bc6a2c | ||
|
|
bd6dee4a08 | ||
|
|
1fc9d5a4a4 | ||
|
|
7568f0a6f5 | ||
|
|
726a458c84 | ||
|
|
4daaa41211 | ||
|
|
74c973b0d8 | ||
|
|
43169ce1da | ||
|
|
b0059eff5b | ||
|
|
ec0d7c037a | ||
|
|
a8eac11d82 | ||
|
|
e15ac48f0f | ||
|
|
74cb3d417b | ||
|
|
b45bd07bab | ||
|
|
feafa4d027 | ||
|
|
fc08e23f54 | ||
|
|
590234ba13 | ||
|
|
ac123a98de | ||
|
|
cd3ba72b2f |
12
.github/FUNDING.yml
vendored
Normal file
12
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# These are supported funding model platforms
|
||||||
|
|
||||||
|
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||||
|
patreon: # Replace with a single Patreon username
|
||||||
|
open_collective: ua-parser-js
|
||||||
|
ko_fi: # Replace with a single Ko-fi username
|
||||||
|
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||||
|
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||||
|
liberapay: # Replace with a single Liberapay username
|
||||||
|
issuehunt: # Replace with a single IssueHunt username
|
||||||
|
otechie: # Replace with a single Otechie username
|
||||||
|
custom: ['https://www.paypal.me/faisalman/']
|
||||||
17
.github/workflows/run-test.yml
vendored
Normal file
17
.github/workflows/run-test.yml
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
name: ua-parser-js-run-test
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run-test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
arch: [amd64, ppc64le]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v2
|
||||||
|
- name: Run the test
|
||||||
|
run: |
|
||||||
|
npm install
|
||||||
|
npm run test-ci
|
||||||
@@ -1,3 +1,6 @@
|
|||||||
|
arch:
|
||||||
|
- amd64
|
||||||
|
- ppc64le
|
||||||
language: node_js
|
language: node_js
|
||||||
node_js:
|
node_js:
|
||||||
- stable
|
- stable
|
||||||
@@ -11,3 +14,5 @@ cache:
|
|||||||
- node_modules
|
- node_modules
|
||||||
|
|
||||||
sudo: false
|
sudo: false
|
||||||
|
|
||||||
|
script: npm run test-ci
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ua-parser-js",
|
"name": "ua-parser-js",
|
||||||
"version": "0.7.21",
|
"version": "0.7.25",
|
||||||
"authors": [
|
"authors": [
|
||||||
"Faisal Salman <f@faisalman.com>"
|
"Faisal Salman <f@faisalman.com>"
|
||||||
],
|
],
|
||||||
|
|||||||
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-2019 Faisal Salman <<f@faisalman.com>>
|
Copyright (c) 2012-2021 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.21',
|
version: '0.7.25',
|
||||||
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'
|
||||||
|
|||||||
28
package.json
28
package.json
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"title": "UAParser.js",
|
"title": "UAParser.js",
|
||||||
"name": "ua-parser-js",
|
"name": "ua-parser-js",
|
||||||
"version": "0.7.21",
|
"version": "0.7.25",
|
||||||
"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": [
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
"jquery-plugin",
|
"jquery-plugin",
|
||||||
"ecosystem:jquery"
|
"ecosystem:jquery"
|
||||||
],
|
],
|
||||||
"homepage": "http://github.com/faisalman/ua-parser-js",
|
"homepage": "https://github.com/faisalman/ua-parser-js",
|
||||||
"contributors": [
|
"contributors": [
|
||||||
"Aamir Poonawalla <aamir@urx.com>",
|
"Aamir Poonawalla <aamir@urx.com>",
|
||||||
"Admas <mollases@users.noreply.github.com>",
|
"Admas <mollases@users.noreply.github.com>",
|
||||||
@@ -94,12 +94,14 @@
|
|||||||
"Sylvain Gizard <sylvain.gizard@gmail.com>",
|
"Sylvain Gizard <sylvain.gizard@gmail.com>",
|
||||||
"szchenghuang <szchenghuang@gmail.com>",
|
"szchenghuang <szchenghuang@gmail.com>",
|
||||||
"Vadim Kurachevsky <vadim@hmvs.org>",
|
"Vadim Kurachevsky <vadim@hmvs.org>",
|
||||||
"Yun Young-jin <yupmin@yupmin-office-macmini.local>"
|
"Yun Young-jin <yupmin@yupmin-office-macmini.local>",
|
||||||
|
"Insanehong <insae.hong@navercorp.com>"
|
||||||
],
|
],
|
||||||
"main": "src/ua-parser.js",
|
"main": "src/ua-parser.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "uglifyjs src/ua-parser.js -o dist/ua-parser.min.js --comments '/UAParser\\.js/' && uglifyjs src/ua-parser.js -o dist/ua-parser.pack.js --comments '/UAParser\\.js/' --compress --mangle",
|
"build": "uglifyjs src/ua-parser.js -o dist/ua-parser.min.js --comments && uglifyjs src/ua-parser.js -o dist/ua-parser.pack.js --comments --compress --mangle",
|
||||||
"test": "jshint src/ua-parser.js && mocha -R nyan test/test.js",
|
"test": "jshint src/ua-parser.js && mocha -R nyan test/test.js",
|
||||||
|
"test-ci": "jshint src/ua-parser.js && mocha -R spec test/test.js",
|
||||||
"verup": "node ./node_modules/verup",
|
"verup": "node ./node_modules/verup",
|
||||||
"version": "node ./node_modules/verup 0"
|
"version": "node ./node_modules/verup 0"
|
||||||
},
|
},
|
||||||
@@ -115,10 +117,10 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"jshint": "~1.1.0",
|
"jshint": "~2.12.0",
|
||||||
"mocha": "~1.8.0",
|
"mocha": "~8.2.0",
|
||||||
"requirejs": "^2.3.2",
|
"requirejs": "^2.3.2",
|
||||||
"uglify-js": "~2.7.5",
|
"uglify-js": "~3.12.0",
|
||||||
"verup": "^1.3.x"
|
"verup": "^1.3.x"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -136,5 +138,15 @@
|
|||||||
},
|
},
|
||||||
"bugs": "https://github.com/faisalman/ua-parser-js/issues",
|
"bugs": "https://github.com/faisalman/ua-parser-js/issues",
|
||||||
"demo": "https://faisalman.github.io/ua-parser-js",
|
"demo": "https://faisalman.github.io/ua-parser-js",
|
||||||
"download": "https://raw.github.com/faisalman/ua-parser-js/master/dist/ua-parser.min.js"
|
"download": "https://raw.github.com/faisalman/ua-parser-js/master/dist/ua-parser.min.js",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/ua-parser-js"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "paypal",
|
||||||
|
"url": "https://paypal.me/faisalman"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
177
readme.md
177
readme.md
@@ -1,18 +1,26 @@
|
|||||||
|
<p align="center">
|
||||||
|
<img src="https://raw.githubusercontent.com/faisalman/ua-parser-js/gh-pages/images/logo.png" width="256" height="256">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://travis-ci.org/faisalman/ua-parser-js"><img src="https://travis-ci.org/faisalman/ua-parser-js.svg?branch=master"></a>
|
||||||
|
<a href="https://www.npmjs.com/package/ua-parser-js"><img src="https://img.shields.io/npm/v/ua-parser-js.svg"></a>
|
||||||
|
<a href="https://www.npmjs.com/package/ua-parser-js"><img src="https://img.shields.io/npm/dw/ua-parser-js.svg"></a>
|
||||||
|
<a href="https://www.jsdelivr.com/package/npm/ua-parser-js"><img src="https://data.jsdelivr.com/v1/package/npm/ua-parser-js/badge"></a>
|
||||||
|
<a href="https://cdnjs.com/libraries/UAParser.js"><img src="https://img.shields.io/cdnjs/v/UAParser.js.svg"></a>
|
||||||
|
</p>
|
||||||
|
|
||||||
# UAParser.js
|
# UAParser.js
|
||||||
|
|
||||||
<img align="right" src="https://raw.githubusercontent.com/faisalman/ua-parser-js/gh-pages/images/logo.png"> A JavaScript-based User-Agent string parser. Can be used either in browser (client-side) or in node.js (server-side) environment. Also available as jQuery/Zepto plugin, Bower/Meteor package, & RequireJS/AMD module. This library aims to identify detailed type of web browser, layout engine, operating system, cpu architecture, and device type/model, entirely from user-agent string with a relatively small footprint (~17KB when minified / ~6KB gzipped). Written in vanilla JavaScript, which means it doesn't require any other library and can be used independently. However, it's not recommended to use this library as browser detection since the result may not be more accurate than using feature detection.
|
JavaScript library to detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data with relatively small footprint (~17KB minified, ~6KB gzipped) that can be used either in browser (client-side) or node.js (server-side).
|
||||||
|
|
||||||
[](https://travis-ci.org/faisalman/ua-parser-js)
|
|
||||||
[](https://www.npmjs.com/package/ua-parser-js)
|
|
||||||
[](https://www.npmjs.com/package/ua-parser-js)
|
|
||||||
[](https://bower.io/)
|
|
||||||
[](https://cdnjs.com/libraries/UAParser.js)
|
|
||||||
|
|
||||||
* Author : Faisal Salman <<f@faisalman.com>>
|
* Author : Faisal Salman <<f@faisalman.com>>
|
||||||
* Demo : http://faisalman.github.io/ua-parser-js
|
* Demo : http://faisalman.github.io/ua-parser-js
|
||||||
* Source : https://github.com/faisalman/ua-parser-js
|
* Source : https://github.com/faisalman/ua-parser-js
|
||||||
|
|
||||||
# Constructor
|
# Documentation
|
||||||
|
|
||||||
|
## Constructor
|
||||||
|
|
||||||
* `new UAParser([uastring][,extensions])`
|
* `new UAParser([uastring][,extensions])`
|
||||||
* returns new instance
|
* returns new instance
|
||||||
@@ -20,7 +28,7 @@
|
|||||||
* `UAParser([uastring][,extensions])`
|
* `UAParser([uastring][,extensions])`
|
||||||
* returns result object `{ ua: '', browser: {}, cpu: {}, device: {}, engine: {}, os: {} }`
|
* returns result object `{ ua: '', browser: {}, cpu: {}, device: {}, engine: {}, os: {} }`
|
||||||
|
|
||||||
# Methods
|
## Methods
|
||||||
|
|
||||||
* `getBrowser()`
|
* `getBrowser()`
|
||||||
* returns `{ name: '', version: '' }`
|
* returns `{ name: '', version: '' }`
|
||||||
@@ -32,15 +40,15 @@ BIDUBrowser, Baidu, Basilisk, Blazer, Bolt, Brave, Bowser, Camino, Chimera,
|
|||||||
Chrome Headless, Chrome WebView, Chrome, Chromium, Comodo Dragon, Dillo,
|
Chrome Headless, Chrome WebView, Chrome, Chromium, Comodo Dragon, Dillo,
|
||||||
Dolphin, Doris, Edge, Epiphany, Facebook, Falkon, Fennec, Firebird, Firefox,
|
Dolphin, Doris, Edge, Epiphany, Facebook, Falkon, Fennec, Firebird, Firefox,
|
||||||
Flock, GSA, GoBrowser, ICE Browser, IE, IEMobile, IceApe, IceCat, IceDragon,
|
Flock, GSA, GoBrowser, ICE Browser, IE, IEMobile, IceApe, IceCat, IceDragon,
|
||||||
Iceape, Iceweasel, Iridium, Iron, Jasmine, K-Meleon, Kindle, Konqueror,
|
Iceape, Iceweasel, Instagram, Iridium, Iron, Jasmine, K-Meleon, Kindle,
|
||||||
LBBROWSER Line, Links, Lunascape, Lynx, MIUI Browser, Maemo Browser, Maemo,
|
Konqueror, LBBROWSER, Line, Links, Lunascape, Lynx, MIUI Browser,
|
||||||
Maxthon, MetaSr Midori, Minimo, Mobile Safari, Mosaic, Mozilla, NetFront,
|
Maemo Browser, Maemo, Maxthon, MetaSr Midori, Minimo, Mobile Safari, Mosaic,
|
||||||
NetSurf, Netfront, Netscape, NokiaBrowser, Oculus Browser, OmniWeb,
|
Mozilla, NetFront, NetSurf, Netfront, Netscape, NokiaBrowser, Oculus Browser,
|
||||||
Opera Coast, Opera Mini, Opera Mobi, Opera Tablet, Opera, PaleMoon, PhantomJS,
|
OmniWeb, Opera Coast, Opera Mini, Opera Mobi, Opera Tablet, Opera, PaleMoon,
|
||||||
Phoenix, Polaris, Puffin, QQ, QQBrowser, QQBrowserLite, Quark, QupZilla,
|
PhantomJS, Phoenix, Polaris, Puffin, QQ, QQBrowser, QQBrowserLite, Quark,
|
||||||
RockMelt, Safari, Sailfish Browser, Samsung Browser, SeaMonkey, Silk, Skyfire,
|
QupZilla, RockMelt, Safari, Sailfish Browser, Samsung Browser, SeaMonkey, Silk,
|
||||||
Sleipnir, Slim, SlimBrowser, Swiftfox, Tizen Browser, UCBrowser, Vivaldi,
|
Skyfire, Sleipnir, Slim, SlimBrowser, Swiftfox, Tizen Browser, UCBrowser,
|
||||||
Waterfox, WeChat, Yandex, baidu, iCab, w3m, ...
|
Vivaldi, Waterfox, WeChat, Weibo, Yandex, baidu, iCab, w3m, Whale Browser...
|
||||||
|
|
||||||
# 'browser.version' determined dynamically
|
# 'browser.version' determined dynamically
|
||||||
```
|
```
|
||||||
@@ -81,7 +89,7 @@ AIX, Amiga OS, Android, Arch, Bada, BeOS, BlackBerry, CentOS, Chromium OS,
|
|||||||
Contiki, Fedora, Firefox OS, FreeBSD, Debian, DragonFly, Fuchsia, Gentoo, GNU,
|
Contiki, Fedora, Firefox OS, FreeBSD, Debian, DragonFly, Fuchsia, Gentoo, GNU,
|
||||||
Haiku, Hurd, iOS, Joli, KaiOS, Linpus, Linux, Mac OS, Mageia, Mandriva, MeeGo,
|
Haiku, Hurd, iOS, Joli, KaiOS, Linpus, Linux, Mac OS, Mageia, Mandriva, MeeGo,
|
||||||
Minix, Mint, Morph OS, NetBSD, Nintendo, OpenBSD, OpenVMS, OS/2, Palm, PC-BSD,
|
Minix, Mint, Morph OS, NetBSD, Nintendo, OpenBSD, OpenVMS, OS/2, Palm, PC-BSD,
|
||||||
PCLinuxOS, Plan9, Playstation, QNX, RedHat, RIM Tablet OS, RISC OS, Sailfish,
|
PCLinuxOS, Plan9, PlayStation, QNX, RedHat, RIM Tablet OS, RISC OS, Sailfish,
|
||||||
Series40, Slackware, Solaris, SUSE, Symbian, Tizen, Ubuntu, Unix, VectorLinux,
|
Series40, Slackware, Solaris, SUSE, Symbian, Tizen, Ubuntu, Unix, VectorLinux,
|
||||||
WebOS, Windows [Phone/Mobile], Zenwalk, ...
|
WebOS, Windows [Phone/Mobile], Zenwalk, ...
|
||||||
|
|
||||||
@@ -103,30 +111,30 @@ WebOS, Windows [Phone/Mobile], Zenwalk, ...
|
|||||||
* returns UA string of current instance
|
* returns UA string of current instance
|
||||||
|
|
||||||
* `setUA(uastring)`
|
* `setUA(uastring)`
|
||||||
* set UA string to parse
|
* set UA string to be parsed
|
||||||
* returns current instance
|
* returns current instance
|
||||||
|
|
||||||
|
# Usage
|
||||||
|
|
||||||
# Example
|
## Using HTML
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<script type="text/javascript" src="ua-parser.min.js"></script>
|
<script src="ua-parser.min.js"></script>
|
||||||
<script type="text/javascript">
|
<script>
|
||||||
|
|
||||||
var parser = new UAParser();
|
var parser = new UAParser();
|
||||||
|
|
||||||
// by default it takes ua string from current browser's window.navigator.userAgent
|
|
||||||
console.log(parser.getResult());
|
console.log(parser.getResult());
|
||||||
/*
|
/*
|
||||||
/// this will print an object structured like this:
|
/// This will print an object structured like this:
|
||||||
{
|
{
|
||||||
ua: "",
|
ua: "",
|
||||||
browser: {
|
browser: {
|
||||||
name: "",
|
name: "",
|
||||||
version: ""
|
version: "",
|
||||||
|
major: "" //@deprecated
|
||||||
},
|
},
|
||||||
engine: {
|
engine: {
|
||||||
name: "",
|
name: "",
|
||||||
@@ -146,14 +154,14 @@ WebOS, Windows [Phone/Mobile], Zenwalk, ...
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
// Default result depends on current window.navigator.userAgent value
|
||||||
|
|
||||||
// let's test a custom user-agent string as an example
|
// Now let's try a custom user-agent string as an example
|
||||||
var uastring = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.2 (KHTML, like Gecko) Ubuntu/11.10 Chromium/15.0.874.106 Chrome/15.0.874.106 Safari/535.2";
|
var uastring1 = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.2 (KHTML, like Gecko) Ubuntu/11.10 Chromium/15.0.874.106 Chrome/15.0.874.106 Safari/535.2";
|
||||||
parser.setUA(uastring);
|
parser.setUA(uastring1);
|
||||||
|
|
||||||
var result = parser.getResult();
|
var result = parser.getResult();
|
||||||
// this will also produce the same result (without instantiation):
|
// You can also use UAParser constructor directly without having to create an instance:
|
||||||
// var result = UAParser(uastring);
|
// var result = UAParser(uastring1);
|
||||||
|
|
||||||
console.log(result.browser); // {name: "Chromium", version: "15.0.874.106"}
|
console.log(result.browser); // {name: "Chromium", version: "15.0.874.106"}
|
||||||
console.log(result.device); // {model: undefined, type: undefined, vendor: undefined}
|
console.log(result.device); // {model: undefined, type: undefined, vendor: undefined}
|
||||||
@@ -162,7 +170,7 @@ WebOS, Windows [Phone/Mobile], Zenwalk, ...
|
|||||||
console.log(result.engine.name); // "WebKit"
|
console.log(result.engine.name); // "WebKit"
|
||||||
console.log(result.cpu.architecture); // "amd64"
|
console.log(result.cpu.architecture); // "amd64"
|
||||||
|
|
||||||
// do some other tests
|
// Do some other tests
|
||||||
var uastring2 = "Mozilla/5.0 (compatible; Konqueror/4.1; OpenBSD) KHTML/4.1.4 (like Gecko)";
|
var uastring2 = "Mozilla/5.0 (compatible; Konqueror/4.1; OpenBSD) KHTML/4.1.4 (like Gecko)";
|
||||||
console.log(parser.setUA(uastring2).getBrowser().name); // "Konqueror"
|
console.log(parser.setUA(uastring2).getBrowser().name); // "Konqueror"
|
||||||
console.log(parser.getOS()); // {name: "OpenBSD", version: undefined}
|
console.log(parser.getOS()); // {name: "OpenBSD", version: undefined}
|
||||||
@@ -201,40 +209,6 @@ http.createServer(function (req, res) {
|
|||||||
console.log('Server running at http://127.0.0.1:1337/');
|
console.log('Server running at http://127.0.0.1:1337/');
|
||||||
```
|
```
|
||||||
|
|
||||||
## Using requirejs
|
|
||||||
|
|
||||||
```js
|
|
||||||
requirejs.config({
|
|
||||||
baseUrl : 'js/lib', // path to your script directory
|
|
||||||
paths : {
|
|
||||||
'ua-parser-js' : 'ua-parser.min'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
requirejs(['ua-parser-js'], function(UAParser) {
|
|
||||||
var parser = new UAParser();
|
|
||||||
console.log(parser.getResult());
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## Using CDN
|
|
||||||
|
|
||||||
```html
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/ua-parser-js@0/dist/ua-parser.min.js"></script>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Using bower
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ bower install ua-parser-js
|
|
||||||
```
|
|
||||||
|
|
||||||
## Using meteor
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ meteor add faisalman:ua-parser-js
|
|
||||||
```
|
|
||||||
|
|
||||||
## Using TypeScript
|
## Using TypeScript
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
@@ -245,18 +219,18 @@ $ npm install --save @types/ua-parser-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, this library will automatically detect if jQuery/Zepto is present and create `$.ua` object (with values based on its User-Agent) along with `window.UAParser` constructor. To get/set user-agent you can use: `$.ua.get()` / `$.ua.set(uastring)`.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
// In browser with default user-agent: 'Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Sprint APA7373KT Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0':
|
// Say we are in a browser with default user-agent: 'Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Sprint APA7373KT Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0':
|
||||||
|
|
||||||
// Do some tests
|
// Get the details
|
||||||
console.log($.ua.device); // {vendor: "HTC", model: "Evo Shift 4G", type: "mobile"}
|
console.log($.ua.device); // {vendor: "HTC", model: "Evo Shift 4G", type: "mobile"}
|
||||||
console.log($.ua.os); // {name: "Android", version: "2.3.4"}
|
console.log($.ua.os); // {name: "Android", version: "2.3.4"}
|
||||||
console.log($.ua.os.name); // "Android"
|
console.log($.ua.os.name); // "Android"
|
||||||
console.log($.ua.get()); // "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Sprint APA7373KT Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0"
|
console.log($.ua.get()); // "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Sprint APA7373KT Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0"
|
||||||
|
|
||||||
// reset to custom user-agent
|
// Now lets try to reset to another custom user-agent
|
||||||
$.ua.set('Mozilla/5.0 (Linux; U; Android 3.0.1; en-us; Xoom Build/HWI69) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13');
|
$.ua.set('Mozilla/5.0 (Linux; U; Android 3.0.1; en-us; Xoom Build/HWI69) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13');
|
||||||
|
|
||||||
// Test again
|
// Test again
|
||||||
@@ -270,54 +244,49 @@ console.log(parseInt($.ua.browser.version.split('.')[0], 10)); // 4
|
|||||||
$('body').addClass('ua-browser-' + $.ua.browser.name + ' ua-devicetype-' + $.ua.device.type);
|
$('body').addClass('ua-browser-' + $.ua.browser.name + ' ua-devicetype-' + $.ua.device.type);
|
||||||
```
|
```
|
||||||
|
|
||||||
## Extending regex patterns
|
## Using Extension
|
||||||
|
|
||||||
* `UAParser([uastring,] extensions)`
|
* `UAParser([uastring,] extensions)`
|
||||||
|
|
||||||
Pass your own regexes to extend the limited matching rules.
|
|
||||||
|
|
||||||
```js
|
```js
|
||||||
// Example:
|
// Example:
|
||||||
var myOwnRegex = [[/(myownbrowser)\/([\w\.]+)/i], [UAParser.BROWSER.NAME, UAParser.BROWSER.VERSION]];
|
var myOwnListOfBrowsers = [
|
||||||
var myParser = new UAParser({ browser: myOwnRegex });
|
[/(mybrowser)\/([\w\.]+)/i], [UAParser.BROWSER.NAME, UAParser.BROWSER.VERSION]
|
||||||
var uaString = 'Mozilla/5.0 MyOwnBrowser/1.3';
|
];
|
||||||
console.log(myParser.setUA(uaString).getBrowser()); // {name: "MyOwnBrowser", version: "1.3"}
|
var myParser = new UAParser({ browser: myOwnListOfBrowsers });
|
||||||
|
var myUA = 'Mozilla/5.0 MyBrowser/1.3';
|
||||||
|
console.log(myParser.setUA(myUA).getBrowser()); // {name: "MyBrowser", version: "1.3"}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
|
|
||||||
## Contribute
|
## Sponsors
|
||||||
|
|
||||||
|
<a href="https://opencollective.com/ua-parser-js"><img src="https://opencollective.com/ua-parser-js/tiers/backers.svg?avatarHeight=64" height="80"/></a> <a href="https://opencollective.com/ua-parser-js"><img src="https://opencollective.com/ua-parser-js/tiers/sponsors.svg?avatarHeight=64" height="80"/></a>
|
||||||
|
|
||||||
|
<a href="https://www.paypal.me/faisalman/"><img src="https://cdn.rawgit.com/twolfson/paypal-github-button/1.0.0/dist/button.svg" height="40"></a>
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
<a href="https://github.com/faisalman/ua-parser-js/graphs/contributors">
|
||||||
|
<img src="https://contrib.rocks/image?repo=faisalman/ua-parser-js" />
|
||||||
|
</a>
|
||||||
|
|
||||||
|
Made with [contributors-img](https://contrib.rocks).
|
||||||
|
|
||||||
|
## How To Contribute
|
||||||
|
|
||||||
* Fork and clone this repository
|
* Fork and clone this repository
|
||||||
* Make some changes as required
|
* Make some changes as required
|
||||||
* Write a unit test to showcase your feature
|
* Write unit test to showcase its functionality
|
||||||
* Run the test suites to make sure the changes you made didn't break anything `$ npm run test`
|
* Run the test suites to make sure it's not breaking anything `$ npm test`
|
||||||
* Commit and push to your own repository
|
* Submit a pull request under `develop` branch
|
||||||
* Submit a pull request to this repository under `develop` branch
|
|
||||||
* Profit? $$$
|
|
||||||
|
|
||||||
## Build
|
|
||||||
|
|
||||||
Build a minified & packed script
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
# Donate
|
|
||||||
|
|
||||||
Do you use & like UAParser.js but you don’t find a way to show some love? If yes, please consider donating to support this project. Otherwise, no worries, regardless of whether there is support or not, I will keep maintaining this project. Still, if you buy me a cup of coffee I would be more than happy though :)
|
|
||||||
|
|
||||||
[](https://www.paypal.me/faisalman/)
|
|
||||||
|
|
||||||
|
|
||||||
# License
|
# License
|
||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2012-2019 Faisal Salman <<f@faisalman.com>>
|
Copyright (c) 2012-2021 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
|
||||||
|
|||||||
236
src/ua-parser.js
236
src/ua-parser.js
@@ -1,9 +1,9 @@
|
|||||||
/*!
|
/*!@license
|
||||||
* UAParser.js v0.7.21
|
* UAParser.js v0.7.25
|
||||||
* 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-2019 Faisal Salman <f@faisalman.com>
|
* Copyright © 2012-2021 Faisal Salman <f@faisalman.com>
|
||||||
* Licensed under MIT License
|
* Licensed under MIT License
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
/////////////
|
/////////////
|
||||||
|
|
||||||
|
|
||||||
var LIBVERSION = '0.7.21',
|
var LIBVERSION = '0.7.25',
|
||||||
EMPTY = '',
|
EMPTY = '',
|
||||||
UNKNOWN = '?',
|
UNKNOWN = '?',
|
||||||
FUNC_TYPE = 'function',
|
FUNC_TYPE = 'function',
|
||||||
@@ -222,7 +222,7 @@
|
|||||||
|
|
||||||
// Presto based
|
// Presto based
|
||||||
/(opera\smini)\/([\w\.-]+)/i, // Opera Mini
|
/(opera\smini)\/([\w\.-]+)/i, // Opera Mini
|
||||||
/(opera\s[mobiletab]+).+version\/([\w\.-]+)/i, // Opera Mobi/Tablet
|
/(opera\s[mobiletab]{3,6}).+version\/([\w\.-]+)/i, // Opera Mobi/Tablet
|
||||||
/(opera).+version\/([\w\.]+)/i, // Opera > 9.80
|
/(opera).+version\/([\w\.]+)/i, // Opera > 9.80
|
||||||
/(opera)[\/\s]+([\w\.]+)/i // Opera < 9.80
|
/(opera)[\/\s]+([\w\.]+)/i // Opera < 9.80
|
||||||
], [NAME, VERSION], [
|
], [NAME, VERSION], [
|
||||||
@@ -235,8 +235,8 @@
|
|||||||
|
|
||||||
// Mixed
|
// Mixed
|
||||||
/(kindle)\/([\w\.]+)/i, // Kindle
|
/(kindle)\/([\w\.]+)/i, // Kindle
|
||||||
/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]*)/i,
|
/(lunascape|maxthon|netfront|jasmine|blazer|instagram)[\/\s]?([\w\.]*)/i,
|
||||||
// Lunascape/Maxthon/Netfront/Jasmine/Blazer
|
// Lunascape/Maxthon/Netfront/Jasmine/Blazer/Instagram
|
||||||
// Trident based
|
// Trident based
|
||||||
/(avant\s|iemobile|slim)(?:browser)?[\/\s]?([\w\.]*)/i,
|
/(avant\s|iemobile|slim)(?:browser)?[\/\s]?([\w\.]*)/i,
|
||||||
// Avant/IEMobile/SlimBrowser
|
// Avant/IEMobile/SlimBrowser
|
||||||
@@ -245,14 +245,15 @@
|
|||||||
|
|
||||||
// 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|qupzilla|falkon)\/([\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/QupZilla/Falkon
|
// Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
|
||||||
|
/(puffin|brave|whale|qqbrowserlite|qq)\/([\w\.]+)/i // Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ
|
||||||
], [NAME, VERSION], [
|
], [NAME, VERSION], [
|
||||||
|
|
||||||
/(konqueror)\/([\w\.]+)/i // Konqueror
|
/(konqueror)\/([\w\.]+)/i // Konqueror
|
||||||
], [[NAME, 'Konqueror'], VERSION], [
|
], [[NAME, 'Konqueror'], VERSION], [
|
||||||
|
|
||||||
/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i // IE11
|
/(trident).+rv[:\s]([\w\.]{1,9}).+like\sgecko/i // IE11
|
||||||
], [[NAME, 'IE'], VERSION], [
|
], [[NAME, 'IE'], VERSION], [
|
||||||
|
|
||||||
/(edge|edgios|edga|edg)\/((\d+)?[\w\.]+)/i // Microsoft Edge
|
/(edge|edgios|edga|edg)\/((\d+)?[\w\.]+)/i // Microsoft Edge
|
||||||
@@ -267,9 +268,6 @@
|
|||||||
/(AVG)\/([\w\.]+)/i // AVG Secure Browser
|
/(AVG)\/([\w\.]+)/i // AVG Secure Browser
|
||||||
], [[NAME, 'AVG Secure Browser'], VERSION], [
|
], [[NAME, 'AVG Secure Browser'], VERSION], [
|
||||||
|
|
||||||
/(puffin)\/([\w\.]+)/i // Puffin
|
|
||||||
], [[NAME, 'Puffin'], VERSION], [
|
|
||||||
|
|
||||||
/(focus)\/([\w\.]+)/i // Firefox Focus
|
/(focus)\/([\w\.]+)/i // Firefox Focus
|
||||||
], [[NAME, 'Firefox Focus'], VERSION], [
|
], [[NAME, 'Firefox Focus'], VERSION], [
|
||||||
|
|
||||||
@@ -282,28 +280,13 @@
|
|||||||
/(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
|
/((?:windowswechat)? qbcore)\/([\w\.]+).*(?:windowswechat)?/i // WeChat Desktop for Windows Built-in Browser
|
||||||
], [[NAME, 'WeChat(Win) Desktop'], VERSION], [
|
], [[NAME, 'WeChat(Win) Desktop'], VERSION], [
|
||||||
|
|
||||||
/(micromessenger)\/([\w\.]+)/i // WeChat
|
/(micromessenger)\/([\w\.]+)/i // WeChat
|
||||||
], [[NAME, 'WeChat'], VERSION], [
|
], [[NAME, 'WeChat'], VERSION], [
|
||||||
|
|
||||||
/(brave)\/([\w\.]+)/i // Brave browser
|
/m?(qqbrowser|baiduboxapp|2345Explorer)[\/\s]?([\w\.]+)/i // QQBrowser/Baidu App/2345 Browser
|
||||||
], [[NAME, 'Brave'], VERSION], [
|
|
||||||
|
|
||||||
/(qqbrowserlite)\/([\w\.]+)/i // QQBrowserLite
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(QQ)\/([\d\.]+)/i // QQ, aka ShouQ
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/m?(qqbrowser)[\/\s]?([\w\.]+)/i // QQBrowser
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(baiduboxapp)[\/\s]?([\w\.]+)/i // Baidu App
|
|
||||||
], [NAME, VERSION], [
|
|
||||||
|
|
||||||
/(2345Explorer)[\/\s]?([\w\.]+)/i // 2345 Browser
|
|
||||||
], [NAME, VERSION], [
|
], [NAME, VERSION], [
|
||||||
|
|
||||||
/(MetaSr)[\/\s]?([\w\.]+)/i // SouGouBrowser
|
/(MetaSr)[\/\s]?([\w\.]+)/i // SouGouBrowser
|
||||||
@@ -312,14 +295,20 @@
|
|||||||
/(LBBROWSER)/i // LieBao Browser
|
/(LBBROWSER)/i // LieBao Browser
|
||||||
], [NAME], [
|
], [NAME], [
|
||||||
|
|
||||||
|
/(weibo)__([\d\.]+)/i // Weibo
|
||||||
|
], [NAME, VERSION], [
|
||||||
|
|
||||||
/xiaomi\/miuibrowser\/([\w\.]+)/i // MIUI Browser
|
/xiaomi\/miuibrowser\/([\w\.]+)/i // MIUI Browser
|
||||||
], [VERSION, [NAME, 'MIUI Browser']], [
|
], [VERSION, [NAME, 'MIUI Browser']], [
|
||||||
|
|
||||||
/;fbav\/([\w\.]+);/i // Facebook App for iOS & Android
|
/;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']], [
|
||||||
|
|
||||||
/safari\s(line)\/([\w\.]+)/i, // Line App for iOS
|
/safari\s(line)\/([\w\.]+)/i, // Line App for iOS
|
||||||
/android.+(line)\/([\w\.]+)\/iab/i // Line App for Android
|
/droid.+(line)\/([\w\.]+)\/iab/i // Line App for Android
|
||||||
], [NAME, VERSION], [
|
], [NAME, VERSION], [
|
||||||
|
|
||||||
/headlesschrome(?:\/([\w\.]+)|\s)/i // Chrome Headless
|
/headlesschrome(?:\/([\w\.]+)|\s)/i // Chrome Headless
|
||||||
@@ -331,9 +320,12 @@
|
|||||||
/((?:oculus|samsung)browser)\/([\w\.]+)/i
|
/((?:oculus|samsung)browser)\/([\w\.]+)/i
|
||||||
], [[NAME, /(.+(?:g|us))(.+)/, '$1 $2'], VERSION], [ // Oculus / Samsung Browser
|
], [[NAME, /(.+(?:g|us))(.+)/, '$1 $2'], VERSION], [ // Oculus / Samsung Browser
|
||||||
|
|
||||||
/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i // Android Browser
|
/droid.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i // Android Browser
|
||||||
], [VERSION, [NAME, 'Android Browser']], [
|
], [VERSION, [NAME, 'Android Browser']], [
|
||||||
|
|
||||||
|
/(coc_coc_browser)\/([\w\.]+)/i // Coc Coc Browser
|
||||||
|
], [[NAME, 'Coc Coc'], VERSION], [
|
||||||
|
|
||||||
/(sailfishbrowser)\/([\w\.]+)/i // Sailfish Browser
|
/(sailfishbrowser)\/([\w\.]+)/i // Sailfish Browser
|
||||||
], [[NAME, 'Sailfish Browser'], VERSION], [
|
], [[NAME, 'Sailfish Browser'], VERSION], [
|
||||||
|
|
||||||
@@ -356,13 +348,13 @@
|
|||||||
/fxios\/([\w\.-]+)/i // Firefox for iOS
|
/fxios\/([\w\.-]+)/i // Firefox for iOS
|
||||||
], [VERSION, [NAME, 'Firefox']], [
|
], [VERSION, [NAME, 'Firefox']], [
|
||||||
|
|
||||||
/version\/([\w\.]+).+?mobile\/\w+\s(safari)/i // Mobile Safari
|
/version\/([\w\.]+)\s.*mobile\/\w+\s(safari)/i // Mobile Safari
|
||||||
], [VERSION, [NAME, 'Mobile Safari']], [
|
], [VERSION, [NAME, 'Mobile Safari']], [
|
||||||
|
|
||||||
/version\/([\w\.]+).+?(mobile\s?safari|safari)/i // Safari & Safari Mobile
|
/version\/([\w\.]+)\s.*(mobile\s?safari|safari)/i // Safari & Safari Mobile
|
||||||
], [VERSION, NAME], [
|
], [VERSION, NAME], [
|
||||||
|
|
||||||
/webkit.+?(gsa)\/([\w\.]+).+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Google Search Appliance on iOS
|
/webkit.+?(gsa)\/([\w\.]+)\s.*(mobile\s?safari|safari)(\/[\w\.]+)/i // Google Search Appliance on iOS
|
||||||
], [[NAME, 'GSA'], VERSION], [
|
], [[NAME, 'GSA'], VERSION], [
|
||||||
|
|
||||||
/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
|
/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
|
||||||
@@ -380,7 +372,8 @@
|
|||||||
/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([\w\.-]+)$/i,
|
/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([\w\.-]+)$/i,
|
||||||
|
|
||||||
// Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
|
// Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
|
||||||
/(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i, // Mozilla
|
/(firefox)\/([\w\.]+)\s[\w\s\-]+\/[\w\.]+$/i, // Other Firefox-based
|
||||||
|
/(mozilla)\/([\w\.]+)\s.+rv\:.+gecko\/\d+/i, // Mozilla
|
||||||
|
|
||||||
// Other
|
// Other
|
||||||
/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i,
|
/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i,
|
||||||
@@ -437,16 +430,15 @@
|
|||||||
/(dell)\s(strea[kpr\s\d]*[\dko])/i // Dell Streak
|
/(dell)\s(strea[kpr\s\d]*[\dko])/i // Dell Streak
|
||||||
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
||||||
|
|
||||||
/(kf[A-z]+)\sbuild\/.+silk\//i // Kindle Fire HD
|
/(alexa)webm/i,
|
||||||
|
/(kf[A-z]+)(\sbuild\/|\)).+silk\//i // Kindle Fire HD
|
||||||
], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
||||||
/(sd|kf)[0349hijorstuw]+\sbuild\/.+silk\//i // Fire Phone
|
/(sd|kf)[0349hijorstuw]+(\sbuild\/|\)).+silk\//i // Fire Phone
|
||||||
], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [
|
], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [
|
||||||
/android.+aft([bms])\sbuild/i // Fire TV
|
/droid.+aft([\w])(\sbuild\/|\))/i // Fire TV
|
||||||
], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [
|
], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [
|
||||||
|
|
||||||
/\((ip[honed|\s\w*]+);.+(apple)/i // iPod/iPhone
|
/\((ip(?:hone|od)[\s\w]*);/i // iPod/iPhone
|
||||||
], [MODEL, VENDOR, [TYPE, MOBILE]], [
|
|
||||||
/\((ip[honed|\s\w*]+);/i // iPod/iPhone
|
|
||||||
], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [
|
||||||
|
|
||||||
/(blackberry)[\s-]?(\w+)/i, // BlackBerry
|
/(blackberry)[\s-]?(\w+)/i, // BlackBerry
|
||||||
@@ -458,29 +450,29 @@
|
|||||||
/\(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|p00c)/i
|
/droid.+(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\stablet\s[ps]\sbuild\//i, // Sony
|
||||||
/(sony)?(?:sgp.+)\sbuild\//i
|
/(?:sony)?sgp\w+(?:\sbuild\/|\))/i
|
||||||
], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [
|
], [[MODEL, 'Xperia Tablet'], [VENDOR, 'Sony'], [TYPE, TABLET]], [
|
||||||
/android.+\s([c-g]\d{4}|so[-l]\w+)(?=\sbuild\/|\).+chrome\/(?![1-6]{0,1}\d\.))/i
|
/droid.+\s([c-g]\d{4}|so[-l]\w+|xq-a\w[4-7][12])(?=\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
|
||||||
/(nintendo)\s([wids3u]+)/i // Nintendo
|
/(nintendo)\s([wids3utch]+)/i // Nintendo
|
||||||
], [VENDOR, MODEL, [TYPE, CONSOLE]], [
|
], [VENDOR, MODEL, [TYPE, CONSOLE]], [
|
||||||
|
|
||||||
/android.+;\s(shield)\sbuild/i // Nvidia
|
/droid.+;\s(shield)\sbuild/i // Nvidia
|
||||||
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [
|
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [
|
||||||
|
|
||||||
/(playstation\s[34portablevi]+)/i // Playstation
|
/(playstation\s[345portablevi]+)/i // Playstation
|
||||||
], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [
|
], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [
|
||||||
|
|
||||||
/(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]], [
|
||||||
|
|
||||||
/(htc)[;_\s-]+([\w\s]+(?=\)|\sbuild)|\w+)/i, // HTC
|
/(htc)[;_\s-]{1,2}([\w\s]+(?=\)|\sbuild)|\w+)/i, // HTC
|
||||||
/(zte)-(\w*)/i, // ZTE
|
/(zte)-(\w*)/i, // ZTE
|
||||||
/(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i
|
/(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i
|
||||||
// Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
// Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
||||||
@@ -489,11 +481,13 @@
|
|||||||
/(nexus\s9)/i // HTC Nexus 9
|
/(nexus\s9)/i // HTC Nexus 9
|
||||||
], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/d\/huawei([\w\s-]+)[;\)]/i,
|
/d\/huawei([\w\s-]+)[;\)]/i, // Huawei
|
||||||
/(nexus\s6p|vog-l29|ane-lx1|eml-l29)/i // Huawei
|
/droid.+\s(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?)/i,
|
||||||
|
/droid.+\s((?:A(?:GS2?|KA|LP|N[AE]|QM|RE|SK|TH)|B(?:A(?:C|H2)|G2|KL|LA|MH|Z[AKT])|C(?:AZ|DY|LT|OL|[MOR]R)|DUK|E(?:BG|DI|L[ES]|ML|V[AR])|FRD|G(?:LK|RA)|H(?:D[LN]|MA|LK|RY|WI)|INE|J(?:DN2|MM|NY|SN)|K(?:NT|OB|SA)|L(?:IO|LD|ON|[RY]A)|M(?:AR|ED|[HL]A|ON|RX|T7)|N(?:EO|TS|XT)|OXF|P(?:AR|CT|IC|LK|RA)|R(?:IO|VL)|S(?:C[ML]|EA|HT|PN|TF)|T(?:A[HS]|NY)|V(?:[CI]E|KY|OG|RD)|W(?:AS|LZ)|Y(?:635|AL))-[ATU][LN][01259][019])[;\)\s]/i
|
||||||
|
|
||||||
], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [
|
||||||
|
|
||||||
/android.+(bah2?-a?[lw]\d{2})/i // Huawei MediaPad
|
/droid.+(bah2?-a?[lw]\d{2})/i // Huawei MediaPad
|
||||||
], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/(microsoft);\s(lumia[\s\w]+)/i // Microsoft Lumia
|
/(microsoft);\s(lumia[\s\w]+)/i // Microsoft Lumia
|
||||||
@@ -506,11 +500,12 @@
|
|||||||
|
|
||||||
// Motorola
|
// Motorola
|
||||||
/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)[\w\s]+build\//i,
|
/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)[\w\s]+build\//i,
|
||||||
/mot[\s-]?(\w*)/i,
|
/\smot[\s-](\w*)/i,
|
||||||
|
/(moto[\s\w\(\)]+(?=\sbuild|\)))/i,
|
||||||
/(XT\d{3,4}) build\//i,
|
/(XT\d{3,4}) build\//i,
|
||||||
/(nexus\s6)/i
|
/(nexus\s6)/i
|
||||||
], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [
|
||||||
/android.+\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i
|
/droid.+\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i
|
||||||
], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i // HbbTV devices
|
/hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i // HbbTV devices
|
||||||
@@ -522,13 +517,13 @@
|
|||||||
/\(dtv[\);].+(aquos)/i // Sharp
|
/\(dtv[\);].+(aquos)/i // Sharp
|
||||||
], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [
|
], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [
|
||||||
|
|
||||||
/android.+((sch-i[89]0\d|shw-m380s|gt-p\d{4}|gt-n\d+|sgh-t8[56]9|nexus 10))/i,
|
/droid.+((sch-i[89]0\d|shw-m380s|SM-P605|SM-P610|SM-P587|gt-p\d{4}|gt-n\d+|sgh-t8[56]9|nexus 10))/i,
|
||||||
/((SM-T\w+))/i
|
/((SM-T\w+))/i
|
||||||
], [[VENDOR, 'Samsung'], MODEL, [TYPE, TABLET]], [ // Samsung
|
], [[VENDOR, 'Samsung'], MODEL, [TYPE, TABLET]], [ // Samsung
|
||||||
/smart-tv.+(samsung)/i
|
/smart-tv.+(samsung)/i
|
||||||
], [VENDOR, [TYPE, SMARTTV], MODEL], [
|
], [VENDOR, [TYPE, SMARTTV], MODEL], [
|
||||||
/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i,
|
/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i,
|
||||||
/(sam[sung]*)[\s-]*(\w+-?[\w-]*)/i,
|
/\s(sam)(?:sung)[\s-]([\w-]+)/i,
|
||||||
/sec-((sgh\w+))/i
|
/sec-((sgh\w+))/i
|
||||||
], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [
|
], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [
|
||||||
|
|
||||||
@@ -536,26 +531,27 @@
|
|||||||
], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [
|
||||||
|
|
||||||
/(maemo|nokia).*(n900|lumia\s\d+)/i, // Nokia
|
/(maemo|nokia).*(n900|lumia\s\d+)/i, // Nokia
|
||||||
/(nokia)[\s_-]?([\w-]*)/i
|
/(nokia)[\s_-]?([\w\.-]*)/i
|
||||||
], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [
|
], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [
|
||||||
|
|
||||||
/android[x\d\.\s;]+\s([ab][1-7]\-?[0178a]\d\d?)/i // Acer
|
/droid[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
|
/droid.+([vl]k\-?\d{3})\s+build/i // LG Tablet
|
||||||
], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [
|
||||||
/android\s3\.[\s\w;-]{10}(lg?)-([06cv9]{3,4})/i // LG Tablet
|
/droid\s3\.[\s\w;-]{10}(lg?)-([06cv9]{3,4})/i // LG Tablet
|
||||||
], [[VENDOR, 'LG'], MODEL, [TYPE, TABLET]], [
|
], [[VENDOR, 'LG'], MODEL, [TYPE, TABLET]], [
|
||||||
/(lg) netcast\.tv/i // LG SmartTV
|
/linux;\snetcast.+smarttv/i, // LG SmartTV
|
||||||
], [VENDOR, MODEL, [TYPE, SMARTTV]], [
|
/lg\snetcast\.tv-201\d/i
|
||||||
|
], [[VENDOR, 'LG'], MODEL, [TYPE, SMARTTV]], [
|
||||||
/(nexus\s[45])/i, // LG
|
/(nexus\s[45])/i, // LG
|
||||||
/lg[e;\s\/-]+(\w*)/i,
|
/lg[e;\s\/-]+(\w*)/i,
|
||||||
/android.+lg(\-?[\d\w]+)\s+build/i
|
/droid.+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
|
/(lenovo)\s?(s(?:5000|6000)(?:[\w-]+)|tab(?:[\s\w]+)|[\w-]+)/i // Lenovo tablets
|
||||||
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
||||||
/android.+(ideatab[a-z0-9\-\s]+)/i // Lenovo
|
/droid.+(ideatab[a-z0-9\-\s]+)/i // Lenovo
|
||||||
], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [
|
||||||
/(lenovo)[_\s-]?([\w-]+)/i
|
/(lenovo)[_\s-]?([\w-]+)/i
|
||||||
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
||||||
@@ -566,114 +562,127 @@
|
|||||||
/((pebble))app\/[\d\.]+\s/i // Pebble
|
/((pebble))app\/[\d\.]+\s/i // Pebble
|
||||||
], [VENDOR, MODEL, [TYPE, WEARABLE]], [
|
], [VENDOR, MODEL, [TYPE, WEARABLE]], [
|
||||||
|
|
||||||
/android.+;\s(oppo)\s?([\w\s]+)\sbuild/i // OPPO
|
/droid.+;\s(oppo)\s?([\w\s]+)\sbuild/i // OPPO
|
||||||
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
||||||
|
|
||||||
/crkey/i // Google Chromecast
|
/crkey/i // Google Chromecast
|
||||||
], [[MODEL, 'Chromecast'], [VENDOR, 'Google'], [TYPE, SMARTTV]], [
|
], [[MODEL, 'Chromecast'], [VENDOR, 'Google'], [TYPE, SMARTTV]], [
|
||||||
|
|
||||||
/android.+;\s(glass)\s\d/i // Google Glass
|
/droid.+;\s(glass)\s\d/i // Google Glass
|
||||||
], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [
|
], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [
|
||||||
|
|
||||||
/android.+;\s(pixel c)[\s)]/i // Google Pixel C
|
/droid.+;\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
|
/droid.+;\s(pixel( [2-9]a?)?( 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
|
/droid.+;\s(\w+)\s+build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
||||||
/android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i, // Xiaomi Hongmi
|
/droid.+(hm[\s\-_]?note?[\s_]?(?:\d\w)?)\sbuild/i, // Xiaomi Hongmi
|
||||||
/android.+(mi[\s\-_]*(?:a\d|one|one[\s_]plus|note lte)?[\s_]*(?:\d?\w?)[\s_]*(?:plus)?)\s+build/i,
|
/droid.+(redmi[\s\-_]?(?:note|k)?(?:[\s_]?[\w\s]+))(?:\sbuild|\))/i,
|
||||||
|
// Xiaomi Redmi
|
||||||
|
/droid.+(mi[\s\-_]?(?:a\d|one|one[\s_]plus|note lte)?[\s_]?(?:\d?\w?)[\s_]?(?:plus)?)\sbuild/i
|
||||||
// Xiaomi Mi
|
// Xiaomi Mi
|
||||||
/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
|
/droid.+(mi[\s\-_]?(?:pad)(?:[\s_]?[\w\s]+))(?:\sbuild|\))/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
|
/droid.+;\s(m[1-5]\snote)\sbuild/i // Meizu
|
||||||
], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [
|
||||||
/(mz)-([\w-]{2,})/i
|
/(mz)-([\w-]{2,})/i
|
||||||
], [[VENDOR, 'Meizu'], MODEL, [TYPE, MOBILE]], [
|
], [[VENDOR, 'Meizu'], MODEL, [TYPE, MOBILE]], [
|
||||||
|
|
||||||
/android.+a000(1)\s+build/i, // OnePlus
|
/droid.+a000(1)\s+build/i, // OnePlus
|
||||||
/android.+oneplus\s(a\d{4})[\s)]/i
|
/droid.+oneplus\s(a\d{4})[\s)]/i
|
||||||
], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
|
||||||
|
|
||||||
/android.+[;\/]\s*(RCT[\d\w]+)\s+build/i // RCA Tablets
|
/droid.+[;\/]\s*(RCT[\d\w]+)\s+build/i // RCA Tablets
|
||||||
], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+[;\/\s]+(Venue[\d\s]{2,7})\s+build/i // Dell Venue Tablets
|
/droid.+[;\/\s](Venue[\d\s]{2,7})\s+build/i // Dell Venue Tablets
|
||||||
], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+[;\/]\s*(Q[T|M][\d\w]+)\s+build/i // Verizon Tablet
|
/droid.+[;\/]\s*(Q[T|M][\d\w]+)\s+build/i // Verizon Tablet
|
||||||
], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+[;\/]\s+(Barnes[&\s]+Noble\s+|BN[RT])(V?.*)\s+build/i // Barnes & Noble Tablet
|
/droid.+[;\/]\s+(Barnes[&\s]+Noble\s+|BN[RT])(\S(?:.*\S)?)\s+build/i
|
||||||
], [[VENDOR, 'Barnes & Noble'], MODEL, [TYPE, TABLET]], [
|
], [[VENDOR, 'Barnes & Noble'], MODEL, [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+[;\/]\s+(TM\d{3}.*\b)\s+build/i // Barnes & Noble Tablet
|
/droid.+[;\/]\s+(TM\d{3}.*\b)\s+build/i // Barnes & Noble Tablet
|
||||||
], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+;\s(k88)\sbuild/i // ZTE K Series Tablet
|
/droid.+;\s(k88)\sbuild/i // ZTE K Series Tablet
|
||||||
], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+[;\/]\s*(gen\d{3})\s+build.*49h/i // Swiss GEN Mobile
|
/droid.+;\s(nx\d{3}j)\sbuild/i // ZTE Nubia
|
||||||
|
], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [
|
||||||
|
|
||||||
|
/droid.+[;\/]\s*(gen\d{3})\s+build.*49h/i // Swiss GEN Mobile
|
||||||
], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [
|
||||||
|
|
||||||
/android.+[;\/]\s*(zur\d{3})\s+build/i // Swiss ZUR Tablet
|
/droid.+[;\/]\s*(zur\d{3})\s+build/i // Swiss ZUR Tablet
|
||||||
], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+[;\/]\s*((Zeki)?TB.*\b)\s+build/i // Zeki Tablets
|
/droid.+[;\/]\s*((Zeki)?TB.*\b)\s+build/i // Zeki Tablets
|
||||||
], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/(android).+[;\/]\s+([YR]\d{2})\s+build/i,
|
/(android).+[;\/]\s+([YR]\d{2})\s+build/i,
|
||||||
/android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(\w{5})\sbuild/i // Dragon Touch Tablet
|
/droid.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(\w{5})\sbuild/i // Dragon Touch Tablet
|
||||||
], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [
|
], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+[;\/]\s*(NS-?\w{0,9})\sbuild/i // Insignia Tablets
|
/droid.+[;\/]\s*(NS-?\w{0,9})\sbuild/i // Insignia Tablets
|
||||||
], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+[;\/]\s*((NX|Next)-?\w{0,9})\s+build/i // NextBook Tablets
|
/droid.+[;\/]\s*((NXA|Next)-?\w{0,9})\s+build/i // NextBook Tablets
|
||||||
], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+[;\/]\s*(Xtreme\_)?(V(1[045]|2[015]|30|40|60|7[05]|90))\s+build/i
|
/droid.+[;\/]\s*(Xtreme\_)?(V(1[045]|2[015]|30|40|60|7[05]|90))\s+build/i
|
||||||
], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones
|
], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones
|
||||||
|
|
||||||
/android.+[;\/]\s*(LVTEL\-)?(V1[12])\s+build/i // LvTel Phones
|
/droid.+[;\/]\s*(LVTEL\-)?(V1[12])\s+build/i // LvTel Phones
|
||||||
], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [
|
], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [
|
||||||
|
|
||||||
/android.+;\s(PH-1)\s/i
|
/droid.+;\s(PH-1)\s/i
|
||||||
], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [ // Essential PH-1
|
], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [ // Essential PH-1
|
||||||
|
|
||||||
/android.+[;\/]\s*(V(100MD|700NA|7011|917G).*\b)\s+build/i // Envizen Tablets
|
/droid.+[;\/]\s*(V(100MD|700NA|7011|917G).*\b)\s+build/i // Envizen Tablets
|
||||||
], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+[;\/]\s*(Le[\s\-]+Pan)[\s\-]+(\w{1,9})\s+build/i // Le Pan Tablets
|
/droid.+[;\/]\s*(Le[\s\-]+Pan)[\s\-]+(\w{1,9})\s+build/i // Le Pan Tablets
|
||||||
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+[;\/]\s*(Trio[\s\-]*.*)\s+build/i // MachSpeed Tablets
|
/droid.+[;\/]\s*(Trio[\s\w\-\.]+)\s+build/i // MachSpeed Tablets
|
||||||
], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+[;\/]\s*(Trinity)[\-\s]*(T\d{3})\s+build/i // Trinity Tablets
|
/droid.+[;\/]\s*(Trinity)[\-\s]*(T\d{3})\s+build/i // Trinity Tablets
|
||||||
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+[;\/]\s*TU_(1491)\s+build/i // Rotor Tablets
|
/droid.+[;\/]\s*TU_(1491)\s+build/i // Rotor Tablets
|
||||||
], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+(KS(.+))\s+build/i // Amazon Kindle Tablets
|
//android.+(KS(.+))\s+build/i // Amazon Kindle Tablets
|
||||||
], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
//], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/android.+(Gigaset)[\s\-]+(Q\w{1,9})\s+build/i // Gigaset Tablets
|
/droid.+(Gigaset)[\s\-]+(Q\w{1,9})\s+build/i // Gigaset Tablets
|
||||||
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
||||||
|
|
||||||
|
/[\s\/\(](android\stv|smart-?tv)[;\)\s]/i // SmartTV from Unidentified Vendors
|
||||||
|
], [[TYPE, SMARTTV]], [
|
||||||
|
// Android Phones from Unidentified Vendors
|
||||||
|
/droid .+?; ([^;]+?)(?: build|\) applewebkit).+? mobile safari/i
|
||||||
|
], [MODEL, [TYPE, MOBILE]], [
|
||||||
|
// Android Tablets from Unidentified Vendors
|
||||||
|
/droid .+?;\s([^;]+?)(?: build|\) applewebkit).+?(?! mobile) safari/i
|
||||||
|
], [MODEL, [TYPE, TABLET]], [
|
||||||
|
|
||||||
/\s(tablet|tab)[;\/]/i, // Unidentifiable Tablet
|
/\s(tablet|tab)[;\/]/i, // Unidentifiable Tablet
|
||||||
/\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']], [
|
||||||
|
|
||||||
|
/(phone)/i
|
||||||
|
], [[TYPE, MOBILE]]
|
||||||
],
|
],
|
||||||
|
|
||||||
engine : [[
|
engine : [[
|
||||||
@@ -697,6 +706,9 @@
|
|||||||
|
|
||||||
os : [[
|
os : [[
|
||||||
|
|
||||||
|
// Xbox, consider this before other Windows-based devices
|
||||||
|
/(xbox);\s+xbox\s([^\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)
|
||||||
|
|
||||||
// Windows based
|
// Windows based
|
||||||
/microsoft\s(windows)\s(vista|xp)/i // Windows (iTunes)
|
/microsoft\s(windows)\s(vista|xp)/i // Windows (iTunes)
|
||||||
], [NAME, VERSION], [
|
], [NAME, VERSION], [
|
||||||
@@ -722,8 +734,12 @@
|
|||||||
/mozilla.+\(mobile;.+gecko.+firefox/i // Firefox OS
|
/mozilla.+\(mobile;.+gecko.+firefox/i // Firefox OS
|
||||||
], [[NAME, 'Firefox OS'], VERSION], [
|
], [[NAME, 'Firefox OS'], VERSION], [
|
||||||
|
|
||||||
|
// Google Chromecast
|
||||||
|
/crkey\/([\d\.]+)/i // Google Chromecast
|
||||||
|
], [VERSION, [NAME, 'Chromecast']], [
|
||||||
|
|
||||||
// Console
|
// Console
|
||||||
/(nintendo|playstation)\s([wids34portablevu]+)/i, // Nintendo/Playstation
|
/(nintendo|playstation)\s([wids345portablevuch]+)/i, // Nintendo/Playstation
|
||||||
|
|
||||||
// GNU/Linux based
|
// GNU/Linux based
|
||||||
/(mint)[\/\s\(]?(\w*)/i, // Mint
|
/(mint)[\/\s\(]?(\w*)/i, // Mint
|
||||||
@@ -782,7 +798,7 @@
|
|||||||
return new UAParser(uastring, extensions).getResult();
|
return new UAParser(uastring, extensions).getResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
|
var ua = uastring || ((typeof window !== 'undefined' && 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;
|
||||||
|
|
||||||
this.getBrowser = function () {
|
this.getBrowser = function () {
|
||||||
@@ -878,7 +894,7 @@
|
|||||||
define(function () {
|
define(function () {
|
||||||
return UAParser;
|
return UAParser;
|
||||||
});
|
});
|
||||||
} else if (window) {
|
} else if (typeof window !== 'undefined') {
|
||||||
// browser env
|
// browser env
|
||||||
window.UAParser = UAParser;
|
window.UAParser = UAParser;
|
||||||
}
|
}
|
||||||
@@ -889,7 +905,7 @@
|
|||||||
// In AMD env the global scope should be kept clean, but jQuery is an exception.
|
// In AMD env the global scope should be kept clean, but jQuery is an exception.
|
||||||
// jQuery always exports to global scope, unless jQuery.noConflict(true) is used,
|
// jQuery always exports to global scope, unless jQuery.noConflict(true) is used,
|
||||||
// and we should catch that.
|
// and we should catch that.
|
||||||
var $ = window && (window.jQuery || window.Zepto);
|
var $ = typeof window !== 'undefined' && (window.jQuery || window.Zepto);
|
||||||
if ($ && !$.ua) {
|
if ($ && !$.ua) {
|
||||||
var parser = new UAParser();
|
var parser = new UAParser();
|
||||||
$.ua = parser.getResult();
|
$.ua = parser.getResult();
|
||||||
|
|||||||
@@ -239,6 +239,16 @@
|
|||||||
"major" : "16"
|
"major" : "16"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Coc Coc Browser",
|
||||||
|
"ua" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) coc_coc_browser/78.0.129 Chrome/72.0.3626.129 Safari/537.36",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "Coc Coc",
|
||||||
|
"version" : "78.0.129",
|
||||||
|
"major" : "78"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc" : "Dillo",
|
"desc" : "Dillo",
|
||||||
"ua" : "Dillo/2.2",
|
"ua" : "Dillo/2.2",
|
||||||
@@ -310,7 +320,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"desc" : "Facebook in-App Browser for Android",
|
"desc" : "Facebook in-App Browser for Android with version",
|
||||||
"ua" : "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.121 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/35.0.0.48.273;]",
|
"ua" : "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.121 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/35.0.0.48.273;]",
|
||||||
"expect" :
|
"expect" :
|
||||||
{
|
{
|
||||||
@@ -320,7 +330,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"desc" : "Facebook in-App Browser for iOS",
|
"desc" : "Facebook in-App Browser for iOS with version",
|
||||||
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Mobile/14E304 [FBAN/FBIOS;FBAV/91.0.0.41.73;FBBV/57050710;FBDV/iPhone8,1;FBMD/iPhone;FBSN/iOS;FBSV/10.3.1;FBSS/2;FBCR/Telekom.de;FBID/phone;FBLC/de_DE;FBOP/5;FBRV/0])",
|
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Mobile/14E304 [FBAN/FBIOS;FBAV/91.0.0.41.73;FBBV/57050710;FBDV/iPhone8,1;FBMD/iPhone;FBSN/iOS;FBSV/10.3.1;FBSS/2;FBCR/Telekom.de;FBID/phone;FBLC/de_DE;FBOP/5;FBRV/0])",
|
||||||
"expect" :
|
"expect" :
|
||||||
{
|
{
|
||||||
@@ -329,6 +339,26 @@
|
|||||||
"major" : "91"
|
"major" : "91"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Facebook in-App Browser for iOS without version",
|
||||||
|
"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/iPhone10,2;FBMD/iPhone;FBSN/iOS;FBSV/13.3.1;FBSS/3;FBID/phone;FBLC/en_US;FBOP/5;FBCR/]",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "Facebook",
|
||||||
|
"version" : "undefined",
|
||||||
|
"major" : "undefined"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Instagram in-App Browser for iOS",
|
||||||
|
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 14_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Instagram 142.0.0.22.109 (iPhone12,5; iOS 14_1; en_US; en-US; scale=3.00; 1242x2688; 214888322) NW/1",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "Instagram",
|
||||||
|
"version" : "142.0.0.22.109",
|
||||||
|
"major" : "142"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc" : "Falkon",
|
"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",
|
"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",
|
||||||
@@ -359,6 +389,16 @@
|
|||||||
"major" : "15"
|
"major" : "15"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Firefox-based browser",
|
||||||
|
"ua" : "Mozilla/5.0 (X11; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0 AppName/1.0",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "Firefox",
|
||||||
|
"version" : "80.0",
|
||||||
|
"major" : "80"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc" : "Fennec",
|
"desc" : "Fennec",
|
||||||
"ua" : "Mozilla/5.0 (X11; U; Linux armv61; en-US; rv:1.9.1b2pre) Gecko/20081015 Fennec/1.0a1",
|
"ua" : "Mozilla/5.0 (X11; U; Linux armv61; en-US; rv:1.9.1b2pre) Gecko/20081015 Fennec/1.0a1",
|
||||||
@@ -1028,6 +1068,16 @@
|
|||||||
"major": "6"
|
"major": "6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "WeChat on Android",
|
||||||
|
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16A366 Weibo (iPhone8,2__weibo__8.9.3__iphone__os12.0)",
|
||||||
|
"expect":
|
||||||
|
{
|
||||||
|
"name": "weibo",
|
||||||
|
"version": "8.9.3",
|
||||||
|
"major": "8"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc" : "Vivaldi",
|
"desc" : "Vivaldi",
|
||||||
"ua" : "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.89 Vivaldi/1.0.83.38 Safari/537.36",
|
"ua" : "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.89 Vivaldi/1.0.83.38 Safari/537.36",
|
||||||
@@ -1168,6 +1218,16 @@
|
|||||||
"major" : "3"
|
"major" : "3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc" : "WeChat Desktop for Windows Built-in Browser major version in 4",
|
||||||
|
"ua" : "mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/53.0.2785.116 safari/537.36 qbcore/4.0.1301.400 qqbrowser/9.0.2524.400 mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/81.0.4044.138 safari/537.36 nettype/wifi micromessenger/7.0.20.1781(0x6700143b) windowswechat",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "WeChat(Win) Desktop",
|
||||||
|
"version" : "4.0.1301.400",
|
||||||
|
"major" : "4"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"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",
|
||||||
@@ -1233,5 +1293,15 @@
|
|||||||
"version" : "4.5.16",
|
"version" : "4.5.16",
|
||||||
"major" : "4"
|
"major" : "4"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Whale Browser",
|
||||||
|
"ua" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.146 Whale/2.6.90.14 Safari/537.36",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "Whale",
|
||||||
|
"version" : "2.6.90.14",
|
||||||
|
"major" : "2"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -142,6 +142,24 @@
|
|||||||
"type": "tablet"
|
"type": "tablet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"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",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Lenovo",
|
||||||
|
"model": "YT3-X90F",
|
||||||
|
"type": "tablet"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Lenovo Tab 4",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 7.1.1; Lenovo TB-X304F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.99 Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Lenovo",
|
||||||
|
"model": "TB-X304F",
|
||||||
|
"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",
|
||||||
@@ -160,6 +178,24 @@
|
|||||||
"type": "mobile"
|
"type": "mobile"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "LG Smart TV",
|
||||||
|
"ua": "Mozilla/5.0 (DirectFB; U; Linux mips; en) AppleWebKit/528.5+ (KHTML, like Gecko, Safari/528.5+) LG Browser (; LG NetCast.TV-2011)",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "LG",
|
||||||
|
"model": "undefined",
|
||||||
|
"type": "smarttv"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "LG Smart TV",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; NetCast; U) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/53.0.2785 34 Safari/537.31 SmartTV/8.5",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "LG",
|
||||||
|
"model": "undefined",
|
||||||
|
"type": "smarttv"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Meizu M5 Note",
|
"desc": "Meizu M5 Note",
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 6.0; M5 Note Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043024 Safari/537.36 MicroMessenger/6.5.7.1040 NetType/WIFI Language/zh_CN",
|
"ua": "Mozilla/5.0 (Linux; Android 6.0; M5 Note Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043024 Safari/537.36 MicroMessenger/6.5.7.1040 NetType/WIFI Language/zh_CN",
|
||||||
@@ -252,6 +288,33 @@
|
|||||||
"type": "mobile"
|
"type": "mobile"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Motorola Moto g(6) Play",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 9; moto g(6) play) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Motorola",
|
||||||
|
"model": "moto g(6) play",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Motorola Moto g(7) Supra",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 9; moto g(7) supra Build/PCOS29.114-134-2; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/73.0.3683.90 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Motorola",
|
||||||
|
"model": "moto g(7) supra",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Motorola Moto E",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 7.1.1; Moto E (4) Build/NDQS26.69-64-11-7; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/56.0.2924.87 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Motorola",
|
||||||
|
"model": "Moto E (4)",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Nokia3xx",
|
"desc": "Nokia3xx",
|
||||||
"ua": "Nokia303/14.87 CLDC-1.1",
|
"ua": "Nokia303/14.87 CLDC-1.1",
|
||||||
@@ -261,6 +324,15 @@
|
|||||||
"type": "mobile"
|
"type": "mobile"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Nokia 3.2",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 10; Nokia 3.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Nokia",
|
||||||
|
"model": "3.2",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "OnePlus One",
|
"desc": "OnePlus One",
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 4.4.4; A0001 Build/KTU84Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.59 Mobile Safari/537.36",
|
"ua": "Mozilla/5.0 (Linux; Android 4.4.4; A0001 Build/KTU84Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.59 Mobile Safari/537.36",
|
||||||
@@ -324,6 +396,15 @@
|
|||||||
"type": "tablet"
|
"type": "tablet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Kindle Fire HD",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.4 Mobile Safari/535.19 Silk-Accelerated=true",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Amazon",
|
||||||
|
"model": "KFTT",
|
||||||
|
"type": "tablet"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Samsung Galaxy Note 8",
|
"desc": "Samsung Galaxy Note 8",
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 4.2.2; GT-N5100 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36",
|
"ua": "Mozilla/5.0 (Linux; Android 4.2.2; GT-N5100 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36",
|
||||||
@@ -351,6 +432,15 @@
|
|||||||
"type": "tablet"
|
"type": "tablet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Samsung Galaxy Tab 6 Lite",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 10; SAMSUNG SM-P610) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/12.0 Chrome/79.0.3945.136 Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Samsung",
|
||||||
|
"model": "SM-P610",
|
||||||
|
"type": "tablet"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Samsung SM-T700",
|
"desc": "Samsung SM-T700",
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; SM-T700 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Safari/537.36",
|
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; SM-T700 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Safari/537.36",
|
||||||
@@ -378,6 +468,15 @@
|
|||||||
"type": "smarttv"
|
"type": "smarttv"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Samsung Note 10.1",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 5.1.1; SM-P605) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Samsung",
|
||||||
|
"model": "SM-P605",
|
||||||
|
"type": "tablet"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Samsung SmartTV2012",
|
"desc": "Samsung SmartTV2012",
|
||||||
"ua": "HbbTV/1.1.1 (;Samsung;SmartTV2012;;;) WebKit",
|
"ua": "HbbTV/1.1.1 (;Samsung;SmartTV2012;;;) WebKit",
|
||||||
@@ -468,6 +567,42 @@
|
|||||||
"type": "mobile"
|
"type": "mobile"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Sony Xperia L4",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 9; XQ-AD51) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.83 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Sony",
|
||||||
|
"model": "XQ-AD51",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Sony Xperia 1ii",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 10; XQ-AT51) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Sony",
|
||||||
|
"model": "XQ-AT51",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Sony Xperia 10ii",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 10; XQ-AU52) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Sony",
|
||||||
|
"model": "XQ-AU52",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Sony Xperia Pro",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 10; XQ-AQ52) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.185 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Sony",
|
||||||
|
"model": "XQ-AQ52",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Sony SGP521 (Xperia Z2 Tablet)",
|
"desc": "Sony SGP521 (Xperia Z2 Tablet)",
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 4.4; SGP521 Build/17.1.A.0.432) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Safari/537.36",
|
"ua": "Mozilla/5.0 (Linux; Android 4.4; SGP521 Build/17.1.A.0.432) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Safari/537.36",
|
||||||
@@ -477,6 +612,15 @@
|
|||||||
"type": "tablet"
|
"type": "tablet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Sony Xperia Z2 Tablet",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 5.1.1; SGP561) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.99 Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Sony",
|
||||||
|
"model": "Xperia Tablet",
|
||||||
|
"type": "tablet"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Sony Tablet S",
|
"desc": "Sony Tablet S",
|
||||||
"ua": "Mozilla/5.0 (Linux; U; Android 3.1; Sony Tablet S Build/THMAS10000) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
|
"ua": "Mozilla/5.0 (Linux; U; Android 3.1; Sony Tablet S Build/THMAS10000) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
|
||||||
@@ -576,6 +720,69 @@
|
|||||||
"type": "mobile"
|
"type": "mobile"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Xiaomi MI PAD 2",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 5.1; MI PAD 2 Build/LMY47I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/60.0.3112.107 Safari/537.36 [FB_IAB/FB4A;FBAV/137.0.0.24.91;]",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Xiaomi",
|
||||||
|
"model": "MI PAD 2",
|
||||||
|
"type": "tablet"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Xiaomi MI PAD 4 PLUS",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 8.1; MI PAD 4 PLUS) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Xiaomi",
|
||||||
|
"model": "MI PAD 4 PLUS",
|
||||||
|
"type": "tablet"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Xiaomi Redmi 4A",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 6.0; Redmi 4A Build/MMB29M; xx-xx) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/56.0.2924.87 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Xiaomi",
|
||||||
|
"model": "Redmi 4A",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Xiaomi Redmi K30 5G",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 10; Redmi K30 5G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.96 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Xiaomi",
|
||||||
|
"model": "Redmi K30 5G",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Xiaomi Redmi K30 Pro",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 10; Redmi K30 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Xiaomi",
|
||||||
|
"model": "Redmi K30 Pro",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Xiaomi Redmi Note 3",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 6.0.1; Redmi Note 3 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.116 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Xiaomi",
|
||||||
|
"model": "Redmi Note 3",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Xiaomi Redmi Note 9 Pro Max",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 10; Redmi Note 9 Pro Max) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.99 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Xiaomi",
|
||||||
|
"model": "Redmi Note 9 Pro Max",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "PlayStation 4",
|
"desc": "PlayStation 4",
|
||||||
"ua": "Mozilla/5.0 (PlayStation 4 3.00) AppleWebKit/537.73 (KHTML, like Gecko)",
|
"ua": "Mozilla/5.0 (PlayStation 4 3.00) AppleWebKit/537.73 (KHTML, like Gecko)",
|
||||||
@@ -585,6 +792,24 @@
|
|||||||
"type": "console"
|
"type": "console"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "PlayStation 5",
|
||||||
|
"ua": "Mozilla/5.0 (Playstation; Playstation 5/1.05) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Safari/605.1.15",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Sony",
|
||||||
|
"model": "Playstation 5",
|
||||||
|
"type": "console"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Nintendo Switch",
|
||||||
|
"ua": "Mozilla/5.0 (Nintendo Switch; WifiWebAuthApplet) AppleWebKit/606.4 (KHTML, like Gecko) NF/6.0.1.15.4 NintendoBrowser/5.1.0.20393",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Nintendo",
|
||||||
|
"model": "Switch",
|
||||||
|
"type": "console"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Galaxy Nexus",
|
"desc": "Galaxy Nexus",
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19",
|
"ua": "Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19",
|
||||||
@@ -756,14 +981,82 @@
|
|||||||
"type": "mobile"
|
"type": "mobile"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Google Pixel 3a",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 10; Pixel 3a) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Google",
|
||||||
|
"model": "Pixel 3a",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Google Pixel 3a XL",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 10; Pixel 3a XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Google",
|
||||||
|
"model": "Pixel 3a XL",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Google Pixel 4",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Google",
|
||||||
|
"model": "Pixel 4",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Google Pixel 4 XL",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 10; Pixel 4 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Google",
|
||||||
|
"model": "Pixel 4 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)",
|
||||||
"expect": {
|
"expect": {
|
||||||
"vendor": "Generic",
|
"vendor": "Generic",
|
||||||
"model": "Android 6.0.1"
|
"model": "Android 6.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Android Phone Unidentified Vendor (docomo F-04K)",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; F-04K Build/V15R060P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.137 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"model": "F-04K",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Android Phone Unidentified Vendor (docomo SH-02M)",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 9; SH-02M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.136 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"model": "SH-02M",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Android Tablet Unidentified Vendor (docomo F-02K)",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; F-02K Build/V44R059G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"model": "F-02K",
|
||||||
|
"type": "tablet"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Android Tablet Unidentified Vendor (docomo d-02K)",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 9; d-02K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.136 Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"model": "d-02K",
|
||||||
|
"type": "tablet"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "LG VK Series Tablet",
|
"desc": "LG VK Series Tablet",
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 5.0.2; VK700 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.84 Safari/537.36",
|
"ua": "Mozilla/5.0 (Linux; Android 5.0.2; VK700 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.84 Safari/537.36",
|
||||||
@@ -881,6 +1174,15 @@
|
|||||||
"type": "tablet"
|
"type": "tablet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "ZTE Nubia Red Magic 3",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 9; NX629J Build/PKQ1.190321.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/45016 Mobile Safari/537.36 MMWEBID/4064 MicroMessenger/7.0.10.1580(0x27000A34) Process/tools NetType/WIFI Language/zh_CN ABI/arm64",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "ZTE",
|
||||||
|
"model": "NX629J",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Swizz GEN610",
|
"desc": "Swizz GEN610",
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; GEN610 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.83 Mobile Safari/537.36",
|
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; GEN610 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.83 Mobile Safari/537.36",
|
||||||
@@ -1016,6 +1318,15 @@
|
|||||||
"type": "tablet"
|
"type": "tablet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Amazon Alexa Echo Show",
|
||||||
|
"ua": "AlexaWebMediaPlayer/1.0.200641.0 (Linux;Android 5.1.1)",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Amazon",
|
||||||
|
"model": "Alexa",
|
||||||
|
"type": "tablet"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Amazon Kindle Fire Tablet",
|
"desc": "Amazon Kindle Fire Tablet",
|
||||||
"ua": "Mozilla/5.0 (Linux; U; Android 4.4.3; en-us; KFSAWI Build/KTU84M) AppleWebKit/537.36 (KHTML, like Gecko) Silk/3.66 like Chrome/39.0.2171.93 Safari/537.36",
|
"ua": "Mozilla/5.0 (Linux; U; Android 4.4.3; en-us; KFSAWI Build/KTU84M) AppleWebKit/537.36 (KHTML, like Gecko) Silk/3.66 like Chrome/39.0.2171.93 Safari/537.36",
|
||||||
@@ -1025,6 +1336,15 @@
|
|||||||
"type": "tablet"
|
"type": "tablet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Amazon Kindle Fire Tablet",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; U; Android 4.4.3; en-us; KFSAWI) AppleWebKit/537.36 (KHTML, like Gecko) Silk/3.66 like Chrome/39.0.2171.93 Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Amazon",
|
||||||
|
"model": "KFSAWI",
|
||||||
|
"type": "tablet"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Amazon Fire TV",
|
"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",
|
"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",
|
||||||
@@ -1034,6 +1354,24 @@
|
|||||||
"type": "smarttv"
|
"type": "smarttv"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc": "Amazon Fire TV",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 5.1.1; AFTT) AppleWebKit/537.36 (KHTML, like Gecko) Silk/86.3.20 like Chrome/86.0.4240.198 Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Amazon",
|
||||||
|
"model": "T",
|
||||||
|
"type": "smarttv"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Android TV",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 10; 2020/2021 UHD Android TV Build/QTG3.201102.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) version/4.0 Chrome/83.0.4103.101 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "undefined",
|
||||||
|
"model": "undefined",
|
||||||
|
"type": "smarttv"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc": "Gigaset Tablet",
|
"desc": "Gigaset Tablet",
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 4.2.2; Gigaset QV830 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
|
"ua": "Mozilla/5.0 (Linux; Android 4.2.2; Gigaset QV830 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
|
||||||
@@ -1043,24 +1381,6 @@
|
|||||||
"type": "tablet"
|
"type": "tablet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"desc": "Redmi Note 3",
|
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 6.0.1; Redmi Note 3 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.116 Mobile Safari/537.36",
|
|
||||||
"expect": {
|
|
||||||
"vendor": "Xiaomi",
|
|
||||||
"model": "Redmi Note 3",
|
|
||||||
"type": "mobile"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"desc": "MI PAD 2",
|
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 5.1; MI PAD 2 Build/LMY47I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/60.0.3112.107 Safari/537.36 [FB_IAB/FB4A;FBAV/137.0.0.24.91;]",
|
|
||||||
"expect": {
|
|
||||||
"vendor": "Xiaomi",
|
|
||||||
"model": "MI PAD 2",
|
|
||||||
"type": "tablet"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"desc": "HUAWEI MediaPad M3 Lite 10",
|
"desc": "HUAWEI MediaPad M3 Lite 10",
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 7.0; BAH-L09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Safari/537.36",
|
"ua": "Mozilla/5.0 (Linux; Android 7.0; BAH-L09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Safari/537.36",
|
||||||
@@ -1096,5 +1416,120 @@
|
|||||||
"model": "EML-L29",
|
"model": "EML-L29",
|
||||||
"type": "mobile"
|
"type": "mobile"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Huawei P20 Pro",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 9; CLT-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Huawei",
|
||||||
|
"model": "CLT-L29",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Huawei Mate 20 Pro",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 9; LYA-L09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Huawei",
|
||||||
|
"model": "LYA-L09",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Huawei Mate 20 Pro",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 9; LYA-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Huawei",
|
||||||
|
"model": "LYA-AL00",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Huawei Mate 20 Pro",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 9; LYA-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Huawei",
|
||||||
|
"model": "LYA-AL10",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Huawei Mate 20 Pro",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 9; LYA-L0C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Huawei",
|
||||||
|
"model": "LYA-L0C",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Huawei Mate 20 Pro",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 9; LYA-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Huawei",
|
||||||
|
"model": "LYA-L29",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Huawei P40",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 10; ANA-AN00 Build/HUAWEIANA-AN00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/11.26 SP-engine/2.22.0 baiduboxapp/11.26.0.10 (Baidu; P1 10) NABar/1.0",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Huawei",
|
||||||
|
"model": "ANA-AN00",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Huawei P40 Pro",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 10; ELS-AN00 Build/HUAWEIELS-AN00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Mobile Safari/537.36 mailapp/6.0.0",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Huawei",
|
||||||
|
"model": "ELS-AN00",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Huawei 30 Pro+",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 10; EBG-AN10 Build/HUAWEIEBG-AN10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.86 Mobile Safari/537.36 EdgA/42.0.0.2741",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Huawei",
|
||||||
|
"model": "EBG-AN10",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Huawei 30S",
|
||||||
|
"ua": "Mozilla/5.0 (Linux; Android 10; CDY-AN90 Build/HUAWEICDY-AN90; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Mobile Safari/537.36 mailapp/5.8.0",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Huawei",
|
||||||
|
"model": "CDY-AN90",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Huawei Enjoy10e",
|
||||||
|
"ua": "Dalvik/2.1.0 (Linux; U; Android 10; MED-AL00 Build/HUAWEIMED-AL00)",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "Huawei",
|
||||||
|
"model": "MED-AL00",
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "FaceBook Mobile App",
|
||||||
|
"ua": "[FBAN/FBIOS;FBAV/283.0.0.44.117;FBBV/238386386;FBDV/iPhone12,1;FBMD/iPhone;FBSN/iOS;FBSV/13.6.1;FBSS/2;FBID/phone;FBLC/en_US;FBOP/5;FBRV/240127608]",
|
||||||
|
"expect": {
|
||||||
|
"type": "mobile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc": "Issue #454",
|
||||||
|
"ua": "Mosamzilla/5.0 (Windows; U; Win98; en-US; rv:1.7.5) Gecko/20050603 Netscape/8.0.2",
|
||||||
|
"expect": {
|
||||||
|
"vendor": "undefined",
|
||||||
|
"model": "undefined",
|
||||||
|
"type": "undefined"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -252,12 +252,21 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"desc" : "Nintendo",
|
"desc" : "Google Chromecast",
|
||||||
"ua" : "",
|
"ua" : "Mozilla/5.0 (X11; Linux aarch64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.81 Safari/537.36 CrKey/1.42.183786",
|
||||||
"expect" :
|
"expect" :
|
||||||
{
|
{
|
||||||
"name" : "",
|
"name" : "Chromecast",
|
||||||
"version" : ""
|
"version" : "1.42.183786"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Nintendo Switch",
|
||||||
|
"ua" : "Mozilla/5.0 (Nintendo Switch; WifiWebAuthApplet) AppleWebKit/606.4 (KHTML, like Gecko) NF/6.0.1.15.4 NintendoBrowser/5.1.0.20393",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "Nintendo",
|
||||||
|
"version" : "Switch"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -278,6 +287,42 @@
|
|||||||
"version" : "4"
|
"version" : "4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Xbox 360",
|
||||||
|
"ua" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; Xbox; Xbox 360) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "Xbox",
|
||||||
|
"version" : "360"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Xbox One",
|
||||||
|
"ua" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; Xbox; Xbox One; WebView/3.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19041",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "Xbox",
|
||||||
|
"version" : "One"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Xbox X",
|
||||||
|
"ua" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; Xbox; Xbox X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36 Edge/20.02",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "Xbox",
|
||||||
|
"version" : "X"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Xbox Series X",
|
||||||
|
"ua" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; Xbox; Xbox Series X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36 Edge/20.02 ",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"name" : "Xbox",
|
||||||
|
"version" : "Series X"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"desc" : "Mint",
|
"desc" : "Mint",
|
||||||
"ua" : "",
|
"ua" : "",
|
||||||
|
|||||||
Reference in New Issue
Block a user