ua-parser-js 0.7.24 → 0.7.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ua-parser-js might be problematic. Click here for more details.
- package/.github/FUNDING.yml +12 -0
- package/.github/workflows/run-test.yml +17 -0
- package/.travis.yml +2 -0
- package/bower.json +1 -1
- package/changelog.md +3 -0
- package/dist/ua-parser.min.js +3 -3
- package/dist/ua-parser.pack.js +3 -3
- package/package.js +1 -1
- package/package.json +64 -9
- package/readme.md +76 -106
- package/src/ua-parser.js +398 -434
- package/test/browser-test.json +101 -1
- package/test/cpu-test.json +65 -1
- package/test/device-test.json +1151 -51
- package/test/engine-test.json +54 -0
- package/test/os-test.json +323 -116
- package/test/test.js +57 -11
- package/.npmignore +0 -28
package/src/ua-parser.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
* UAParser.js v0.7.
|
1
|
+
/*!@license
|
2
|
+
* UAParser.js v0.7.28
|
3
3
|
* Lightweight JavaScript-based User-Agent string parser
|
4
4
|
* https://github.com/faisalman/ua-parser-js
|
5
5
|
*
|
@@ -16,7 +16,7 @@
|
|
16
16
|
/////////////
|
17
17
|
|
18
18
|
|
19
|
-
var LIBVERSION = '0.7.
|
19
|
+
var LIBVERSION = '0.7.28',
|
20
20
|
EMPTY = '',
|
21
21
|
UNKNOWN = '?',
|
22
22
|
FUNC_TYPE = 'function',
|
@@ -35,7 +35,8 @@
|
|
35
35
|
TABLET = 'tablet',
|
36
36
|
SMARTTV = 'smarttv',
|
37
37
|
WEARABLE = 'wearable',
|
38
|
-
EMBEDDED = 'embedded'
|
38
|
+
EMBEDDED = 'embedded',
|
39
|
+
UA_MAX_LENGTH = 255;
|
39
40
|
|
40
41
|
|
41
42
|
///////////
|
@@ -56,11 +57,7 @@
|
|
56
57
|
return mergedRegexes;
|
57
58
|
},
|
58
59
|
has : function (str1, str2) {
|
59
|
-
|
60
|
-
return str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1;
|
61
|
-
} else {
|
62
|
-
return false;
|
63
|
-
}
|
60
|
+
return typeof str1 === STR_TYPE ? str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1 : false;
|
64
61
|
},
|
65
62
|
lowerize : function (str) {
|
66
63
|
return str.toLowerCase();
|
@@ -68,8 +65,9 @@
|
|
68
65
|
major : function (version) {
|
69
66
|
return typeof(version) === STR_TYPE ? version.replace(/[^\d\.]/g,'').split(".")[0] : undefined;
|
70
67
|
},
|
71
|
-
trim : function (str) {
|
72
|
-
|
68
|
+
trim : function (str, len) {
|
69
|
+
str = str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
|
70
|
+
return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);
|
73
71
|
}
|
74
72
|
};
|
75
73
|
|
@@ -160,7 +158,8 @@
|
|
160
158
|
var maps = {
|
161
159
|
|
162
160
|
browser : {
|
163
|
-
|
161
|
+
// Safari < 3.0
|
162
|
+
oldSafari : {
|
164
163
|
version : {
|
165
164
|
'1.0' : '/8',
|
166
165
|
'1.2' : '/1',
|
@@ -171,22 +170,16 @@
|
|
171
170
|
'2.0.4' : '/419',
|
172
171
|
'?' : '/'
|
173
172
|
}
|
174
|
-
}
|
175
|
-
},
|
176
|
-
|
177
|
-
device : {
|
178
|
-
amazon : {
|
179
|
-
model : {
|
180
|
-
'Fire Phone' : ['SD', 'KF']
|
181
|
-
}
|
182
173
|
},
|
183
|
-
|
184
|
-
|
185
|
-
'
|
186
|
-
|
187
|
-
|
188
|
-
'
|
189
|
-
'
|
174
|
+
oldEdge : {
|
175
|
+
version : {
|
176
|
+
'0.1' : '12.',
|
177
|
+
'21' : '13.',
|
178
|
+
'31' : '14.',
|
179
|
+
'39' : '15.',
|
180
|
+
'41' : '16.',
|
181
|
+
'42' : '17.',
|
182
|
+
'44' : '18.'
|
190
183
|
}
|
191
184
|
}
|
192
185
|
},
|
@@ -220,162 +213,110 @@
|
|
220
213
|
|
221
214
|
browser : [[
|
222
215
|
|
216
|
+
/\b(?:crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS
|
217
|
+
], [VERSION, [NAME, 'Chrome']], [
|
218
|
+
/edg(?:e|ios|a)?\/([\w\.]+)/i // Microsoft Edge
|
219
|
+
], [VERSION, [NAME, 'Edge']], [
|
220
|
+
// breaking change (reserved for next major release):
|
221
|
+
///edge\/([\w\.]+)/i // Old Edge (Trident)
|
222
|
+
//], [[VERSION, mapper.str, maps.browser.oldEdge.version], [NAME, 'Edge']], [
|
223
|
+
|
223
224
|
// Presto based
|
224
225
|
/(opera\smini)\/([\w\.-]+)/i, // Opera Mini
|
225
|
-
/(opera\s[mobiletab]{3,6}).+version\/([\w\.-]+)/i,
|
226
|
-
/(opera)
|
227
|
-
/(opera)[\/\s]+([\w\.]+)/i // Opera < 9.80
|
226
|
+
/(opera\s[mobiletab]{3,6})\b.+version\/([\w\.-]+)/i, // Opera Mobi/Tablet
|
227
|
+
/(opera)(?:.+version\/|[\/\s]+)([\w\.]+)/i, // Opera
|
228
228
|
], [NAME, VERSION], [
|
229
|
-
|
230
|
-
|
231
|
-
]
|
232
|
-
|
233
|
-
/\s(opr)\/([\w\.]+)/i // Opera Webkit
|
234
|
-
], [[NAME, 'Opera'], VERSION], [
|
229
|
+
/opios[\/\s]+([\w\.]+)/i // Opera mini on iphone >= 8.0
|
230
|
+
], [VERSION, [NAME, 'Opera Mini']], [
|
231
|
+
/\sopr\/([\w\.]+)/i // Opera Webkit
|
232
|
+
], [VERSION, [NAME, 'Opera']], [
|
235
233
|
|
236
234
|
// Mixed
|
237
235
|
/(kindle)\/([\w\.]+)/i, // Kindle
|
238
|
-
/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]*)/i,
|
239
|
-
// Lunascape/Maxthon/Netfront/Jasmine/Blazer
|
236
|
+
/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer
|
240
237
|
// Trident based
|
241
|
-
/(avant\s|iemobile|slim)(?:browser)?[\/\s]?([\w\.]*)/i,
|
242
|
-
|
243
|
-
/(bidubrowser|baidubrowser)[\/\s]?([\w\.]+)/i, // Baidu Browser
|
238
|
+
/(avant\s|iemobile|slim)(?:browser)?[\/\s]?([\w\.]*)/i, // Avant/IEMobile/SlimBrowser
|
239
|
+
/(ba?idubrowser)[\/\s]?([\w\.]+)/i, // Baidu Browser
|
244
240
|
/(?:ms|\()(ie)\s([\w\.]+)/i, // Internet Explorer
|
245
241
|
|
246
242
|
// Webkit/KHTML based
|
247
|
-
/(
|
248
|
-
|
249
|
-
|
243
|
+
/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\/([\w\.-]+)/i,
|
244
|
+
// Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
|
245
|
+
/(rekonq|puffin|brave|whale|qqbrowserlite|qq)\/([\w\.]+)/i, // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ
|
246
|
+
/(weibo)__([\d\.]+)/i // Weibo
|
250
247
|
], [NAME, VERSION], [
|
251
|
-
|
252
|
-
|
253
|
-
]
|
254
|
-
|
255
|
-
/(
|
256
|
-
], [[NAME, '
|
257
|
-
|
258
|
-
|
259
|
-
]
|
260
|
-
|
261
|
-
/
|
262
|
-
], [[NAME, 'Yandex']
|
263
|
-
|
264
|
-
/(
|
265
|
-
|
266
|
-
|
267
|
-
/
|
268
|
-
], [[NAME, '
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
/
|
274
|
-
], [[NAME, '
|
275
|
-
|
276
|
-
|
277
|
-
]
|
278
|
-
|
279
|
-
/(
|
280
|
-
], [[NAME, '
|
281
|
-
|
248
|
+
/(?:[\s\/]uc?\s?browser|(?:juc.+)ucweb)[\/\s]?([\w\.]+)/i // UCBrowser
|
249
|
+
], [VERSION, [NAME, 'UCBrowser']], [
|
250
|
+
/(?:windowswechat)?\sqbcore\/([\w\.]+)\b.*(?:windowswechat)?/i // WeChat Desktop for Windows Built-in Browser
|
251
|
+
], [VERSION, [NAME, 'WeChat(Win) Desktop']], [
|
252
|
+
/micromessenger\/([\w\.]+)/i // WeChat
|
253
|
+
], [VERSION, [NAME, 'WeChat']], [
|
254
|
+
/konqueror\/([\w\.]+)/i // Konqueror
|
255
|
+
], [VERSION, [NAME, 'Konqueror']], [
|
256
|
+
/trident.+rv[:\s]([\w\.]{1,9})\b.+like\sgecko/i // IE11
|
257
|
+
], [VERSION, [NAME, 'IE']], [
|
258
|
+
/yabrowser\/([\w\.]+)/i // Yandex
|
259
|
+
], [VERSION, [NAME, 'Yandex']], [
|
260
|
+
/(avast|avg)\/([\w\.]+)/i // Avast/AVG Secure Browser
|
261
|
+
], [[NAME, /(.+)/, '$1 Secure Browser'], VERSION], [
|
262
|
+
/focus\/([\w\.]+)/i // Firefox Focus
|
263
|
+
], [VERSION, [NAME, 'Firefox Focus']], [
|
264
|
+
/opt\/([\w\.]+)/i // Opera Touch
|
265
|
+
], [VERSION, [NAME, 'Opera Touch']], [
|
266
|
+
/coc_coc_browser\/([\w\.]+)/i // Coc Coc Browser
|
267
|
+
], [VERSION, [NAME, 'Coc Coc']], [
|
268
|
+
/dolfin\/([\w\.]+)/i // Dolphin
|
269
|
+
], [VERSION, [NAME, 'Dolphin']], [
|
270
|
+
/coast\/([\w\.]+)/i // Opera Coast
|
271
|
+
], [VERSION, [NAME, 'Opera Coast']],
|
272
|
+
[/xiaomi\/miuibrowser\/([\w\.]+)/i // MIUI Browser
|
273
|
+
], [VERSION, [NAME, 'MIUI Browser']], [
|
274
|
+
/fxios\/([\w\.-]+)/i // Firefox for iOS
|
275
|
+
], [VERSION, [NAME, 'Firefox']], [
|
276
|
+
/(qihu|qhbrowser|qihoobrowser|360browser)/i // 360
|
277
|
+
], [[NAME, '360 Browser']], [
|
278
|
+
/(oculus|samsung|sailfish)browser\/([\w\.]+)/i
|
279
|
+
], [[NAME, /(.+)/, '$1 Browser'], VERSION], [ // Oculus/Samsung/Sailfish Browser
|
282
280
|
/(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon
|
283
281
|
], [[NAME, /_/g, ' '], VERSION], [
|
284
|
-
|
285
|
-
/(
|
286
|
-
]
|
287
|
-
|
288
|
-
/(micromessenger)\/([\w\.]+)/i // WeChat
|
289
|
-
], [[NAME, 'WeChat'], VERSION], [
|
290
|
-
|
291
|
-
/(brave)\/([\w\.]+)/i // Brave browser
|
292
|
-
], [[NAME, 'Brave'], VERSION], [
|
293
|
-
|
294
|
-
/(whale)\/([\w\.]+)/i // Whale browser
|
295
|
-
], [[NAME, 'Whale'], VERSION], [
|
296
|
-
|
297
|
-
/(qqbrowserlite)\/([\w\.]+)/i // QQBrowserLite
|
298
|
-
], [NAME, VERSION], [
|
299
|
-
|
300
|
-
/(QQ)\/([\d\.]+)/i // QQ, aka ShouQ
|
282
|
+
/\s(electron)\/([\w\.]+)\ssafari/i, // Electron-based App
|
283
|
+
/(tesla)(?:\sqtcarbrowser|\/(20[12]\d\.[\w\.-]+))/i, // Tesla
|
284
|
+
/m?(qqbrowser|baiduboxapp|2345Explorer)[\/\s]?([\w\.]+)/i // QQBrowser/Baidu App/2345 Browser
|
301
285
|
], [NAME, VERSION], [
|
302
|
-
|
303
|
-
/m?(qqbrowser)[\/\s]?([\w\.]+)/i // QQBrowser
|
304
|
-
], [NAME, VERSION], [
|
305
|
-
|
306
|
-
/(baiduboxapp)[\/\s]?([\w\.]+)/i // Baidu App
|
307
|
-
], [NAME, VERSION], [
|
308
|
-
|
309
|
-
/(2345Explorer)[\/\s]?([\w\.]+)/i // 2345 Browser
|
310
|
-
], [NAME, VERSION], [
|
311
|
-
|
312
|
-
/(MetaSr)[\/\s]?([\w\.]+)/i // SouGouBrowser
|
313
|
-
], [NAME], [
|
314
|
-
|
286
|
+
/(MetaSr)[\/\s]?([\w\.]+)/i, // SouGouBrowser
|
315
287
|
/(LBBROWSER)/i // LieBao Browser
|
316
288
|
], [NAME], [
|
317
289
|
|
318
|
-
|
319
|
-
], [VERSION, [NAME, 'MIUI Browser']], [
|
320
|
-
|
290
|
+
// WebView
|
321
291
|
/;fbav\/([\w\.]+);/i // Facebook App for iOS & Android with version
|
322
292
|
], [VERSION, [NAME, 'Facebook']], [
|
323
|
-
|
324
293
|
/FBAN\/FBIOS|FB_IAB\/FB4A/i // Facebook App for iOS & Android without version
|
325
294
|
], [[NAME, 'Facebook']], [
|
326
|
-
|
327
295
|
/safari\s(line)\/([\w\.]+)/i, // Line App for iOS
|
328
|
-
|
296
|
+
/\b(line)\/([\w\.]+)\/iab/i, // Line App for Android
|
297
|
+
/(chromium|instagram)[\/\s]([\w\.-]+)/i // Chromium/Instagram
|
329
298
|
], [NAME, VERSION], [
|
299
|
+
/\bgsa\/([\w\.]+)\s.*safari\//i // Google Search Appliance on iOS
|
300
|
+
], [VERSION, [NAME, 'GSA']], [
|
330
301
|
|
331
302
|
/headlesschrome(?:\/([\w\.]+)|\s)/i // Chrome Headless
|
332
303
|
], [VERSION, [NAME, 'Chrome Headless']], [
|
333
304
|
|
334
305
|
/\swv\).+(chrome)\/([\w\.]+)/i // Chrome WebView
|
335
|
-
], [[NAME,
|
306
|
+
], [[NAME, 'Chrome WebView'], VERSION], [
|
336
307
|
|
337
|
-
/
|
338
|
-
], [[NAME, /(.+(?:g|us))(.+)/, '$1 $2'], VERSION], [ // Oculus / Samsung Browser
|
339
|
-
|
340
|
-
/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i // Android Browser
|
308
|
+
/droid.+\sversion\/([\w\.]+)\b.+(?:mobile\ssafari|safari)/i // Android Browser
|
341
309
|
], [VERSION, [NAME, 'Android Browser']], [
|
342
310
|
|
343
|
-
/(
|
344
|
-
], [[NAME, 'Coc Coc'], VERSION], [
|
345
|
-
|
346
|
-
/(sailfishbrowser)\/([\w\.]+)/i // Sailfish Browser
|
347
|
-
], [[NAME, 'Sailfish Browser'], VERSION], [
|
348
|
-
|
349
|
-
/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i
|
350
|
-
// Chrome/OmniWeb/Arora/Tizen/Nokia
|
311
|
+
/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia
|
351
312
|
], [NAME, VERSION], [
|
352
313
|
|
353
|
-
/(dolfin)\/([\w\.]+)/i // Dolphin
|
354
|
-
], [[NAME, 'Dolphin'], VERSION], [
|
355
|
-
|
356
|
-
/(qihu|qhbrowser|qihoobrowser|360browser)/i // 360
|
357
|
-
], [[NAME, '360 Browser']], [
|
358
|
-
|
359
|
-
/((?:android.+)crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS
|
360
|
-
], [[NAME, 'Chrome'], VERSION], [
|
361
|
-
|
362
|
-
/(coast)\/([\w\.]+)/i // Opera Coast
|
363
|
-
], [[NAME, 'Opera Coast'], VERSION], [
|
364
|
-
|
365
|
-
/fxios\/([\w\.-]+)/i // Firefox for iOS
|
366
|
-
], [VERSION, [NAME, 'Firefox']], [
|
367
|
-
|
368
314
|
/version\/([\w\.]+)\s.*mobile\/\w+\s(safari)/i // Mobile Safari
|
369
315
|
], [VERSION, [NAME, 'Mobile Safari']], [
|
370
|
-
|
371
316
|
/version\/([\w\.]+)\s.*(mobile\s?safari|safari)/i // Safari & Safari Mobile
|
372
317
|
], [VERSION, NAME], [
|
373
|
-
|
374
|
-
/webkit.+?(gsa)\/([\w\.]+)\s.*(mobile\s?safari|safari)(\/[\w\.]+)/i // Google Search Appliance on iOS
|
375
|
-
], [[NAME, 'GSA'], VERSION], [
|
376
|
-
|
377
318
|
/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
|
378
|
-
], [NAME, [VERSION, mapper.str, maps.browser.
|
319
|
+
], [NAME, [VERSION, mapper.str, maps.browser.oldSafari.version]], [
|
379
320
|
|
380
321
|
/(webkit|khtml)\/([\w\.]+)/i
|
381
322
|
], [NAME, VERSION], [
|
@@ -383,11 +324,13 @@
|
|
383
324
|
// Gecko based
|
384
325
|
/(navigator|netscape)\/([\w\.-]+)/i // Netscape
|
385
326
|
], [[NAME, 'Netscape'], VERSION], [
|
327
|
+
/ile\svr;\srv:([\w\.]+)\).+firefox/i // Firefox Reality
|
328
|
+
], [VERSION, [NAME, 'Firefox Reality']], [
|
329
|
+
/ekiohf.+(flow)\/([\w\.]+)/i, // Flow
|
386
330
|
/(swiftfox)/i, // Swiftfox
|
387
331
|
/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,
|
388
332
|
// IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
|
389
333
|
/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([\w\.-]+)$/i,
|
390
|
-
|
391
334
|
// Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
|
392
335
|
/(firefox)\/([\w\.]+)\s[\w\s\-]+\/[\w\.]+$/i, // Other Firefox-based
|
393
336
|
/(mozilla)\/([\w\.]+)\s.+rv\:.+gecko\/\d+/i, // Mozilla
|
@@ -404,15 +347,21 @@
|
|
404
347
|
|
405
348
|
cpu : [[
|
406
349
|
|
407
|
-
/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i // AMD64
|
350
|
+
/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i // AMD64 (x64)
|
408
351
|
], [[ARCHITECTURE, 'amd64']], [
|
409
352
|
|
410
353
|
/(ia32(?=;))/i // IA32 (quicktime)
|
411
354
|
], [[ARCHITECTURE, util.lowerize]], [
|
412
355
|
|
413
|
-
/((?:i[346]|x)86)[;\)]/i // IA32
|
356
|
+
/((?:i[346]|x)86)[;\)]/i // IA32 (x86)
|
414
357
|
], [[ARCHITECTURE, 'ia32']], [
|
415
358
|
|
359
|
+
/\b(aarch64|armv?8e?l?)\b/i // ARM64
|
360
|
+
], [[ARCHITECTURE, 'arm64']], [
|
361
|
+
|
362
|
+
/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i // ARMHF
|
363
|
+
], [[ARCHITECTURE, 'armhf']], [
|
364
|
+
|
416
365
|
// PocketPC mistakenly identified as PowerPC
|
417
366
|
/windows\s(ce|mobile);\sppc;/i
|
418
367
|
], [[ARCHITECTURE, 'arm']], [
|
@@ -423,277 +372,299 @@
|
|
423
372
|
/(sun4\w)[;\)]/i // SPARC
|
424
373
|
], [[ARCHITECTURE, 'sparc']], [
|
425
374
|
|
426
|
-
/((?:avr32|ia64(?=;))|68k(?=\))
|
375
|
+
/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?:64|(?=v(?:[1-7]|[5-7]1)l?|;|eabi))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i
|
427
376
|
// IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
|
428
377
|
], [[ARCHITECTURE, util.lowerize]]
|
429
378
|
],
|
430
379
|
|
431
380
|
device : [[
|
432
381
|
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
], [
|
441
|
-
|
442
|
-
|
443
|
-
/(
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
449
|
-
|
450
|
-
/(kf[A-z]+)(\sbuild\/|\)).+silk\//i // Kindle Fire HD
|
451
|
-
], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
452
|
-
/(sd|kf)[0349hijorstuw]+(\sbuild\/|\)).+silk\//i // Fire Phone
|
453
|
-
], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [
|
454
|
-
/android.+aft([\w])(\sbuild\/|\))/i // Fire TV
|
455
|
-
], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [
|
456
|
-
|
457
|
-
/\((ip[honed|\s\w*]+);.+(apple)/i // iPod/iPhone
|
458
|
-
], [MODEL, VENDOR, [TYPE, MOBILE]], [
|
459
|
-
/\((ip[honed|\s\w*]+);/i // iPod/iPhone
|
382
|
+
//////////////////////////
|
383
|
+
// MOBILES & TABLETS
|
384
|
+
// Ordered by popularity
|
385
|
+
/////////////////////////
|
386
|
+
|
387
|
+
// Samsung
|
388
|
+
/\b(sch-i[89]0\d|shw-m380s|sm-[pt]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus\s10)/i
|
389
|
+
], [MODEL, [VENDOR, 'Samsung'], [TYPE, TABLET]], [
|
390
|
+
/\b((?:s[cgp]h|gt|sm)-\w+|galaxy\snexus)/i,
|
391
|
+
/\ssamsung[\s-]([\w-]+)/i,
|
392
|
+
/sec-(sgh\w+)/i
|
393
|
+
], [MODEL, [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
394
|
+
|
395
|
+
// Apple
|
396
|
+
/\((ip(?:hone|od)[\s\w]*);/i // iPod/iPhone
|
460
397
|
], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [
|
398
|
+
/\((ipad);[\w\s\),;-]+apple/i, // iPad
|
399
|
+
/applecoremedia\/[\w\.]+\s\((ipad)/i,
|
400
|
+
/\b(ipad)\d\d?,\d\d?[;\]].+ios/i
|
401
|
+
], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [
|
461
402
|
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
/(
|
466
|
-
|
467
|
-
|
468
|
-
/\(bb10;\s(\w+)/i // BlackBerry 10
|
469
|
-
], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [
|
470
|
-
// Asus Tablets
|
471
|
-
/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone|p00c)/i
|
472
|
-
], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [
|
473
|
-
|
474
|
-
/(sony)\s(tablet\s[ps])\sbuild\//i, // Sony
|
475
|
-
/(sony)?(?:sgp.+)\sbuild\//i
|
476
|
-
], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [
|
477
|
-
/android.+\s([c-g]\d{4}|so[-l]\w+)(?=\sbuild\/|\).+chrome\/(?![1-6]{0,1}\d\.))/i
|
478
|
-
], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [
|
479
|
-
|
480
|
-
/\s(ouya)\s/i, // Ouya
|
481
|
-
/(nintendo)\s([wids3u]+)/i // Nintendo
|
482
|
-
], [VENDOR, MODEL, [TYPE, CONSOLE]], [
|
483
|
-
|
484
|
-
/android.+;\s(shield)\sbuild/i // Nvidia
|
485
|
-
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [
|
486
|
-
|
487
|
-
/(playstation\s[34portablevi]+)/i // Playstation
|
488
|
-
], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [
|
489
|
-
|
490
|
-
/(sprint\s(\w+))/i // Sprint Phones
|
491
|
-
], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [
|
492
|
-
|
493
|
-
/(htc)[;_\s-]{1,2}([\w\s]+(?=\)|\sbuild)|\w+)/i, // HTC
|
494
|
-
/(zte)-(\w*)/i, // ZTE
|
495
|
-
/(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i
|
496
|
-
// Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
497
|
-
], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
|
498
|
-
|
499
|
-
/(nexus\s9)/i // HTC Nexus 9
|
500
|
-
], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [
|
501
|
-
|
502
|
-
/d\/huawei([\w\s-]+)[;\)]/i, // Huawei
|
503
|
-
/android.+\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
|
504
|
-
|
403
|
+
// Huawei
|
404
|
+
/\b((?:agr|ags[23]|bah2?|sht?)-a?[lw]\d{2})/i,
|
405
|
+
], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [
|
406
|
+
/d\/huawei([\w\s-]+)[;\)]/i,
|
407
|
+
/\b(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?|ele-l\d\d)/i,
|
408
|
+
/\b(\w{2,4}-[atu][ln][01259][019])[;\)\s]/i
|
505
409
|
], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [
|
506
410
|
|
507
|
-
|
508
|
-
|
411
|
+
// Xiaomi
|
412
|
+
/\b(poco[\s\w]+)(?:\sbuild|\))/i, // Xiaomi POCO
|
413
|
+
/\b;\s(\w+)\sbuild\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
414
|
+
/\b(hm[\s\-_]?note?[\s_]?(?:\d\w)?)\sbuild/i, // Xiaomi Hongmi
|
415
|
+
/\b(redmi[\s\-_]?(?:note|k)?[\w\s_]+)(?:\sbuild|\))/i, // Xiaomi Redmi
|
416
|
+
/\b(mi[\s\-_]?(?:a\d|one|one[\s_]plus|note lte)?[\s_]?(?:\d?\w?)[\s_]?(?:plus)?)\sbuild/i // Xiaomi Mi
|
417
|
+
], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [
|
418
|
+
/\b(mi[\s\-_]?(?:pad)(?:[\w\s_]+))(?:\sbuild|\))/i // Mi Pad tablets
|
419
|
+
],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [
|
509
420
|
|
510
|
-
|
511
|
-
|
421
|
+
// OPPO
|
422
|
+
/;\s(\w+)\sbuild.+\soppo/i,
|
423
|
+
/\s(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007)\b/i
|
424
|
+
], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [
|
512
425
|
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
], [
|
426
|
+
// Vivo
|
427
|
+
/\svivo\s(\w+)(?:\sbuild|\))/i,
|
428
|
+
/\s(v[12]\d{3}\w?[at])(?:\sbuild|;)/i
|
429
|
+
], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [
|
430
|
+
|
431
|
+
// Realme
|
432
|
+
/\s(rmx[12]\d{3})(?:\sbuild|;)/i
|
433
|
+
], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [
|
517
434
|
|
518
|
-
|
519
|
-
/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)[\w\s]+build\//i,
|
520
|
-
|
521
|
-
/(
|
522
|
-
/(nexus\s6)/i
|
435
|
+
// Motorola
|
436
|
+
/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)\b[\w\s]+build\//i,
|
437
|
+
/\smot(?:orola)?[\s-](\w*)/i,
|
438
|
+
/((?:moto[\s\w\(\)]+|xt\d{3,4}|nexus\s6)(?=\sbuild|\)))/i
|
523
439
|
], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [
|
524
|
-
|
440
|
+
/\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i
|
525
441
|
], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [
|
526
442
|
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
/hbbtv.+maple;(\d+)/i
|
531
|
-
], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [
|
532
|
-
|
533
|
-
/\(dtv[\);].+(aquos)/i // Sharp
|
534
|
-
], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [
|
535
|
-
|
536
|
-
/android.+((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,
|
537
|
-
/((SM-T\w+))/i
|
538
|
-
], [[VENDOR, 'Samsung'], MODEL, [TYPE, TABLET]], [ // Samsung
|
539
|
-
/smart-tv.+(samsung)/i
|
540
|
-
], [VENDOR, [TYPE, SMARTTV], MODEL], [
|
541
|
-
/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i,
|
542
|
-
/(sam[sung]*)[\s-]*(\w+-?[\w-]*)/i,
|
543
|
-
/sec-((sgh\w+))/i
|
544
|
-
], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [
|
545
|
-
|
546
|
-
/sie-(\w*)/i // Siemens
|
547
|
-
], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [
|
548
|
-
|
549
|
-
/(maemo|nokia).*(n900|lumia\s\d+)/i, // Nokia
|
550
|
-
/(nokia)[\s_-]?([\w-]*)/i
|
551
|
-
], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [
|
552
|
-
|
553
|
-
/android[x\d\.\s;]+\s([ab][1-7]\-?[0178a]\d\d?)/i // Acer
|
554
|
-
], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [
|
555
|
-
|
556
|
-
/android.+([vl]k\-?\d{3})\s+build/i // LG Tablet
|
443
|
+
// LG
|
444
|
+
/((?=lg)?[vl]k\-?\d{3})\sbuild|\s3\.[\s\w;-]{10}lg?-([06cv9]{3,4})/i
|
557
445
|
], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [
|
558
|
-
/
|
559
|
-
|
560
|
-
/
|
561
|
-
/lg\snetcast\.tv-201\d/i
|
562
|
-
], [[VENDOR, 'LG'], MODEL, [TYPE, SMARTTV]], [
|
563
|
-
/(nexus\s[45])/i, // LG
|
564
|
-
/lg[e;\s\/-]+(\w*)/i,
|
565
|
-
/android.+lg(\-?[\d\w]+)\s+build/i
|
446
|
+
/(lm-?f100[nv]?|nexus\s[45])/i,
|
447
|
+
/lg[e;\s\/-]+((?!browser|netcast)\w+)/i,
|
448
|
+
/\blg(\-?[\d\w]+)\sbuild/i
|
566
449
|
], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [
|
567
450
|
|
568
|
-
|
569
|
-
|
570
|
-
/
|
451
|
+
// Lenovo
|
452
|
+
/(ideatab[\w\-\s]+)/i,
|
453
|
+
/lenovo\s?(s(?:5000|6000)(?:[\w-]+)|tab(?:[\s\w]+)|yt[\d\w-]{6}|tb[\d\w-]{6})/i // Lenovo tablets
|
571
454
|
], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [
|
572
|
-
/(lenovo)[_\s-]?([\w-]+)/i
|
573
|
-
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
574
455
|
|
575
|
-
|
576
|
-
|
456
|
+
// Nokia
|
457
|
+
/(?:maemo|nokia).*(n900|lumia\s\d+)/i,
|
458
|
+
/nokia[\s_-]?([\w\.-]*)/i
|
459
|
+
], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [
|
577
460
|
|
578
|
-
|
579
|
-
]
|
461
|
+
// Google
|
462
|
+
/droid.+;\s(pixel\sc)[\s)]/i // Google Pixel C
|
463
|
+
], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [
|
464
|
+
/droid.+;\s(pixel[\s\daxl]{0,6})(?:\sbuild|\))/i // Google Pixel
|
465
|
+
], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [
|
580
466
|
|
581
|
-
|
582
|
-
]
|
467
|
+
// Sony
|
468
|
+
/droid.+\s([c-g]\d{4}|so[-l]\w+|xq-a\w[4-7][12])(?=\sbuild\/|\).+chrome\/(?![1-6]{0,1}\d\.))/i
|
469
|
+
], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [
|
470
|
+
/sony\stablet\s[ps]\sbuild\//i,
|
471
|
+
/(?:sony)?sgp\w+(?:\sbuild\/|\))/i
|
472
|
+
], [[MODEL, 'Xperia Tablet'], [VENDOR, 'Sony'], [TYPE, TABLET]], [
|
473
|
+
|
474
|
+
// OnePlus
|
475
|
+
/\s(kb2005|in20[12]5|be20[12][59])\b/i,
|
476
|
+
/\ba000(1)\sbuild/i, // OnePlus
|
477
|
+
/\boneplus\s(a\d{4})[\s)]/i
|
478
|
+
], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
|
583
479
|
|
584
|
-
|
585
|
-
|
480
|
+
// Amazon
|
481
|
+
/(alexa)webm/i,
|
482
|
+
/(kf[a-z]{2}wi)(\sbuild\/|\))/i, // Kindle Fire without Silk
|
483
|
+
/(kf[a-z]+)(\sbuild\/|\)).+silk\//i // Kindle Fire HD
|
484
|
+
], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
485
|
+
/(sd|kf)[0349hijorstuw]+(\sbuild\/|\)).+silk\//i // Fire Phone
|
486
|
+
], [[MODEL, 'Fire Phone'], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [
|
586
487
|
|
587
|
-
|
588
|
-
|
488
|
+
// BlackBerry
|
489
|
+
/\((playbook);[\w\s\),;-]+(rim)/i // BlackBerry PlayBook
|
490
|
+
], [MODEL, VENDOR, [TYPE, TABLET]], [
|
491
|
+
/((?:bb[a-f]|st[hv])100-\d)/i,
|
492
|
+
/\(bb10;\s(\w+)/i // BlackBerry 10
|
493
|
+
], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [
|
589
494
|
|
590
|
-
|
591
|
-
|
495
|
+
// Asus
|
496
|
+
/(?:\b|asus_)(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus\s7|padfone|p00[cj])/i
|
497
|
+
], [MODEL, [VENDOR, 'ASUS'], [TYPE, TABLET]], [
|
498
|
+
/\s(z[es]6[027][01][km][ls]|zenfone\s\d\w?)\b/i
|
499
|
+
], [MODEL, [VENDOR, 'ASUS'], [TYPE, MOBILE]], [
|
592
500
|
|
593
|
-
|
594
|
-
|
501
|
+
// HTC
|
502
|
+
/(nexus\s9)/i // HTC Nexus 9
|
503
|
+
], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [
|
504
|
+
/(htc)[;_\s-]{1,2}([\w\s]+(?=\)|\sbuild)|\w+)/i, // HTC
|
595
505
|
|
596
|
-
|
597
|
-
/
|
598
|
-
/
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
]
|
603
|
-
|
604
|
-
|
605
|
-
|
506
|
+
// ZTE
|
507
|
+
/(zte)-(\w*)/i,
|
508
|
+
/(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
509
|
+
], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
|
510
|
+
|
511
|
+
// Acer
|
512
|
+
/droid[x\d\.\s;]+\s([ab][1-7]\-?[0178a]\d\d?)/i
|
513
|
+
], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [
|
514
|
+
|
515
|
+
// Meizu
|
516
|
+
/droid.+;\s(m[1-5]\snote)\sbuild/i,
|
517
|
+
/\bmz-([\w-]{2,})/i
|
606
518
|
], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [
|
607
|
-
/(mz)-([\w-]{2,})/i
|
608
|
-
], [[VENDOR, 'Meizu'], MODEL, [TYPE, MOBILE]], [
|
609
519
|
|
610
|
-
|
611
|
-
/
|
612
|
-
|
520
|
+
// MIXED
|
521
|
+
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]*)/i,
|
522
|
+
// BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
|
523
|
+
/(hp)\s([\w\s]+\w)/i, // HP iPAQ
|
524
|
+
/(asus)-?(\w+)/i, // Asus
|
525
|
+
/(microsoft);\s(lumia[\s\w]+)/i, // Microsoft Lumia
|
526
|
+
/(lenovo)[_\s-]?([\w-]+)/i, // Lenovo
|
527
|
+
/linux;.+(jolla);/i, // Jolla
|
528
|
+
/droid.+;\s(oppo)\s?([\w\s]+)\sbuild/i // OPPO
|
529
|
+
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
613
530
|
|
614
|
-
/
|
615
|
-
|
531
|
+
/(archos)\s(gamepad2?)/i, // Archos
|
532
|
+
/(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad
|
533
|
+
/(kindle)\/([\w\.]+)/i, // Kindle
|
534
|
+
/\s(nook)[\w\s]+build\/(\w+)/i, // Nook
|
535
|
+
/(dell)\s(strea[kpr\s\d]*[\dko])/i, // Dell Streak
|
536
|
+
/[;\/]\s?(le[\s\-]+pan)[\s\-]+(\w{1,9})\sbuild/i, // Le Pan Tablets
|
537
|
+
/[;\/]\s?(trinity)[\-\s]*(t\d{3})\sbuild/i, // Trinity Tablets
|
538
|
+
/\b(gigaset)[\s\-]+(q\w{1,9})\sbuild/i, // Gigaset Tablets
|
539
|
+
/\b(vodafone)\s([\w\s]+)(?:\)|\sbuild)/i // Vodafone
|
540
|
+
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
616
541
|
|
617
|
-
|
542
|
+
/\s(surface\sduo)\s/i // Surface Duo
|
543
|
+
], [MODEL, [VENDOR, 'Microsoft'], [TYPE, TABLET]], [
|
544
|
+
/droid\s[\d\.]+;\s(fp\du?)\sbuild/i
|
545
|
+
], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [
|
546
|
+
/\s(u304aa)\sbuild/i // AT&T
|
547
|
+
], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [
|
548
|
+
/sie-(\w*)/i // Siemens
|
549
|
+
], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [
|
550
|
+
/[;\/]\s?(rct\w+)\sbuild/i // RCA Tablets
|
551
|
+
], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [
|
552
|
+
/[;\/\s](venue[\d\s]{2,7})\sbuild/i // Dell Venue Tablets
|
618
553
|
], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [
|
619
|
-
|
620
|
-
/android.+[;\/]\s*(Q[T|M][\d\w]+)\s+build/i // Verizon Tablet
|
554
|
+
/[;\/]\s?(q(?:mv|ta)\w+)\sbuild/i // Verizon Tablet
|
621
555
|
], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
/android.+[;\/]\s+(TM\d{3}.*\b)\s+build/i // Barnes & Noble Tablet
|
556
|
+
/[;\/]\s(?:barnes[&\s]+noble\s|bn[rt])([\w\s\+]*)\sbuild/i // Barnes & Noble Tablet
|
557
|
+
], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [
|
558
|
+
/[;\/]\s(tm\d{3}\w+)\sbuild/i
|
627
559
|
], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [
|
628
|
-
|
629
|
-
/android.+;\s(k88)\sbuild/i // ZTE K Series Tablet
|
560
|
+
/;\s(k88)\sbuild/i // ZTE K Series Tablet
|
630
561
|
], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [
|
631
|
-
|
632
|
-
|
562
|
+
/;\s(nx\d{3}j)\sbuild/i // ZTE Nubia
|
563
|
+
], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [
|
564
|
+
/[;\/]\s?(gen\d{3})\sbuild.*49h/i // Swiss GEN Mobile
|
633
565
|
], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [
|
634
|
-
|
635
|
-
/android.+[;\/]\s*(zur\d{3})\s+build/i // Swiss ZUR Tablet
|
566
|
+
/[;\/]\s?(zur\d{3})\sbuild/i // Swiss ZUR Tablet
|
636
567
|
], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [
|
637
|
-
|
638
|
-
/android.+[;\/]\s*((Zeki)?TB.*\b)\s+build/i // Zeki Tablets
|
568
|
+
/[;\/]\s?((zeki)?tb.*\b)\sbuild/i // Zeki Tablets
|
639
569
|
], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
|
640
|
-
|
641
|
-
/
|
642
|
-
/android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(\w{5})\sbuild/i // Dragon Touch Tablet
|
570
|
+
/[;\/]\s([yr]\d{2})\sbuild/i,
|
571
|
+
/[;\/]\s(dragon[\-\s]+touch\s|dt)(\w{5})\sbuild/i // Dragon Touch Tablet
|
643
572
|
], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [
|
644
|
-
|
645
|
-
/android.+[;\/]\s*(NS-?\w{0,9})\sbuild/i // Insignia Tablets
|
573
|
+
/[;\/]\s?(ns-?\w{0,9})\sbuild/i // Insignia Tablets
|
646
574
|
], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [
|
647
|
-
|
648
|
-
/android.+[;\/]\s*((NX|Next)-?\w{0,9})\s+build/i // NextBook Tablets
|
575
|
+
/[;\/]\s?((nxa|Next)-?\w{0,9})\sbuild/i // NextBook Tablets
|
649
576
|
], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [
|
650
|
-
|
651
|
-
/android.+[;\/]\s*(Xtreme\_)?(V(1[045]|2[015]|30|40|60|7[05]|90))\s+build/i
|
577
|
+
/[;\/]\s?(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05]))\sbuild/i
|
652
578
|
], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones
|
653
|
-
|
654
|
-
/android.+[;\/]\s*(LVTEL\-)?(V1[12])\s+build/i // LvTel Phones
|
579
|
+
/[;\/]\s?(lvtel\-)?(v1[12])\sbuild/i // LvTel Phones
|
655
580
|
], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [
|
656
|
-
|
657
|
-
/android.+;\s(PH-1)\s/i
|
581
|
+
/;\s(ph-1)\s/i
|
658
582
|
], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [ // Essential PH-1
|
659
|
-
|
660
|
-
/android.+[;\/]\s*(V(100MD|700NA|7011|917G).*\b)\s+build/i // Envizen Tablets
|
583
|
+
/[;\/]\s?(v(100md|700na|7011|917g).*\b)\sbuild/i // Envizen Tablets
|
661
584
|
], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [
|
585
|
+
/[;\/]\s?(trio[\s\w\-\.]+)\sbuild/i // MachSpeed Tablets
|
586
|
+
], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [
|
587
|
+
/[;\/]\s?tu_(1491)\sbuild/i // Rotor Tablets
|
588
|
+
], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [
|
589
|
+
/(shield[\w\s]+)\sbuild/i // Nvidia Shield Tablets
|
590
|
+
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [
|
591
|
+
/(sprint)\s(\w+)/i // Sprint Phones
|
592
|
+
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
593
|
+
/(kin\.[onetw]{3})/i // Microsoft Kin
|
594
|
+
], [[MODEL, /\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [
|
595
|
+
/droid\s[\d\.]+;\s(cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i // Zebra
|
596
|
+
], [MODEL, [VENDOR, 'Zebra'], [TYPE, TABLET]], [
|
597
|
+
/droid\s[\d\.]+;\s(ec30|ps20|tc[2-8]\d[kx])\)/i
|
598
|
+
], [MODEL, [VENDOR, 'Zebra'], [TYPE, MOBILE]], [
|
662
599
|
|
663
|
-
|
664
|
-
|
600
|
+
///////////////////
|
601
|
+
// CONSOLES
|
602
|
+
///////////////////
|
665
603
|
|
666
|
-
|
667
|
-
|
604
|
+
/\s(ouya)\s/i, // Ouya
|
605
|
+
/(nintendo)\s([wids3utch]+)/i // Nintendo
|
606
|
+
], [VENDOR, MODEL, [TYPE, CONSOLE]], [
|
607
|
+
/droid.+;\s(shield)\sbuild/i // Nvidia
|
608
|
+
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [
|
609
|
+
/(playstation\s[345portablevi]+)/i // Playstation
|
610
|
+
], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [
|
611
|
+
/[\s\(;](xbox(?:\sone)?(?!;\sxbox))[\s\);]/i // Microsoft Xbox
|
612
|
+
], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [
|
668
613
|
|
669
|
-
|
670
|
-
|
614
|
+
///////////////////
|
615
|
+
// SMARTTVS
|
616
|
+
///////////////////
|
671
617
|
|
672
|
-
/
|
673
|
-
], [
|
618
|
+
/smart-tv.+(samsung)/i // Samsung
|
619
|
+
], [VENDOR, [TYPE, SMARTTV]], [
|
620
|
+
/hbbtv.+maple;(\d+)/i
|
621
|
+
], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [
|
622
|
+
/(?:linux;\snetcast.+smarttv|lg\snetcast\.tv-201\d)/i, // LG SmartTV
|
623
|
+
], [[VENDOR, 'LG'], [TYPE, SMARTTV]], [
|
624
|
+
/(apple)\s?tv/i // Apple TV
|
625
|
+
], [VENDOR, [MODEL, 'Apple TV'], [TYPE, SMARTTV]], [
|
626
|
+
/crkey/i // Google Chromecast
|
627
|
+
], [[MODEL, 'Chromecast'], [VENDOR, 'Google'], [TYPE, SMARTTV]], [
|
628
|
+
/droid.+aft([\w])(\sbuild\/|\))/i // Fire TV
|
629
|
+
], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [
|
630
|
+
/\(dtv[\);].+(aquos)/i // Sharp
|
631
|
+
], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [
|
632
|
+
/hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i // HbbTV devices
|
633
|
+
], [[VENDOR, util.trim], [MODEL, util.trim], [TYPE, SMARTTV]], [
|
634
|
+
/[\s\/\(](android\s|smart[-\s]?|opera\s)tv[;\)\s]/i // SmartTV from Unidentified Vendors
|
635
|
+
], [[TYPE, SMARTTV]], [
|
674
636
|
|
675
|
-
|
676
|
-
//
|
637
|
+
///////////////////
|
638
|
+
// WEARABLES
|
639
|
+
///////////////////
|
677
640
|
|
678
|
-
/
|
679
|
-
], [VENDOR, MODEL, [TYPE,
|
680
|
-
|
681
|
-
|
641
|
+
/((pebble))app\/[\d\.]+\s/i // Pebble
|
642
|
+
], [VENDOR, MODEL, [TYPE, WEARABLE]], [
|
643
|
+
/droid.+;\s(glass)\s\d/i // Google Glass
|
644
|
+
], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [
|
645
|
+
/droid\s[\d\.]+;\s(wt63?0{2,3})\)/i
|
646
|
+
], [MODEL, [VENDOR, 'Zebra'], [TYPE, WEARABLE]], [
|
647
|
+
|
648
|
+
///////////////////
|
649
|
+
// EMBEDDED
|
650
|
+
///////////////////
|
651
|
+
|
652
|
+
/(tesla)(?:\sqtcarbrowser|\/20[12]\d\.[\w\.-]+)/i // Tesla
|
653
|
+
], [VENDOR, [TYPE, EMBEDDED]], [
|
654
|
+
|
655
|
+
////////////////////
|
656
|
+
// MIXED (GENERIC)
|
657
|
+
///////////////////
|
658
|
+
|
659
|
+
/droid .+?; ([^;]+?)(?: build|\) applewebkit).+? mobile safari/i // Android Phones from Unidentified Vendors
|
682
660
|
], [MODEL, [TYPE, MOBILE]], [
|
683
|
-
|
684
|
-
/android .+?;\s([^;]+?)(?: build|\) applewebkit).+?(?! mobile) safari/i
|
661
|
+
/droid .+?;\s([^;]+?)(?: build|\) applewebkit).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors
|
685
662
|
], [MODEL, [TYPE, TABLET]], [
|
686
|
-
|
687
663
|
/\s(tablet|tab)[;\/]/i, // Unidentifiable Tablet
|
688
664
|
/\s(mobile)(?:[;\/]|\ssafari)/i // Unidentifiable Mobile
|
689
|
-
], [[TYPE, util.lowerize]
|
690
|
-
|
691
|
-
/[\s\/\(](smart-?tv)[;\)]/i // SmartTV
|
692
|
-
], [[TYPE, SMARTTV]], [
|
693
|
-
|
665
|
+
], [[TYPE, util.lowerize]], [
|
694
666
|
/(android[\w\.\s\-]{0,9});.+build/i // Generic Android Device
|
695
667
|
], [MODEL, [VENDOR, 'Generic']], [
|
696
|
-
|
697
668
|
/(phone)/i
|
698
669
|
], [[TYPE, MOBILE]]
|
699
670
|
],
|
@@ -707,90 +678,82 @@
|
|
707
678
|
], [VERSION, [NAME, 'Blink']], [
|
708
679
|
|
709
680
|
/(presto)\/([\w\.]+)/i, // Presto
|
710
|
-
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,
|
711
|
-
|
681
|
+
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna
|
682
|
+
/ekioh(flow)\/([\w\.]+)/i, // Flow
|
712
683
|
/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, // KHTML/Tasman/Links
|
713
684
|
/(icab)[\/\s]([23]\.[\d\.]+)/i // iCab
|
714
685
|
], [NAME, VERSION], [
|
715
686
|
|
716
|
-
/rv\:([\w\.]{1,9}).+(gecko)/i
|
687
|
+
/rv\:([\w\.]{1,9})\b.+(gecko)/i // Gecko
|
717
688
|
], [VERSION, NAME]
|
718
689
|
],
|
719
690
|
|
720
691
|
os : [[
|
721
692
|
|
722
|
-
//
|
723
|
-
/(xbox);\s+xbox\s([^\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)
|
724
|
-
|
725
|
-
// Windows based
|
693
|
+
// Windows
|
726
694
|
/microsoft\s(windows)\s(vista|xp)/i // Windows (iTunes)
|
727
695
|
], [NAME, VERSION], [
|
728
696
|
/(windows)\snt\s6\.2;\s(arm)/i, // Windows RT
|
729
697
|
/(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s\w]*)/i, // Windows Phone
|
730
|
-
/(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i
|
698
|
+
/(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)(?!.+xbox)/i
|
731
699
|
], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [
|
732
700
|
/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i
|
733
701
|
], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [
|
734
702
|
|
735
|
-
//
|
736
|
-
|
737
|
-
|
738
|
-
/
|
703
|
+
// iOS/macOS
|
704
|
+
/ip[honead]{2,4}\b(?:.*os\s([\w]+)\slike\smac|;\sopera)/i, // iOS
|
705
|
+
/cfnetwork\/.+darwin/i
|
706
|
+
], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
|
707
|
+
/(mac\sos\sx)\s?([\w\s\.]*)/i,
|
708
|
+
/(macintosh|mac(?=_powerpc)\s)(?!.+haiku)/i // Mac OS
|
709
|
+
], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [
|
710
|
+
|
711
|
+
// Mobile OSes // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS
|
712
|
+
/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|sailfish|contiki)[\/\s-]?([\w\.]*)/i,
|
713
|
+
/(blackberry)\w*\/([\w\.]*)/i, // Blackberry
|
739
714
|
/(tizen|kaios)[\/\s]([\w\.]+)/i, // Tizen/KaiOS
|
740
|
-
/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|sailfish|contiki)[\/\s-]?([\w\.]*)/i
|
741
|
-
// Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS
|
742
|
-
], [NAME, VERSION], [
|
743
|
-
/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]*)/i // Symbian
|
744
|
-
], [[NAME, 'Symbian'], VERSION], [
|
745
715
|
/\((series40);/i // Series 40
|
746
|
-
], [NAME], [
|
716
|
+
], [NAME, VERSION], [
|
717
|
+
/\(bb(10);/i // BlackBerry 10
|
718
|
+
], [VERSION, [NAME, 'BlackBerry']], [
|
719
|
+
/(?:symbian\s?os|symbos|s60(?=;)|series60)[\/\s-]?([\w\.]*)/i // Symbian
|
720
|
+
], [VERSION, [NAME, 'Symbian']], [
|
747
721
|
/mozilla.+\(mobile;.+gecko.+firefox/i // Firefox OS
|
748
|
-
], [[NAME, 'Firefox OS']
|
722
|
+
], [[NAME, 'Firefox OS']], [
|
723
|
+
/web0s;.+rt(tv)/i,
|
724
|
+
/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i // WebOS
|
725
|
+
], [VERSION, [NAME, 'webOS']], [
|
749
726
|
|
750
727
|
// Google Chromecast
|
751
728
|
/crkey\/([\d\.]+)/i // Google Chromecast
|
752
729
|
], [VERSION, [NAME, 'Chromecast']], [
|
730
|
+
/(cros)\s[\w]+\s([\w\.]+\w)/i // Chromium OS
|
731
|
+
], [[NAME, 'Chromium OS'], VERSION],[
|
753
732
|
|
754
733
|
// Console
|
755
|
-
/(nintendo|playstation)\s([
|
734
|
+
/(nintendo|playstation)\s([wids345portablevuch]+)/i, // Nintendo/Playstation
|
735
|
+
/(xbox);\s+xbox\s([^\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)
|
756
736
|
|
757
737
|
// GNU/Linux based
|
758
|
-
/(mint)[\/\s\(]?(\w*)/i,
|
738
|
+
/(mint)[\/\s\(\)]?(\w*)/i, // Mint
|
759
739
|
/(mageia|vectorlinux)[;\s]/i, // Mageia/VectorLinux
|
760
|
-
/(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|(?=\
|
740
|
+
/(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?=\slinux)|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus|raspbian)(?:\sgnu\/linux)?(?:\slinux)?[\/\s-]?(?!chrom|package)([\w\.-]*)/i,
|
761
741
|
// Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware
|
762
742
|
// Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus
|
763
743
|
/(hurd|linux)\s?([\w\.]*)/i, // Hurd/Linux
|
764
|
-
/(gnu)\s?([\w\.]*)/i
|
765
|
-
], [NAME, VERSION], [
|
766
|
-
|
767
|
-
/(cros)\s[\w]+\s([\w\.]+\w)/i // Chromium OS
|
768
|
-
], [[NAME, 'Chromium OS'], VERSION],[
|
769
|
-
|
770
|
-
// Solaris
|
771
|
-
/(sunos)\s?([\w\.\d]*)/i // Solaris
|
772
|
-
], [[NAME, 'Solaris'], VERSION], [
|
744
|
+
/(gnu)\s?([\w\.]*)/i, // GNU
|
773
745
|
|
774
746
|
// BSD based
|
775
|
-
/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]*)/i
|
776
|
-
], [NAME, VERSION],[
|
777
|
-
|
747
|
+
/\s([frentopc-]{0,4}bsd|dragonfly)\s?(?!amd|[ix346]{1,2}86)([\w\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly
|
778
748
|
/(haiku)\s(\w+)/i // Haiku
|
779
|
-
], [NAME, VERSION],[
|
780
|
-
|
781
|
-
/cfnetwork\/.+darwin/i,
|
782
|
-
/ip[honead]{2,4}(?:.*os\s([\w]+)\slike\smac|;\sopera)/i // iOS
|
783
|
-
], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
|
784
|
-
|
785
|
-
/(mac\sos\sx)\s?([\w\s\.]*)/i,
|
786
|
-
/(macintosh|mac(?=_powerpc)\s)/i // Mac OS
|
787
|
-
], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [
|
749
|
+
], [NAME, VERSION], [
|
788
750
|
|
789
751
|
// Other
|
752
|
+
/(sunos)\s?([\w\.\d]*)/i // Solaris
|
753
|
+
], [[NAME, 'Solaris'], VERSION], [
|
790
754
|
/((?:open)?solaris)[\/\s-]?([\w\.]*)/i, // Solaris
|
791
755
|
/(aix)\s((\d)(?=\.|\)|\s)[\w\.])*/i, // AIX
|
792
|
-
/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms|fuchsia)/i,
|
793
|
-
// Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia
|
756
|
+
/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms|fuchsia)/i, // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia
|
794
757
|
/(unix)\s?([\w\.]*)/i // UNIX
|
795
758
|
], [NAME, VERSION]
|
796
759
|
]
|
@@ -800,45 +763,45 @@
|
|
800
763
|
/////////////////
|
801
764
|
// Constructor
|
802
765
|
////////////////
|
803
|
-
var UAParser = function (
|
766
|
+
var UAParser = function (ua, extensions) {
|
804
767
|
|
805
|
-
if (typeof
|
806
|
-
extensions =
|
807
|
-
|
768
|
+
if (typeof ua === 'object') {
|
769
|
+
extensions = ua;
|
770
|
+
ua = undefined;
|
808
771
|
}
|
809
772
|
|
810
773
|
if (!(this instanceof UAParser)) {
|
811
|
-
return new UAParser(
|
774
|
+
return new UAParser(ua, extensions).getResult();
|
812
775
|
}
|
813
776
|
|
814
|
-
var
|
815
|
-
var
|
777
|
+
var _ua = ua || ((typeof window !== 'undefined' && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
|
778
|
+
var _rgxmap = extensions ? util.extend(regexes, extensions) : regexes;
|
816
779
|
|
817
780
|
this.getBrowser = function () {
|
818
|
-
var
|
819
|
-
mapper.rgx.call(
|
820
|
-
|
821
|
-
return
|
781
|
+
var _browser = { name: undefined, version: undefined };
|
782
|
+
mapper.rgx.call(_browser, _ua, _rgxmap.browser);
|
783
|
+
_browser.major = util.major(_browser.version); // deprecated
|
784
|
+
return _browser;
|
822
785
|
};
|
823
786
|
this.getCPU = function () {
|
824
|
-
var
|
825
|
-
mapper.rgx.call(
|
826
|
-
return
|
787
|
+
var _cpu = { architecture: undefined };
|
788
|
+
mapper.rgx.call(_cpu, _ua, _rgxmap.cpu);
|
789
|
+
return _cpu;
|
827
790
|
};
|
828
791
|
this.getDevice = function () {
|
829
|
-
var
|
830
|
-
mapper.rgx.call(
|
831
|
-
return
|
792
|
+
var _device = { vendor: undefined, model: undefined, type: undefined };
|
793
|
+
mapper.rgx.call(_device, _ua, _rgxmap.device);
|
794
|
+
return _device;
|
832
795
|
};
|
833
796
|
this.getEngine = function () {
|
834
|
-
var
|
835
|
-
mapper.rgx.call(
|
836
|
-
return
|
797
|
+
var _engine = { name: undefined, version: undefined };
|
798
|
+
mapper.rgx.call(_engine, _ua, _rgxmap.engine);
|
799
|
+
return _engine;
|
837
800
|
};
|
838
801
|
this.getOS = function () {
|
839
|
-
var
|
840
|
-
mapper.rgx.call(
|
841
|
-
return
|
802
|
+
var _os = { name: undefined, version: undefined };
|
803
|
+
mapper.rgx.call(_os, _ua, _rgxmap.os);
|
804
|
+
return _os;
|
842
805
|
};
|
843
806
|
this.getResult = function () {
|
844
807
|
return {
|
@@ -851,12 +814,13 @@
|
|
851
814
|
};
|
852
815
|
};
|
853
816
|
this.getUA = function () {
|
854
|
-
return
|
817
|
+
return _ua;
|
855
818
|
};
|
856
|
-
this.setUA = function (
|
857
|
-
|
819
|
+
this.setUA = function (ua) {
|
820
|
+
_ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? util.trim(ua, UA_MAX_LENGTH) : ua;
|
858
821
|
return this;
|
859
822
|
};
|
823
|
+
this.setUA(_ua);
|
860
824
|
return this;
|
861
825
|
};
|
862
826
|
|
@@ -907,7 +871,7 @@
|
|
907
871
|
define(function () {
|
908
872
|
return UAParser;
|
909
873
|
});
|
910
|
-
} else if (window) {
|
874
|
+
} else if (typeof window !== 'undefined') {
|
911
875
|
// browser env
|
912
876
|
window.UAParser = UAParser;
|
913
877
|
}
|
@@ -918,7 +882,7 @@
|
|
918
882
|
// In AMD env the global scope should be kept clean, but jQuery is an exception.
|
919
883
|
// jQuery always exports to global scope, unless jQuery.noConflict(true) is used,
|
920
884
|
// and we should catch that.
|
921
|
-
var $ = window && (window.jQuery || window.Zepto);
|
885
|
+
var $ = typeof window !== 'undefined' && (window.jQuery || window.Zepto);
|
922
886
|
if ($ && !$.ua) {
|
923
887
|
var parser = new UAParser();
|
924
888
|
$.ua = parser.getResult();
|