You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
3.5 KiB

4 years ago
  1. function GetBrowserDetails() {
  2. 'use strict';
  3. var module = {
  4. options: [],
  5. header: [navigator.platform, navigator.userAgent, navigator.appVersion, navigator.vendor, window.opera],
  6. dataos: [
  7. { name: 'Windows Phone', value: 'Windows Phone', version: 'OS' },
  8. { name: 'Windows', value: 'Win', version: 'NT' },
  9. { name: 'iPhone', value: 'iPhone', version: 'OS' },
  10. { name: 'iPad', value: 'iPad', version: 'OS' },
  11. { name: 'Kindle', value: 'Silk', version: 'Silk' },
  12. { name: 'Android', value: 'Android', version: 'Android' },
  13. { name: 'PlayBook', value: 'PlayBook', version: 'OS' },
  14. { name: 'BlackBerry', value: 'BlackBerry', version: '/' },
  15. { name: 'Macintosh', value: 'Mac', version: 'OS X' },
  16. { name: 'Linux', value: 'Linux', version: 'rv' },
  17. { name: 'Palm', value: 'Palm', version: 'PalmOS' }
  18. ],
  19. databrowser: [
  20. { name: 'Chrome', value: 'Chrome', version: 'Chrome' },
  21. { name: 'Firefox', value: 'Firefox', version: 'Firefox' },
  22. { name: 'Safari', value: 'Safari', version: 'Version' },
  23. { name: 'Internet Explorer', value: 'MSIE', version: 'MSIE' },
  24. { name: 'Opera', value: 'Opera', version: 'Opera' },
  25. { name: 'BlackBerry', value: 'CLDC', version: 'CLDC' },
  26. { name: 'Mozilla', value: 'Mozilla', version: 'Mozilla' }
  27. ],
  28. init: function () {
  29. var agent = this.header.join(' '),
  30. os = this.matchItem(agent, this.dataos),
  31. browser = this.matchItem(agent, this.databrowser);
  32. return { os: os, browser: browser };
  33. },
  34. matchItem: function (string, data) {
  35. var i = 0,
  36. j = 0,
  37. html = '',
  38. regex,
  39. regexv,
  40. match,
  41. matches,
  42. version;
  43. for (i = 0; i < data.length; i += 1) {
  44. regex = new RegExp(data[i].value, 'i');
  45. match = regex.test(string);
  46. if (match) {
  47. regexv = new RegExp(data[i].version + '[- /:;]([\\d._]+)', 'i');
  48. matches = string.match(regexv);
  49. version = '';
  50. if (matches) { if (matches[1]) { matches = matches[1]; } }
  51. if (matches) {
  52. matches = matches.split(/[._]+/);
  53. for (j = 0; j < matches.length; j += 1) {
  54. if (j === 0) {
  55. version += matches[j] + '.';
  56. } else {
  57. version += matches[j];
  58. }
  59. }
  60. } else {
  61. version = '0';
  62. }
  63. return {
  64. name: data[i].name,
  65. version: parseFloat(version)
  66. };
  67. }
  68. }
  69. return { name: 'unknown', version: 0 };
  70. }
  71. };
  72. var e = module.init();
  73. return {
  74. osName: e.os.name, osVersion: e.os.version, browserName: e.browser.name, browserVersion: e.browser.version
  75. , navigatorUserAgent: navigator.userAgent, navigatorAppVersion: navigator.appVersion
  76. , navigatorPlatform: navigator.platform, navigatorVendor: navigator.vendor
  77. };
  78. };