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.4KB

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