ua-parser-js 0.7.13 → 0.7.17
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/bower.json +1 -1
- package/dist/ua-parser.min.js +2 -2
- package/dist/ua-parser.pack.js +2 -2
- package/package.js +1 -1
- package/package.json +9 -5
- package/readme.md +29 -4
- package/src/ua-parser.js +159 -37
- package/test/browser-test.json +81 -11
- package/test/device-test.json +665 -382
- package/test/os-test.json +9 -0
- package/test/test.js +26 -4
- package/ua-parser-js.jquery.json +0 -32
package/src/ua-parser.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* UAParser.js v0.7.
|
2
|
+
* UAParser.js v0.7.17
|
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.17',
|
20
20
|
EMPTY = '',
|
21
21
|
UNKNOWN = '?',
|
22
22
|
FUNC_TYPE = 'function',
|
@@ -138,7 +138,7 @@
|
|
138
138
|
}
|
139
139
|
i += 2;
|
140
140
|
}
|
141
|
-
//console.log(this);
|
141
|
+
// console.log(this);
|
142
142
|
//return this;
|
143
143
|
},
|
144
144
|
|
@@ -270,10 +270,7 @@
|
|
270
270
|
/(puffin)\/([\w\.]+)/i // Puffin
|
271
271
|
], [[NAME, 'Puffin'], VERSION], [
|
272
272
|
|
273
|
-
/(
|
274
|
-
/ucweb.+(ucbrowser)[\/\s]?([\w\.]+)/i,
|
275
|
-
/juc.+(ucweb)[\/\s]?([\w\.]+)/i,
|
276
|
-
/(ucbrowser)\/([\w\.]+)/i
|
273
|
+
/((?:[\s\/])uc?\s?browser|(?:juc.+)ucweb)[\/\s]?([\w\.]+)/i
|
277
274
|
// UCBrowser
|
278
275
|
], [[NAME, 'UCBrowser'], VERSION], [
|
279
276
|
|
@@ -283,6 +280,9 @@
|
|
283
280
|
/(micromessenger)\/([\w\.]+)/i // WeChat
|
284
281
|
], [[NAME, 'WeChat'], VERSION], [
|
285
282
|
|
283
|
+
/(QQ)\/([\d\.]+)/i // QQ, aka ShouQ
|
284
|
+
], [NAME, VERSION], [
|
285
|
+
|
286
286
|
/m?(qqbrowser)[\/\s]?([\w\.]+)/i // QQBrowser
|
287
287
|
], [NAME, VERSION], [
|
288
288
|
|
@@ -292,13 +292,15 @@
|
|
292
292
|
/;fbav\/([\w\.]+);/i // Facebook App for iOS & Android
|
293
293
|
], [VERSION, [NAME, 'Facebook']], [
|
294
294
|
|
295
|
-
/
|
295
|
+
/headlesschrome(?:\/([\w\.]+)|\s)/i // Chrome Headless
|
296
296
|
], [VERSION, [NAME, 'Chrome Headless']], [
|
297
297
|
|
298
298
|
/\swv\).+(chrome)\/([\w\.]+)/i // Chrome WebView
|
299
299
|
], [[NAME, /(.+)/, '$1 WebView'], VERSION], [
|
300
300
|
|
301
|
-
/
|
301
|
+
/((?:oculus|samsung)browser)\/([\w\.]+)/i
|
302
|
+
], [[NAME, /(.+(?:g|us))(.+)/, '$1 $2'], VERSION], [ // Oculus / Samsung Browser
|
303
|
+
|
302
304
|
/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i // Android Browser
|
303
305
|
], [VERSION, [NAME, 'Android Browser']], [
|
304
306
|
|
@@ -324,6 +326,9 @@
|
|
324
326
|
/version\/([\w\.]+).+?(mobile\s?safari|safari)/i // Safari & Safari Mobile
|
325
327
|
], [VERSION, NAME], [
|
326
328
|
|
329
|
+
/webkit.+?(gsa)\/([\w\.]+).+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Google Search Appliance on iOS
|
330
|
+
], [[NAME, 'GSA'], VERSION], [
|
331
|
+
|
327
332
|
/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
|
328
333
|
], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [
|
329
334
|
|
@@ -518,8 +523,8 @@
|
|
518
523
|
], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [
|
519
524
|
|
520
525
|
/(blackberry)[\s-]?(\w+)/i, // BlackBerry
|
521
|
-
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|
|
522
|
-
// BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/
|
526
|
+
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]+)*/i,
|
527
|
+
// BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
|
523
528
|
/(hp)\s([\w\s]+\w)/i, // HP iPAQ
|
524
529
|
/(asus)-?(\w+)/i // Asus
|
525
530
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
@@ -532,8 +537,8 @@
|
|
532
537
|
/(sony)\s(tablet\s[ps])\sbuild\//i, // Sony
|
533
538
|
/(sony)?(?:sgp.+)\sbuild\//i
|
534
539
|
], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [
|
535
|
-
/(
|
536
|
-
], [[VENDOR, 'Sony'], [
|
540
|
+
/android.+\s([c-g]\d{4}|so[-l]\w+)\sbuild\//i
|
541
|
+
], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [
|
537
542
|
|
538
543
|
/\s(ouya)\s/i, // Ouya
|
539
544
|
/(nintendo)\s([wids3u]+)/i // Nintendo
|
@@ -553,14 +558,15 @@
|
|
553
558
|
|
554
559
|
/(htc)[;_\s-]+([\w\s]+(?=\))|\w+)*/i, // HTC
|
555
560
|
/(zte)-(\w+)*/i, // ZTE
|
556
|
-
/(alcatel|geeksphone|
|
557
|
-
// Alcatel/GeeksPhone/
|
561
|
+
/(alcatel|geeksphone|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]+)*/i
|
562
|
+
// Alcatel/GeeksPhone/Lenovo/Nexian/Panasonic/Sony
|
558
563
|
], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
|
559
564
|
|
560
565
|
/(nexus\s9)/i // HTC Nexus 9
|
561
566
|
], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [
|
562
567
|
|
563
|
-
/(
|
568
|
+
/d\/huawei([\w\s-]+)[;\)]/i,
|
569
|
+
/(nexus\s6p)/i // Huawei
|
564
570
|
], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [
|
565
571
|
|
566
572
|
/(microsoft);\s(lumia[\s\w]+)/i // Microsoft Lumia
|
@@ -609,12 +615,15 @@
|
|
609
615
|
/android\s3\.[\s\w;-]{10}(a\d{3})/i // Acer
|
610
616
|
], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [
|
611
617
|
|
618
|
+
/android.+([vl]k\-?\d{3})\s+build/i // LG Tablet
|
619
|
+
], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [
|
612
620
|
/android\s3\.[\s\w;-]{10}(lg?)-([06cv9]{3,4})/i // LG Tablet
|
613
621
|
], [[VENDOR, 'LG'], MODEL, [TYPE, TABLET]], [
|
614
622
|
/(lg) netcast\.tv/i // LG SmartTV
|
615
623
|
], [VENDOR, MODEL, [TYPE, SMARTTV]], [
|
616
624
|
/(nexus\s[45])/i, // LG
|
617
|
-
/lg[e;\s\/-]+(\w+)*/i
|
625
|
+
/lg[e;\s\/-]+(\w+)*/i,
|
626
|
+
/android.+lg(\-?[\d\w]+)\s+build/i
|
618
627
|
], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [
|
619
628
|
|
620
629
|
/android.+(ideatab[a-z0-9\-\s]+)/i // Lenovo
|
@@ -643,17 +652,90 @@
|
|
643
652
|
|
644
653
|
/android.+(\w+)\s+build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
645
654
|
/android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i, // Xiaomi Hongmi
|
646
|
-
/android.+(mi[\s\-_]*(?:one|one[\s_]plus|note lte)?[\s_]*(?:\d\w)?)\s+build/i // Xiaomi Mi
|
655
|
+
/android.+(mi[\s\-_]*(?:one|one[\s_]plus|note lte)?[\s_]*(?:\d\w)?)\s+build/i, // Xiaomi Mi
|
656
|
+
/android.+(redmi[\s\-_]*(?:note)?(?:[\s_]*[\w\s]+)?)\s+build/i // Redmi Phones
|
647
657
|
], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [
|
658
|
+
/android.+(mi[\s\-_]*(?:pad)?(?:[\s_]*[\w\s]+)?)\s+build/i // Mi Pad tablets
|
659
|
+
],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [
|
660
|
+
/android.+;\s(m[1-5]\snote)\sbuild/i // Meizu Tablet
|
661
|
+
], [MODEL, [VENDOR, 'Meizu'], [TYPE, TABLET]], [
|
648
662
|
|
649
663
|
/android.+a000(1)\s+build/i // OnePlus
|
650
664
|
], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
|
651
665
|
|
652
|
-
|
666
|
+
/android.+[;\/]\s*(RCT[\d\w]+)\s+build/i // RCA Tablets
|
667
|
+
], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [
|
668
|
+
|
669
|
+
/android.+[;\/]\s*(Venue[\d\s]*)\s+build/i // Dell Venue Tablets
|
670
|
+
], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [
|
671
|
+
|
672
|
+
/android.+[;\/]\s*(Q[T|M][\d\w]+)\s+build/i // Verizon Tablet
|
673
|
+
], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [
|
674
|
+
|
675
|
+
/android.+[;\/]\s+(Barnes[&\s]+Noble\s+|BN[RT])(V?.*)\s+build/i // Barnes & Noble Tablet
|
676
|
+
], [[VENDOR, 'Barnes & Noble'], MODEL, [TYPE, TABLET]], [
|
677
|
+
|
678
|
+
/android.+[;\/]\s+(TM\d{3}.*\b)\s+build/i // Barnes & Noble Tablet
|
679
|
+
], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [
|
680
|
+
|
681
|
+
/android.+[;\/]\s*(zte)?.+(k\d{2})\s+build/i // ZTE K Series Tablet
|
682
|
+
], [[VENDOR, 'ZTE'], MODEL, [TYPE, TABLET]], [
|
683
|
+
|
684
|
+
/android.+[;\/]\s*(gen\d{3})\s+build.*49h/i // Swiss GEN Mobile
|
685
|
+
], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [
|
686
|
+
|
687
|
+
/android.+[;\/]\s*(zur\d{3})\s+build/i // Swiss ZUR Tablet
|
688
|
+
], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [
|
689
|
+
|
690
|
+
/android.+[;\/]\s*((Zeki)?TB.*\b)\s+build/i // Zeki Tablets
|
691
|
+
], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
|
692
|
+
|
693
|
+
/(android).+[;\/]\s+([YR]\d{2}x?.*)\s+build/i,
|
694
|
+
/android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(.+)\s+build/i // Dragon Touch Tablet
|
695
|
+
], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [
|
696
|
+
|
697
|
+
/android.+[;\/]\s*(NS-?.+)\s+build/i // Insignia Tablets
|
698
|
+
], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [
|
699
|
+
|
700
|
+
/android.+[;\/]\s*((NX|Next)-?.+)\s+build/i // NextBook Tablets
|
701
|
+
], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [
|
702
|
+
|
703
|
+
/android.+[;\/]\s*(Xtreme\_?)?(V(1[045]|2[015]|30|40|60|7[05]|90))\s+build/i
|
704
|
+
], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones
|
705
|
+
|
706
|
+
/android.+[;\/]\s*(LVTEL\-?)?(V1[12])\s+build/i // LvTel Phones
|
707
|
+
], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [
|
708
|
+
|
709
|
+
/android.+[;\/]\s*(V(100MD|700NA|7011|917G).*\b)\s+build/i // Envizen Tablets
|
710
|
+
], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [
|
711
|
+
|
712
|
+
/android.+[;\/]\s*(Le[\s\-]+Pan)[\s\-]+(.*\b)\s+build/i // Le Pan Tablets
|
713
|
+
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
714
|
+
|
715
|
+
/android.+[;\/]\s*(Trio[\s\-]*.*)\s+build/i // MachSpeed Tablets
|
716
|
+
], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [
|
717
|
+
|
718
|
+
/android.+[;\/]\s*(Trinity)[\-\s]*(T\d{3})\s+build/i // Trinity Tablets
|
719
|
+
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
720
|
+
|
721
|
+
/android.+[;\/]\s*TU_(1491)\s+build/i // Rotor Tablets
|
722
|
+
], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [
|
723
|
+
|
724
|
+
/android.+(KS(.+))\s+build/i // Amazon Kindle Tablets
|
725
|
+
], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
726
|
+
|
727
|
+
/android.+(Gigaset)[\s\-]+(Q.+)\s+build/i // Gigaset Tablets
|
728
|
+
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
729
|
+
|
730
|
+
/\s(tablet|tab)[;\/]/i, // Unidentifiable Tablet
|
653
731
|
/\s(mobile)(?:[;\/]|\ssafari)/i // Unidentifiable Mobile
|
654
|
-
], [[TYPE, util.lowerize], VENDOR, MODEL]
|
732
|
+
], [[TYPE, util.lowerize], VENDOR, MODEL], [
|
733
|
+
|
734
|
+
/(android.+)[;\/].+build/i // Generic Android Device
|
735
|
+
], [MODEL, [VENDOR, 'Generic']]
|
655
736
|
|
656
|
-
|
737
|
+
|
738
|
+
/*//////////////////////////
|
657
739
|
// TODO: move to string map
|
658
740
|
////////////////////////////
|
659
741
|
|
@@ -775,8 +857,9 @@
|
|
775
857
|
/(haiku)\s(\w+)/i // Haiku
|
776
858
|
], [NAME, VERSION],[
|
777
859
|
|
778
|
-
/
|
779
|
-
]
|
860
|
+
/cfnetwork\/.+darwin/i,
|
861
|
+
/ip[honead]+(?:.*os\s([\w]+)\slike\smac|;\sopera)/i // iOS
|
862
|
+
], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
|
780
863
|
|
781
864
|
/(mac\sos\sx)\s?([\w\s\.]+\w)*/i,
|
782
865
|
/(macintosh|mac(?=_powerpc)\s)/i // Mac OS
|
@@ -796,7 +879,7 @@
|
|
796
879
|
/////////////////
|
797
880
|
// Constructor
|
798
881
|
////////////////
|
799
|
-
|
882
|
+
/*
|
800
883
|
var Browser = function (name, version) {
|
801
884
|
this[NAME] = name;
|
802
885
|
this[VERSION] = version;
|
@@ -811,39 +894,49 @@
|
|
811
894
|
};
|
812
895
|
var Engine = Browser;
|
813
896
|
var OS = Browser;
|
814
|
-
|
897
|
+
*/
|
815
898
|
var UAParser = function (uastring, extensions) {
|
816
899
|
|
900
|
+
if (typeof uastring === 'object') {
|
901
|
+
extensions = uastring;
|
902
|
+
uastring = undefined;
|
903
|
+
}
|
904
|
+
|
817
905
|
if (!(this instanceof UAParser)) {
|
818
906
|
return new UAParser(uastring, extensions).getResult();
|
819
907
|
}
|
820
908
|
|
821
909
|
var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
|
822
910
|
var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;
|
823
|
-
var browser = new Browser();
|
824
|
-
var cpu = new CPU();
|
825
|
-
var device = new Device();
|
826
|
-
var engine = new Engine();
|
827
|
-
var os = new OS();
|
911
|
+
//var browser = new Browser();
|
912
|
+
//var cpu = new CPU();
|
913
|
+
//var device = new Device();
|
914
|
+
//var engine = new Engine();
|
915
|
+
//var os = new OS();
|
828
916
|
|
829
917
|
this.getBrowser = function () {
|
918
|
+
var browser = { name: undefined, version: undefined };
|
830
919
|
mapper.rgx.call(browser, ua, rgxmap.browser);
|
831
920
|
browser.major = util.major(browser.version); // deprecated
|
832
921
|
return browser;
|
833
922
|
};
|
834
923
|
this.getCPU = function () {
|
924
|
+
var cpu = { architecture: undefined };
|
835
925
|
mapper.rgx.call(cpu, ua, rgxmap.cpu);
|
836
926
|
return cpu;
|
837
927
|
};
|
838
928
|
this.getDevice = function () {
|
929
|
+
var device = { vendor: undefined, model: undefined, type: undefined };
|
839
930
|
mapper.rgx.call(device, ua, rgxmap.device);
|
840
931
|
return device;
|
841
932
|
};
|
842
933
|
this.getEngine = function () {
|
934
|
+
var engine = { name: undefined, version: undefined };
|
843
935
|
mapper.rgx.call(engine, ua, rgxmap.engine);
|
844
936
|
return engine;
|
845
937
|
};
|
846
938
|
this.getOS = function () {
|
939
|
+
var os = { name: undefined, version: undefined };
|
847
940
|
mapper.rgx.call(os, ua, rgxmap.os);
|
848
941
|
return os;
|
849
942
|
};
|
@@ -862,11 +955,11 @@
|
|
862
955
|
};
|
863
956
|
this.setUA = function (uastring) {
|
864
957
|
ua = uastring;
|
865
|
-
browser = new Browser();
|
866
|
-
cpu = new CPU();
|
867
|
-
device = new Device();
|
868
|
-
engine = new Engine();
|
869
|
-
os = new OS();
|
958
|
+
//browser = new Browser();
|
959
|
+
//cpu = new CPU();
|
960
|
+
//device = new Device();
|
961
|
+
//engine = new Engine();
|
962
|
+
//os = new OS();
|
870
963
|
return this;
|
871
964
|
};
|
872
965
|
return this;
|
@@ -913,6 +1006,35 @@
|
|
913
1006
|
if (typeof module !== UNDEF_TYPE && module.exports) {
|
914
1007
|
exports = module.exports = UAParser;
|
915
1008
|
}
|
1009
|
+
// TODO: test!!!!!!!!
|
1010
|
+
/*
|
1011
|
+
if (require && require.main === module && process) {
|
1012
|
+
// cli
|
1013
|
+
var jsonize = function (arr) {
|
1014
|
+
var res = [];
|
1015
|
+
for (var i in arr) {
|
1016
|
+
res.push(new UAParser(arr[i]).getResult());
|
1017
|
+
}
|
1018
|
+
process.stdout.write(JSON.stringify(res, null, 2) + '\n');
|
1019
|
+
};
|
1020
|
+
if (process.stdin.isTTY) {
|
1021
|
+
// via args
|
1022
|
+
jsonize(process.argv.slice(2));
|
1023
|
+
} else {
|
1024
|
+
// via pipe
|
1025
|
+
var str = '';
|
1026
|
+
process.stdin.on('readable', function() {
|
1027
|
+
var read = process.stdin.read();
|
1028
|
+
if (read !== null) {
|
1029
|
+
str += read;
|
1030
|
+
}
|
1031
|
+
});
|
1032
|
+
process.stdin.on('end', function () {
|
1033
|
+
jsonize(str.replace(/\n$/, '').split('\n'));
|
1034
|
+
});
|
1035
|
+
}
|
1036
|
+
}
|
1037
|
+
*/
|
916
1038
|
exports.UAParser = UAParser;
|
917
1039
|
} else {
|
918
1040
|
// requirejs env (optional)
|
@@ -920,7 +1042,7 @@
|
|
920
1042
|
define(function () {
|
921
1043
|
return UAParser;
|
922
1044
|
});
|
923
|
-
} else {
|
1045
|
+
} else if (window) {
|
924
1046
|
// browser env
|
925
1047
|
window.UAParser = UAParser;
|
926
1048
|
}
|
@@ -931,7 +1053,7 @@
|
|
931
1053
|
// In AMD env the global scope should be kept clean, but jQuery is an exception.
|
932
1054
|
// jQuery always exports to global scope, unless jQuery.noConflict(true) is used,
|
933
1055
|
// and we should catch that.
|
934
|
-
var $ = window.jQuery || window.Zepto;
|
1056
|
+
var $ = window && (window.jQuery || window.Zepto);
|
935
1057
|
if (typeof $ !== UNDEF_TYPE) {
|
936
1058
|
var parser = new UAParser();
|
937
1059
|
$.ua = parser.getResult();
|
package/test/browser-test.json
CHANGED
@@ -1,14 +1,4 @@
|
|
1
1
|
[
|
2
|
-
{
|
3
|
-
"desc" : "Chrome Headless",
|
4
|
-
"ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome Safari/537.36",
|
5
|
-
"expect" :
|
6
|
-
{
|
7
|
-
"name" : "Chrome Headless",
|
8
|
-
"version" : "HeadlessChrome",
|
9
|
-
"major" : ""
|
10
|
-
}
|
11
|
-
},
|
12
2
|
{
|
13
3
|
"desc" : "Android Browser on Galaxy Nexus",
|
14
4
|
"ua" : "Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
|
@@ -64,7 +54,7 @@
|
|
64
54
|
"ua" : "Mozilla/5.0 (Linux; Android 5.0.2; SAMSUNG SM-G925F Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/3.0 Chrome/38.0.2125.102 Mobile Safari/537.36",
|
65
55
|
"expect" :
|
66
56
|
{
|
67
|
-
"name" : "
|
57
|
+
"name" : "Samsung Browser",
|
68
58
|
"version" : "3.0",
|
69
59
|
"major" : "3"
|
70
60
|
}
|
@@ -149,6 +139,26 @@
|
|
149
139
|
"major" : "20"
|
150
140
|
}
|
151
141
|
},
|
142
|
+
{
|
143
|
+
"desc" : "Chrome Headless",
|
144
|
+
"ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome Safari/537.36",
|
145
|
+
"expect" :
|
146
|
+
{
|
147
|
+
"name" : "Chrome Headless",
|
148
|
+
"version" : "undefined",
|
149
|
+
"major" : "undefined"
|
150
|
+
}
|
151
|
+
},
|
152
|
+
{
|
153
|
+
"desc" : "Chrome Headless",
|
154
|
+
"ua" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/60.0.3112.113 Safari/537.36",
|
155
|
+
"expect" :
|
156
|
+
{
|
157
|
+
"name" : "Chrome Headless",
|
158
|
+
"version" : "60.0.3112.113",
|
159
|
+
"major" : "60"
|
160
|
+
}
|
161
|
+
},
|
152
162
|
{
|
153
163
|
"desc" : "Chrome WebView",
|
154
164
|
"ua" : "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36",
|
@@ -549,6 +559,16 @@
|
|
549
559
|
"major" : "7"
|
550
560
|
}
|
551
561
|
},
|
562
|
+
{
|
563
|
+
"desc" : "Oculus Browser",
|
564
|
+
"ua" : "Mozilla/5.0 (Linux; Android 7.0; SM-G920I Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/3.4.9 SamsungBrowser/4.0 Chrome/57.0.2987.146 Mobile VR Safari/537.36",
|
565
|
+
"expect" :
|
566
|
+
{
|
567
|
+
"name" : "Oculus Browser",
|
568
|
+
"version" : "3.4.9",
|
569
|
+
"major" : "3"
|
570
|
+
}
|
571
|
+
},
|
552
572
|
{
|
553
573
|
"desc" : "OmniWeb",
|
554
574
|
"ua" : "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v558.48",
|
@@ -719,6 +739,16 @@
|
|
719
739
|
"major" : "2"
|
720
740
|
}
|
721
741
|
},
|
742
|
+
{
|
743
|
+
"desc" : "Samsung Browser",
|
744
|
+
"ua" : "Mozilla/5.0 (Linux; Android 6.0.1; SAMSUNG-SM-G925A Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36",
|
745
|
+
"expect" :
|
746
|
+
{
|
747
|
+
"name" : "Samsung Browser",
|
748
|
+
"version" : "4.0",
|
749
|
+
"major" : "4"
|
750
|
+
}
|
751
|
+
},
|
722
752
|
{
|
723
753
|
"desc" : "SeaMonkey",
|
724
754
|
"ua" : "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1b4pre) Gecko/20090405 SeaMonkey/2.0b1pre",
|
@@ -779,6 +809,16 @@
|
|
779
809
|
"major" : "1"
|
780
810
|
}
|
781
811
|
},
|
812
|
+
{
|
813
|
+
"desc" : "UC Browser",
|
814
|
+
"ua" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 UBrowser/5.6.12860.7 Safari/537.36",
|
815
|
+
"expect" :
|
816
|
+
{
|
817
|
+
"name" : "UCBrowser",
|
818
|
+
"version" : "5.6.12860.7",
|
819
|
+
"major" : "5"
|
820
|
+
}
|
821
|
+
},
|
782
822
|
{
|
783
823
|
"desc" : "UC Browser",
|
784
824
|
"ua" : "Mozilla/5.0 (Linux; U; Android 6.0.1; en-US; Lenovo P2a42 Build/MMB29M) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/11.2.0.915 U3/0.8.0 Mobile Safari/534.30",
|
@@ -908,5 +948,35 @@
|
|
908
948
|
"version" : "1.1",
|
909
949
|
"major" : "1"
|
910
950
|
}
|
951
|
+
},
|
952
|
+
{
|
953
|
+
"desc" : "QQ on iOS",
|
954
|
+
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14A456 QQ/6.5.3.410 V1_IPH_SQ_6.5.3_1_APP_A Pixel/1080 Core/UIWebView NetType/WIFI Mem/26",
|
955
|
+
"expect" :
|
956
|
+
{
|
957
|
+
"name" : "QQ",
|
958
|
+
"version" : "6.5.3.410",
|
959
|
+
"major" : "6"
|
960
|
+
}
|
961
|
+
},
|
962
|
+
{
|
963
|
+
"desc" : "QQ on Android",
|
964
|
+
"ua" : "Mozilla/5.0 (Linux; Android 6.0; PRO 6 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.8 TBS/036824 Safari/537.36 V1_AND_SQ_6.5.8_422_YYB_D PA QQ/6.5.8.2910 NetType/WIFI WebP/0.3.0 Pixel/1080",
|
965
|
+
"expect" :
|
966
|
+
{
|
967
|
+
"name" : "QQ",
|
968
|
+
"version" : "6.5.8.2910",
|
969
|
+
"major" : "6"
|
970
|
+
}
|
971
|
+
},
|
972
|
+
{
|
973
|
+
"desc" : "GSA on iOS",
|
974
|
+
"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",
|
975
|
+
"expect" :
|
976
|
+
{
|
977
|
+
"name" : "GSA",
|
978
|
+
"version" : "30.1.161623614",
|
979
|
+
"major" : "30"
|
980
|
+
}
|
911
981
|
}
|
912
982
|
]
|