useragent.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. /*
  2. User-Agent.js
  3. A utilities script that help render
  4. user agents by giving its raw UA header
  5. CopyRight tobychui. All Right Reserved
  6. */
  7. //parseUserAgent return the OS and browser name of the given ua
  8. function parseUserAgent(userAgent) {
  9. // browser
  10. var nVer = userAgent;
  11. var nAgt = userAgent;
  12. var browser = "";
  13. var version = '';
  14. var majorVersion = 0;
  15. var nameOffset, verOffset, ix;
  16. // Opera
  17. if ((verOffset = nAgt.indexOf('Opera')) != -1) {
  18. browser = 'Opera';
  19. version = nAgt.substring(verOffset + 6);
  20. if ((verOffset = nAgt.indexOf('Version')) != -1) {
  21. version = nAgt.substring(verOffset + 8);
  22. }
  23. }
  24. // Opera Next
  25. if ((verOffset = nAgt.indexOf('OPR')) != -1) {
  26. browser = 'Opera';
  27. version = nAgt.substring(verOffset + 4);
  28. }
  29. // Legacy Edge
  30. else if ((verOffset = nAgt.indexOf('Edge')) != -1) {
  31. browser = 'Microsoft Legacy Edge';
  32. version = nAgt.substring(verOffset + 5);
  33. }
  34. // Edge (Chromium)
  35. else if ((verOffset = nAgt.indexOf('Edg')) != -1) {
  36. browser = 'Microsoft Edge';
  37. version = nAgt.substring(verOffset + 4);
  38. }
  39. // MSIE
  40. else if ((verOffset = nAgt.indexOf('MSIE')) != -1) {
  41. browser = 'Microsoft Internet Explorer';
  42. version = nAgt.substring(verOffset + 5);
  43. }
  44. // Chrome
  45. else if ((verOffset = nAgt.indexOf('Chrome')) != -1) {
  46. browser = 'Chrome';
  47. version = nAgt.substring(verOffset + 7);
  48. }
  49. // Safari
  50. else if ((verOffset = nAgt.indexOf('Safari')) != -1) {
  51. browser = 'Safari';
  52. version = nAgt.substring(verOffset + 7);
  53. if ((verOffset = nAgt.indexOf('Version')) != -1) {
  54. version = nAgt.substring(verOffset + 8);
  55. }
  56. }
  57. // Firefox
  58. else if ((verOffset = nAgt.indexOf('Firefox')) != -1) {
  59. browser = 'Firefox';
  60. version = nAgt.substring(verOffset + 8);
  61. }
  62. // MSIE 11+
  63. else if (nAgt.indexOf('Trident/') != -1) {
  64. browser = 'Microsoft Internet Explorer';
  65. version = nAgt.substring(nAgt.indexOf('rv:') + 3);
  66. }
  67. // Other browsers
  68. else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) {
  69. browser = nAgt.substring(nameOffset, verOffset);
  70. version = nAgt.substring(verOffset + 1);
  71. if (browser.toLowerCase() == browser.toUpperCase()) {
  72. browser = navigator.appName;
  73. }
  74. }
  75. // trim the version string
  76. if ((ix = version.indexOf(';')) != -1) version = version.substring(0, ix);
  77. if ((ix = version.indexOf(' ')) != -1) version = version.substring(0, ix);
  78. if ((ix = version.indexOf(')')) != -1) version = version.substring(0, ix);
  79. majorVersion = parseInt('' + version, 10);
  80. if (isNaN(majorVersion)) {
  81. version = '' + parseFloat(navigator.appVersion);
  82. majorVersion = parseInt(navigator.appVersion, 10);
  83. }
  84. // mobile version
  85. var mobile = /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer);
  86. // system
  87. var os = "";
  88. var clientStrings = [
  89. {s:'Windows 10', r:/(Windows 10.0|Windows NT 10.0)/},
  90. {s:'Windows 8.1', r:/(Windows 8.1|Windows NT 6.3)/},
  91. {s:'Windows 8', r:/(Windows 8|Windows NT 6.2)/},
  92. {s:'Windows 7', r:/(Windows 7|Windows NT 6.1)/},
  93. {s:'Windows Vista', r:/Windows NT 6.0/},
  94. {s:'Windows Server 2003', r:/Windows NT 5.2/},
  95. {s:'Windows XP', r:/(Windows NT 5.1|Windows XP)/},
  96. {s:'Windows 2000', r:/(Windows NT 5.0|Windows 2000)/},
  97. {s:'Windows ME', r:/(Win 9x 4.90|Windows ME)/},
  98. {s:'Windows 98', r:/(Windows 98|Win98)/},
  99. {s:'Windows 95', r:/(Windows 95|Win95|Windows_95)/},
  100. {s:'Windows NT 4.0', r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/},
  101. {s:'Windows CE', r:/Windows CE/},
  102. {s:'Windows 3.11', r:/Win16/},
  103. {s:'Android', r:/Android/},
  104. {s:'Open BSD', r:/OpenBSD/},
  105. {s:'Sun OS', r:/SunOS/},
  106. {s:'Chrome OS', r:/CrOS/},
  107. {s:'Linux', r:/(Linux|X11(?!.*CrOS))/},
  108. {s:'iOS', r:/(iPhone|iPad|iPod)/},
  109. {s:'Mac OS X', r:/Mac OS X/},
  110. {s:'Mac OS', r:/(Mac OS|MacPPC|MacIntel|Mac_PowerPC|Macintosh)/},
  111. {s:'QNX', r:/QNX/},
  112. {s:'UNIX', r:/UNIX/},
  113. {s:'BeOS', r:/BeOS/},
  114. {s:'OS/2', r:/OS\/2/},
  115. //Special agents
  116. {s:'Search Bot', r:/(nuhk|CensysInspect|facebookexternalhit|Twitterbot|AhrefsBot|Palo Alto|InternetMeasurement|PetalBot|coccocbot|MJ12bot|Googlebot|bingbot|Yammybot|YandexBot|SeznamBot|SemrushBot|Openbot|Slurp|Sogou web spider|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/},
  117. {s: 'Scripts', r:/(Go-http-client|cpp-httplib|python-requests|Java|zgrab|ALittle Client|)/},
  118. ];
  119. for (var id in clientStrings) {
  120. var cs = clientStrings[id];
  121. if (cs.r.test(nAgt)) {
  122. os = cs.s;
  123. break;
  124. }
  125. }
  126. var osVersion = "";
  127. if (/Windows/.test(os)) {
  128. osVersion = /Windows (.*)/.exec(os)[1];
  129. os = 'Windows';
  130. }
  131. switch (os) {
  132. case 'Mac OS':
  133. case 'Mac OS X':
  134. case 'Android':
  135. osVersion = /(?:Android|Mac OS|Mac OS X|MacPPC|MacIntel|Mac_PowerPC|Macintosh) ([\.\_\d]+)/.exec(nAgt);
  136. if (osVersion != null){
  137. osVersion = osVersion[1];
  138. }else{
  139. osVersion = "";
  140. }
  141. break;
  142. case 'iOS':
  143. osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer);
  144. if (osVersion != null){
  145. osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0);
  146. }else{
  147. osVersion = "";
  148. }
  149. break;
  150. }
  151. // Return OS and browser
  152. return {
  153. os: os,
  154. browser: browser,
  155. version: osVersion,
  156. isMobile: mobile,
  157. };
  158. }
  159. //Get OS color code give a persistant color
  160. //if a OS or browser agent is known
  161. //otherwise return light grey
  162. function getOSColorCode(browserName){
  163. let browserColors = {
  164. 'Windows 10': '#0078D7',
  165. 'Windows 8.1': '#2D7D9A',
  166. 'Windows 8': '#0063B1',
  167. 'Windows 7': '#4C4C4C',
  168. 'Windows Vista': '#008080',
  169. 'Windows Server 2003': '#A30000',
  170. 'Windows XP': '#6D6D6D',
  171. 'Windows 2000': '#7F7F7F',
  172. 'Windows ME': '#BDBDBD',
  173. 'Windows 98': '#ECECEC',
  174. 'Windows 95': '#F0F0F0',
  175. 'Windows NT 4.0': '#9E9E9E',
  176. 'Windows CE': '#FFDDBB',
  177. 'Windows 3.11': '#BF2F2F',
  178. 'Windows': '#6ec3f5',
  179. 'Android': '#A4C639',
  180. 'Open BSD': '#F5DEB3',
  181. 'Sun OS': '#DAA520',
  182. 'Chrome OS': '#4285F4',
  183. 'Linux': '#ECECEC',
  184. 'iOS': '#000000',
  185. 'Mac OS X': '#A5A5A5',
  186. 'Mac OS': '#A5A5A5',
  187. 'QNX': '#696969',
  188. 'UNIX': '#D3D3D3',
  189. 'BeOS': '#8F8F8F',
  190. 'OS/2': '#D8BFD8',
  191. 'Search Bot': '#F6A821',
  192. 'Scripts': '#B8B8B8',
  193. }
  194. return browserColors[browserName] || "#e0e0e0";
  195. }