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 5.2KB

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