isMobile.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. "use strict";
  2. exports.__esModule = true;
  3. var appleIphone = /iPhone/i;
  4. var appleIpod = /iPod/i;
  5. var appleTablet = /iPad/i;
  6. var appleUniversal = /\biOS-universal(?:.+)Mac\b/i;
  7. var androidPhone = /\bAndroid(?:.+)Mobile\b/i;
  8. var androidTablet = /Android/i;
  9. var amazonPhone = /(?:SD4930UR|\bSilk(?:.+)Mobile\b)/i;
  10. var amazonTablet = /Silk/i;
  11. var windowsPhone = /Windows Phone/i;
  12. var windowsTablet = /\bWindows(?:.+)ARM\b/i;
  13. var otherBlackBerry = /BlackBerry/i;
  14. var otherBlackBerry10 = /BB10/i;
  15. var otherOpera = /Opera Mini/i;
  16. var otherChrome = /\b(CriOS|Chrome)(?:.+)Mobile/i;
  17. var otherFirefox = /Mobile(?:.+)Firefox\b/i;
  18. var isAppleTabletOnIos13 = function (navigator) {
  19. return (typeof navigator !== 'undefined' &&
  20. navigator.platform === 'MacIntel' &&
  21. typeof navigator.maxTouchPoints === 'number' &&
  22. navigator.maxTouchPoints > 1 &&
  23. typeof MSStream === 'undefined');
  24. };
  25. function createMatch(userAgent) {
  26. return function (regex) { return regex.test(userAgent); };
  27. }
  28. function isMobile(param) {
  29. var nav = {
  30. userAgent: '',
  31. platform: '',
  32. maxTouchPoints: 0
  33. };
  34. if (!param && typeof navigator !== 'undefined') {
  35. nav = {
  36. userAgent: navigator.userAgent,
  37. platform: navigator.platform,
  38. maxTouchPoints: navigator.maxTouchPoints || 0
  39. };
  40. }
  41. else if (typeof param === 'string') {
  42. nav.userAgent = param;
  43. }
  44. else if (param && param.userAgent) {
  45. nav = {
  46. userAgent: param.userAgent,
  47. platform: param.platform,
  48. maxTouchPoints: param.maxTouchPoints || 0
  49. };
  50. }
  51. var userAgent = nav.userAgent;
  52. var tmp = userAgent.split('[FBAN');
  53. if (typeof tmp[1] !== 'undefined') {
  54. userAgent = tmp[0];
  55. }
  56. tmp = userAgent.split('Twitter');
  57. if (typeof tmp[1] !== 'undefined') {
  58. userAgent = tmp[0];
  59. }
  60. var match = createMatch(userAgent);
  61. var result = {
  62. apple: {
  63. phone: match(appleIphone) && !match(windowsPhone),
  64. ipod: match(appleIpod),
  65. tablet: !match(appleIphone) &&
  66. (match(appleTablet) || isAppleTabletOnIos13(nav)) &&
  67. !match(windowsPhone),
  68. universal: match(appleUniversal),
  69. device: (match(appleIphone) ||
  70. match(appleIpod) ||
  71. match(appleTablet) ||
  72. match(appleUniversal) ||
  73. isAppleTabletOnIos13(nav)) &&
  74. !match(windowsPhone)
  75. },
  76. amazon: {
  77. phone: match(amazonPhone),
  78. tablet: !match(amazonPhone) && match(amazonTablet),
  79. device: match(amazonPhone) || match(amazonTablet)
  80. },
  81. android: {
  82. phone: (!match(windowsPhone) && match(amazonPhone)) ||
  83. (!match(windowsPhone) && match(androidPhone)),
  84. tablet: !match(windowsPhone) &&
  85. !match(amazonPhone) &&
  86. !match(androidPhone) &&
  87. (match(amazonTablet) || match(androidTablet)),
  88. device: (!match(windowsPhone) &&
  89. (match(amazonPhone) ||
  90. match(amazonTablet) ||
  91. match(androidPhone) ||
  92. match(androidTablet))) ||
  93. match(/\bokhttp\b/i)
  94. },
  95. windows: {
  96. phone: match(windowsPhone),
  97. tablet: match(windowsTablet),
  98. device: match(windowsPhone) || match(windowsTablet)
  99. },
  100. other: {
  101. blackberry: match(otherBlackBerry),
  102. blackberry10: match(otherBlackBerry10),
  103. opera: match(otherOpera),
  104. firefox: match(otherFirefox),
  105. chrome: match(otherChrome),
  106. device: match(otherBlackBerry) ||
  107. match(otherBlackBerry10) ||
  108. match(otherOpera) ||
  109. match(otherFirefox) ||
  110. match(otherChrome)
  111. },
  112. any: false,
  113. phone: false,
  114. tablet: false
  115. };
  116. result.any =
  117. result.apple.device ||
  118. result.android.device ||
  119. result.windows.device ||
  120. result.other.device;
  121. result.phone =
  122. result.apple.phone || result.android.phone || result.windows.phone;
  123. result.tablet =
  124. result.apple.tablet || result.android.tablet || result.windows.tablet;
  125. return result;
  126. }
  127. exports["default"] = isMobile;
  128. //# sourceMappingURL=isMobile.js.map