detectBrowser.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. var isBrowser = require('./isBrowser');
  2. var toInt = require('./toInt');
  3. var keys = require('./keys');
  4. exports = function(ua) {
  5. ua = ua || (isBrowser ? navigator.userAgent : '');
  6. ua = ua.toLowerCase();
  7. var ieVer = getVer(ua, 'msie ');
  8. if (ieVer)
  9. return {
  10. version: ieVer,
  11. name: 'ie'
  12. };
  13. if (regIe11.test(ua))
  14. return {
  15. version: 11,
  16. name: 'ie'
  17. };
  18. for (var i = 0, len = browsers.length; i < len; i++) {
  19. var name = browsers[i];
  20. var match = ua.match(regBrowsers[name]);
  21. if (match == null) continue;
  22. var version = toInt(match[1].split('.')[0]);
  23. if (name === 'opera') version = getVer(ua, 'version/') || version;
  24. return {
  25. name: name,
  26. version: version
  27. };
  28. }
  29. return {
  30. name: 'unknown',
  31. version: -1
  32. };
  33. };
  34. var regBrowsers = {
  35. edge: /edge\/([0-9._]+)/,
  36. firefox: /firefox\/([0-9.]+)(?:\s|$)/,
  37. opera: /opera\/([0-9.]+)(?:\s|$)/,
  38. android: /android\s([0-9.]+)/,
  39. ios: /version\/([0-9._]+).*mobile.*safari.*/,
  40. safari: /version\/([0-9._]+).*safari/,
  41. chrome: /(?!chrom.*opr)chrom(?:e|ium)\/([0-9.]+)(:?\s|$)/
  42. };
  43. var regIe11 = /trident\/7\./;
  44. var browsers = keys(regBrowsers);
  45. function getVer(ua, mark) {
  46. var idx = ua.indexOf(mark);
  47. if (idx > -1)
  48. return toInt(ua.substring(idx + mark.length, ua.indexOf('.', idx)));
  49. }
  50. module.exports = exports;