|
@@ -2,57 +2,67 @@
|
|
|
* User-Agent parser
|
|
|
* @author Gerald <gera2ld@163.com>
|
|
|
*/
|
|
|
-!function(window, undefined){
|
|
|
-
|
|
|
- var mapper={
|
|
|
- reg:function(s,maps){
|
|
|
- return s.replace(maps[0],maps[1]);
|
|
|
+!function (window, undefined) {
|
|
|
+ var mapper = {
|
|
|
+ reg: function (str, maps) {
|
|
|
+ return str.replace(maps[0], maps[1]);
|
|
|
},
|
|
|
- str:function(s,maps){
|
|
|
- return (s in maps)?maps[s]:maps[''];
|
|
|
+ str: function (str, maps) {
|
|
|
+ return (str in maps) ? maps[str] : maps[''];
|
|
|
},
|
|
|
- ieVer:function(s){
|
|
|
- return parseInt(s)+4;
|
|
|
+ ieVer: function (str) {
|
|
|
+ return parseInt(str, 10) + 4;
|
|
|
},
|
|
|
};
|
|
|
- var maps={
|
|
|
- winVer:{
|
|
|
- '4.90':'ME',
|
|
|
- 'NT3.51':'NT 3.11',
|
|
|
- 'NT4.0':'NT 4.0',
|
|
|
- 'NT 5.0':'2000',
|
|
|
- 'NT 5.1':'XP',
|
|
|
- 'NT 5.2':'XP',
|
|
|
- 'NT 6.0':'Vista',
|
|
|
- 'NT 6.1':'7',
|
|
|
- 'NT 6.2':'8',
|
|
|
- 'NT 6.3':'8.1',
|
|
|
- 'NT 6.4':'10',
|
|
|
- 'NT 10.0':'10',
|
|
|
- 'ARM':'RT',
|
|
|
- '':'山寨版',
|
|
|
+ var maps = {
|
|
|
+ winVer: {
|
|
|
+ '4.90': 'ME',
|
|
|
+ 'NT3.51': 'NT 3.11',
|
|
|
+ 'NT4.0': 'NT 4.0',
|
|
|
+ 'NT 5.0': '2000',
|
|
|
+ 'NT 5.1': 'XP',
|
|
|
+ 'NT 5.2': 'XP',
|
|
|
+ 'NT 6.0': 'Vista',
|
|
|
+ 'NT 6.1': '7',
|
|
|
+ 'NT 6.2': '8',
|
|
|
+ 'NT 6.3': '8.1',
|
|
|
+ 'NT 6.4': '10',
|
|
|
+ 'NT 10.0': '10',
|
|
|
+ 'ARM': 'RT',
|
|
|
+ '': '山寨版',
|
|
|
},
|
|
|
};
|
|
|
- var NAME='name',VERSION='version',CLASS='cls';
|
|
|
- var CLS_WIN=[CLASS,'windows'];
|
|
|
- var rules={
|
|
|
- os:[
|
|
|
+ var NAME = 'name';
|
|
|
+ var VERSION = 'version';
|
|
|
+ var CLASS = 'cls';
|
|
|
+ var CLS_WIN = [CLASS, 'windows'];
|
|
|
+ var rules = {
|
|
|
+ os: [
|
|
|
// Windows
|
|
|
- [/(Windows Phone)(?: OS)? ?([^; )]*)/i,[NAME,VERSION,CLS_WIN]],
|
|
|
- [/(Windows) ([^;)]*)/i,[NAME,[VERSION,mapper.str,maps.winVer],CLS_WIN]],
|
|
|
- [/\b(Windows)\b/i,[NAME,[VERSION,'超级山寨版'],CLS_WIN]],
|
|
|
+ [/(Windows Phone)(?: OS)? ?([^; )]*)/i,
|
|
|
+ [NAME, VERSION, CLS_WIN]],
|
|
|
+ [/(Windows) ([^;)]*)/i,
|
|
|
+ [NAME, [VERSION, mapper.str, maps.winVer], CLS_WIN]],
|
|
|
+ [/\b(Windows)\b/i,
|
|
|
+ [NAME, [VERSION, '超级山寨版'], CLS_WIN]],
|
|
|
// Mac
|
|
|
- [/(iPhone|iPod|iPad|Mac OS X)/i,[NAME,[CLASS,'mac']]],
|
|
|
+ [/(iPhone|iPod|iPad|Mac OS X)/i,
|
|
|
+ [NAME, [CLASS, 'mac']]],
|
|
|
// Android
|
|
|
- [/(Android) ?([^; )]*)/i,[NAME,VERSION,[CLASS,'android']]],
|
|
|
+ [/(Android) ?([^; )]*)/i,
|
|
|
+ [NAME, VERSION, [CLASS, 'android']]],
|
|
|
// Linux
|
|
|
- [/(Linux)/i,[NAME,[CLASS,'linux']]],
|
|
|
- [/()/i,[[NAME,'山寨操作系统'],[CLASS,'other']]],
|
|
|
+ [/(Linux)/i,
|
|
|
+ [NAME, [CLASS, 'linux']]],
|
|
|
+ [/()/i,
|
|
|
+ [[NAME, '山寨操作系统'], [CLASS, 'other']]],
|
|
|
],
|
|
|
- browser:[
|
|
|
+ browser: [
|
|
|
// Opera
|
|
|
- [/(Opera Mini)\/(\d+)/i,[NAME,VERSION]],
|
|
|
- [[/(OPR)\/(\S+)/i,/(Presto)\/.*?Version\/(\S+)/i],[[NAME,'Opera'],VERSION]],
|
|
|
+ [/(Opera Mini)\/(\d+)/i,
|
|
|
+ [NAME, VERSION]],
|
|
|
+ [[/(OPR)\/(\S+)/i, /(Presto)\/.*?Version\/(\S+)/i],
|
|
|
+ [[NAME, 'Opera'], VERSION]],
|
|
|
[[
|
|
|
// Maxthon
|
|
|
/(Maxthon)\/(\S+)/i,
|
|
@@ -60,60 +70,64 @@
|
|
|
/(Vivaldi)\/(\S+)/i,
|
|
|
// Chrome
|
|
|
/(Chrome)\/(\S+)/i,
|
|
|
- ],[NAME,VERSION]],
|
|
|
+ ], [NAME, VERSION]],
|
|
|
// UC/QQ
|
|
|
- [/(UC|QQ)Browser\/(\S+)/i,[[NAME,mapper.reg,[/$/,'浏览器']],VERSION]],
|
|
|
+ [/(UC|QQ)Browser\/(\S+)/i,
|
|
|
+ [[NAME, mapper.reg, [/$/, '浏览器']], VERSION]],
|
|
|
// Safari
|
|
|
- [/Version\/(\S+) .*?(Safari)\//i,[VERSION,NAME]],
|
|
|
+ [/Version\/(\S+) .*?(Safari)\//i,
|
|
|
+ [VERSION, NAME]],
|
|
|
// Firefox
|
|
|
- [/(Firefox)\/(\S+)/i,[NAME,VERSION]],
|
|
|
+ [/(Firefox)\/(\S+)/i,
|
|
|
+ [NAME, VERSION]],
|
|
|
// IE
|
|
|
- [/MS(IE) (\d+)\.0/i,[[NAME,'Internet Explorer'],VERSION]],
|
|
|
- [/(Trident)\/(\d+)\.0/i,[[NAME,'Internet Explorer'],[VERSION,mapper.ieVer]]],
|
|
|
- [/()/i,[[NAME,'山寨浏览器']]],
|
|
|
+ [/MS(IE) (\d+)\.0/i,
|
|
|
+ [[NAME, 'Internet Explorer'], VERSION]],
|
|
|
+ [/(Trident)\/(\d+)\.0/i,
|
|
|
+ [[NAME, 'Internet Explorer'], [VERSION, mapper.ieVer]]],
|
|
|
+ [/()/i,
|
|
|
+ [[NAME, '山寨浏览器']]],
|
|
|
],
|
|
|
};
|
|
|
- function getResult(matches,keys){
|
|
|
- var r={};
|
|
|
- keys.forEach(function(k,i){
|
|
|
- var m=matches[i+1];
|
|
|
- if(Array.isArray(k)){
|
|
|
- if(typeof k[1]=='function') r[k[0]]=k[1](m,k[2]);
|
|
|
- else r[k[0]]=k[1];
|
|
|
- } else r[k]=m;
|
|
|
+ function getResult(matches, keys) {
|
|
|
+ var res = {};
|
|
|
+ keys.forEach(function(key, i) {
|
|
|
+ var match = matches[i + 1];
|
|
|
+ if (Array.isArray(key)) {
|
|
|
+ if (typeof key[1] == 'function')
|
|
|
+ res[key[0]] = key[1](match, key[2]);
|
|
|
+ else res[key[0]] = key[1];
|
|
|
+ } else res[key] = match;
|
|
|
});
|
|
|
- return r;
|
|
|
+ return res;
|
|
|
}
|
|
|
- function getString(o){
|
|
|
- var s=o.name;
|
|
|
- if(o.version) s+=' '+o.version;
|
|
|
- return s;
|
|
|
+ function getString(obj) {
|
|
|
+ var str = obj.name;
|
|
|
+ if (obj.version)
|
|
|
+ str += ' ' + obj.version;
|
|
|
+ return str;
|
|
|
}
|
|
|
- function parse(a){
|
|
|
- var k,v,result={};
|
|
|
- for(k in rules) {
|
|
|
- v=rules[k];
|
|
|
- v.some(function(rule){
|
|
|
- var reg=rule[0],keys=rule[1],m=null;
|
|
|
- if(Array.isArray(reg)) reg.some(function(reg){
|
|
|
- return m=a.match(reg);
|
|
|
- }); else m=a.match(reg);
|
|
|
- if(m) result[k]=getResult(m,keys);
|
|
|
- return m;
|
|
|
+ function parse(agent) {
|
|
|
+ var result = {};
|
|
|
+ for (var key in rules)
|
|
|
+ rules[key].some(function (rule) {
|
|
|
+ var regex = rule[0];
|
|
|
+ var attrs = rule[1];
|
|
|
+ if (!Array.isArray(regex))
|
|
|
+ regex = [regex];
|
|
|
+ return regex.some(function(re) {
|
|
|
+ var matches = agent.match(re);
|
|
|
+ if (matches) {
|
|
|
+ result[key] = getResult(matches, attrs);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ });
|
|
|
});
|
|
|
- }
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- var UAParser={
|
|
|
+ window.UAParser = {
|
|
|
parse: parse,
|
|
|
getString: getString,
|
|
|
};
|
|
|
-
|
|
|
- if(typeof exports!='undefined') {
|
|
|
- exports=module.exports=UAParser;
|
|
|
- } else {
|
|
|
- window.UAParser=UAParser;
|
|
|
- }
|
|
|
-
|
|
|
-}(this)
|
|
|
+}(this);
|