161 lines
4.4 KiB
JavaScript
161 lines
4.4 KiB
JavaScript
|
|
var currentBrowser;
|
|
|
|
var browserVersion;
|
|
|
|
var RTCBrowserType = {
|
|
|
|
RTC_BROWSER_CHROME: "rtc_browser.chrome",
|
|
|
|
RTC_BROWSER_OPERA: "rtc_browser.opera",
|
|
|
|
RTC_BROWSER_FIREFOX: "rtc_browser.firefox",
|
|
|
|
RTC_BROWSER_IEXPLORER: "rtc_browser.iexplorer",
|
|
|
|
RTC_BROWSER_SAFARI: "rtc_browser.safari",
|
|
|
|
getBrowserType: function () {
|
|
return currentBrowser;
|
|
},
|
|
|
|
isChrome: function () {
|
|
return currentBrowser === RTCBrowserType.RTC_BROWSER_CHROME;
|
|
},
|
|
|
|
isOpera: function () {
|
|
return currentBrowser === RTCBrowserType.RTC_BROWSER_OPERA;
|
|
},
|
|
isFirefox: function () {
|
|
return currentBrowser === RTCBrowserType.RTC_BROWSER_FIREFOX;
|
|
},
|
|
|
|
isIExplorer: function () {
|
|
return currentBrowser === RTCBrowserType.RTC_BROWSER_IEXPLORER;
|
|
},
|
|
|
|
isSafari: function () {
|
|
return currentBrowser === RTCBrowserType.RTC_BROWSER_SAFARI;
|
|
},
|
|
isTemasysPluginUsed: function () {
|
|
return RTCBrowserType.isIExplorer() || RTCBrowserType.isSafari();
|
|
},
|
|
getFirefoxVersion: function () {
|
|
return RTCBrowserType.isFirefox() ? browserVersion : null;
|
|
},
|
|
|
|
getChromeVersion: function () {
|
|
return RTCBrowserType.isChrome() ? browserVersion : null;
|
|
},
|
|
|
|
usesPlanB: function() {
|
|
return RTCBrowserType.isChrome() || RTCBrowserType.isOpera() ||
|
|
RTCBrowserType.isTemasysPluginUsed();
|
|
},
|
|
|
|
usesUnifiedPlan: function() {
|
|
return RTCBrowserType.isFirefox();
|
|
}
|
|
|
|
// Add version getters for other browsers when needed
|
|
};
|
|
|
|
// detectOpera() must be called before detectChrome() !!!
|
|
// otherwise Opera wil be detected as Chrome
|
|
function detectChrome() {
|
|
if (navigator.webkitGetUserMedia) {
|
|
currentBrowser = RTCBrowserType.RTC_BROWSER_CHROME;
|
|
var userAgent = navigator.userAgent.toLowerCase();
|
|
// We can assume that user agent is chrome, because it's
|
|
// enforced when 'ext' streaming method is set
|
|
var ver = parseInt(userAgent.match(/chrome\/(\d+)\./)[1], 10);
|
|
console.log("This appears to be Chrome, ver: " + ver);
|
|
return ver;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function detectOpera() {
|
|
var userAgent = navigator.userAgent;
|
|
if (userAgent.match(/Opera|OPR/)) {
|
|
currentBrowser = RTCBrowserType.RTC_BROWSER_OPERA;
|
|
var version = userAgent.match(/(Opera|OPR) ?\/?(\d+)\.?/)[2];
|
|
console.info("This appears to be Opera, ver: " + version);
|
|
return version;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function detectFirefox() {
|
|
if (navigator.mozGetUserMedia) {
|
|
currentBrowser = RTCBrowserType.RTC_BROWSER_FIREFOX;
|
|
var version = parseInt(
|
|
navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1], 10);
|
|
console.log('This appears to be Firefox, ver: ' + version);
|
|
return version;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function detectSafari() {
|
|
if ((/^((?!chrome).)*safari/i.test(navigator.userAgent))) {
|
|
currentBrowser = RTCBrowserType.RTC_BROWSER_SAFARI;
|
|
console.info("This appears to be Safari");
|
|
// FIXME detect Safari version when needed
|
|
return 1;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function detectIE() {
|
|
var version;
|
|
var ua = window.navigator.userAgent;
|
|
|
|
var msie = ua.indexOf('MSIE ');
|
|
if (msie > 0) {
|
|
// IE 10 or older => return version number
|
|
version = parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
|
|
}
|
|
|
|
var trident = ua.indexOf('Trident/');
|
|
if (!version && trident > 0) {
|
|
// IE 11 => return version number
|
|
var rv = ua.indexOf('rv:');
|
|
version = parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
|
|
}
|
|
|
|
var edge = ua.indexOf('Edge/');
|
|
if (!version && edge > 0) {
|
|
// IE 12 => return version number
|
|
version = parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
|
|
}
|
|
|
|
if (version) {
|
|
currentBrowser = RTCBrowserType.RTC_BROWSER_IEXPLORER;
|
|
console.info("This appears to be IExplorer, ver: " + version);
|
|
}
|
|
return version;
|
|
}
|
|
|
|
function detectBrowser() {
|
|
var version;
|
|
var detectors = [
|
|
detectOpera,
|
|
detectChrome,
|
|
detectFirefox,
|
|
detectIE,
|
|
detectSafari
|
|
];
|
|
// Try all browser detectors
|
|
for (var i = 0; i < detectors.length; i++) {
|
|
version = detectors[i]();
|
|
if (version)
|
|
return version;
|
|
}
|
|
console.error("Failed to detect browser type");
|
|
return undefined;
|
|
}
|
|
|
|
browserVersion = detectBrowser();
|
|
|
|
module.exports = RTCBrowserType; |