Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

RTCBrowserType.js 5.9KB

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