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.

RTCBrowserType.js 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. var currentBrowser;
  2. var browserVersion;
  3. var isAndroid;
  4. var RTCBrowserType = {
  5. RTC_BROWSER_CHROME: "rtc_browser.chrome",
  6. RTC_BROWSER_OPERA: "rtc_browser.opera",
  7. RTC_BROWSER_FIREFOX: "rtc_browser.firefox",
  8. RTC_BROWSER_IEXPLORER: "rtc_browser.iexplorer",
  9. RTC_BROWSER_SAFARI: "rtc_browser.safari",
  10. getBrowserType: function () {
  11. return currentBrowser;
  12. },
  13. isChrome: function () {
  14. return currentBrowser === RTCBrowserType.RTC_BROWSER_CHROME;
  15. },
  16. isOpera: function () {
  17. return currentBrowser === RTCBrowserType.RTC_BROWSER_OPERA;
  18. },
  19. isFirefox: function () {
  20. return currentBrowser === RTCBrowserType.RTC_BROWSER_FIREFOX;
  21. },
  22. isIExplorer: function () {
  23. return currentBrowser === RTCBrowserType.RTC_BROWSER_IEXPLORER;
  24. },
  25. isSafari: function () {
  26. return currentBrowser === RTCBrowserType.RTC_BROWSER_SAFARI;
  27. },
  28. isTemasysPluginUsed: function () {
  29. return RTCBrowserType.isIExplorer() || RTCBrowserType.isSafari();
  30. },
  31. getFirefoxVersion: function () {
  32. return RTCBrowserType.isFirefox() ? browserVersion : null;
  33. },
  34. getChromeVersion: function () {
  35. return RTCBrowserType.isChrome() ? browserVersion : null;
  36. },
  37. usesPlanB: function() {
  38. return RTCBrowserType.isChrome() || RTCBrowserType.isOpera() ||
  39. RTCBrowserType.isTemasysPluginUsed();
  40. },
  41. usesUnifiedPlan: function() {
  42. return RTCBrowserType.isFirefox();
  43. },
  44. /**
  45. * Whether the browser is running on an android device.
  46. */
  47. isAndroid: function() {
  48. return isAndroid;
  49. }
  50. // Add version getters for other browsers when needed
  51. };
  52. // detectOpera() must be called before detectChrome() !!!
  53. // otherwise Opera wil be detected as Chrome
  54. function detectChrome() {
  55. if (navigator.webkitGetUserMedia) {
  56. currentBrowser = RTCBrowserType.RTC_BROWSER_CHROME;
  57. var userAgent = navigator.userAgent.toLowerCase();
  58. // We can assume that user agent is chrome, because it's
  59. // enforced when 'ext' streaming method is set
  60. var ver = parseInt(userAgent.match(/chrome\/(\d+)\./)[1], 10);
  61. console.log("This appears to be Chrome, ver: " + ver);
  62. return ver;
  63. }
  64. return null;
  65. }
  66. function detectOpera() {
  67. var userAgent = navigator.userAgent;
  68. if (userAgent.match(/Opera|OPR/)) {
  69. currentBrowser = RTCBrowserType.RTC_BROWSER_OPERA;
  70. var version = userAgent.match(/(Opera|OPR) ?\/?(\d+)\.?/)[2];
  71. console.info("This appears to be Opera, ver: " + version);
  72. return version;
  73. }
  74. return null;
  75. }
  76. function detectFirefox() {
  77. if (navigator.mozGetUserMedia) {
  78. currentBrowser = RTCBrowserType.RTC_BROWSER_FIREFOX;
  79. var version = parseInt(
  80. navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1], 10);
  81. console.log('This appears to be Firefox, ver: ' + version);
  82. return version;
  83. }
  84. return null;
  85. }
  86. function detectSafari() {
  87. if ((/^((?!chrome).)*safari/i.test(navigator.userAgent))) {
  88. currentBrowser = RTCBrowserType.RTC_BROWSER_SAFARI;
  89. console.info("This appears to be Safari");
  90. // FIXME detect Safari version when needed
  91. return 1;
  92. }
  93. return null;
  94. }
  95. function detectIE() {
  96. var version;
  97. var ua = window.navigator.userAgent;
  98. var msie = ua.indexOf('MSIE ');
  99. if (msie > 0) {
  100. // IE 10 or older => return version number
  101. version = parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
  102. }
  103. var trident = ua.indexOf('Trident/');
  104. if (!version && trident > 0) {
  105. // IE 11 => return version number
  106. var rv = ua.indexOf('rv:');
  107. version = parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
  108. }
  109. var edge = ua.indexOf('Edge/');
  110. if (!version && edge > 0) {
  111. // IE 12 => return version number
  112. version = parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
  113. }
  114. if (version) {
  115. currentBrowser = RTCBrowserType.RTC_BROWSER_IEXPLORER;
  116. console.info("This appears to be IExplorer, ver: " + version);
  117. }
  118. return version;
  119. }
  120. function detectBrowser() {
  121. var version;
  122. var detectors = [
  123. detectOpera,
  124. detectChrome,
  125. detectFirefox,
  126. detectIE,
  127. detectSafari
  128. ];
  129. // Try all browser detectors
  130. for (var i = 0; i < detectors.length; i++) {
  131. version = detectors[i]();
  132. if (version)
  133. return version;
  134. }
  135. console.warn("Browser type defaults to Safari ver 1");
  136. currentBrowser = RTCBrowserType.RTC_BROWSER_SAFARI;
  137. return 1;
  138. }
  139. browserVersion = detectBrowser();
  140. isAndroid = navigator.userAgent.indexOf('Android') != -1;
  141. module.exports = RTCBrowserType;