Skip to content

Instantly share code, notes, and snippets.

@AbhilashDawar
Created May 13, 2019 08:45
Show Gist options
  • Select an option

  • Save AbhilashDawar/c7f13129f5047327df54fe00e4392ceb to your computer and use it in GitHub Desktop.

Select an option

Save AbhilashDawar/c7f13129f5047327df54fe00e4392ceb to your computer and use it in GitHub Desktop.
Browser detection with Javascript
var BROWSERS = {
chrome: {
name: "Google Chrome or Chromium",
codes: {
chrome: "Chrome"
},
supportVersion: 0
},
firefox: {
name: "Mozilla Firefox",
codes: {
firefox: "Firefox"
},
supportVersion: 0
},
edge: {
name: "Microsoft Edge",
codes: {
edge: "Edge"
},
supportVersion: 0
},
internetExplorer: {
name: "Microsoft Internet Explorer",
codes: {
trident: "Trident",
msie: "MSIE"
},
supportVersion: 10
},
opera: {
name: "Opera",
codes: {
opera: "Opera",
opr: "OPR"
},
supportVersion: 0
},
safari: {
name: "Apple Safari",
codes: {
safari: "Safari"
},
supportVersion: 0
},
unknown: {
name: "unknown",
code: ""
}
};
var COMPATIBLE = "compatible";
var rv = "rv";
function getVersion(userAgent, browserCode, delimiterBefore, delimiterAfter) {
var versionString = userAgent.substring(userAgent.indexOf(browserCode));
var index = versionString.indexOf(delimiterBefore) + 1;
return versionString.substring(index, versionString.indexOf(delimiterAfter) > -1 ? versionString.indexOf(delimiterAfter) : versionString.length);
}
(function () {
var userAgent = window.navigator.userAgent;
var browser = {
name: '',
version: '',
compatibilityMode: false,
compatibilityVersion: ''
};
console.log(userAgent);
if (userAgent.indexOf(BROWSERS.firefox.codes.firefox) > -1) {
// "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"
browser.name = BROWSERS.firefox.name;
browser.version = getVersion(userAgent, BROWSERS.firefox.codes.firefox, '/', ' ');
} else if (userAgent.indexOf(BROWSERS.opera.codes.opera) > -1 || userAgent.indexOf(BROWSERS.opera.codes.opr) > -1) {
browser.name = BROWSERS.opera.name;
//"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 OPR/57.0.3098.106"
if (userAgent.indexOf(BROWSERS.opera.codes.opera) > -1) {
browser.version = getVersion(userAgent, BROWSERS.opera.codes.opera, '/', ' ');;
} else {
browser.version = getVersion(userAgent, BROWSERS.opera.codes.opr, '/', ' ');;
}
} else if (userAgent.indexOf(BROWSERS.internetExplorer.codes.trident) > -1) {
browser.name = BROWSERS.internetExplorer.name;
// "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Zoom 3.6.0; wbx 1.0.0; rv:11.0) like Gecko"
var version = getVersion(userAgent, BROWSERS.internetExplorer.codes.trident, '/', ';');
if (version === '7.0') {
browser.version = getVersion(userAgent, rv, ':', ')');
} else {
if (userAgent.indexOf(BROWSERS.internetExplorer.codes.msie) > -1) {
browser.version = getVersion(userAgent, BROWSERS.internetExplorer.codes.msie, ' ', ';');
}
}
/**
* Check if browser running in compatibility mode (simulating an older version)
*/
if (userAgent.indexOf(COMPATIBLE) > -1) {
browser.compatibilityMode = true;
browser.compatibilityVersion = getVersion(userAgent, BROWSERS.internetExplorer.codes.msie, ' ', ';');
}
/**
* Custom message to user for older version of the application
*/
if (browser.compatibilityMode) {
alert('You are working with developer options turned ON and emulating a different device. Application might not work as expected.');
if (Number(browser.compatibilityVersion) < BROWSERS.internetExplorer.supportVersion) {
alert('You are working with developer options turned ON and emulating a different device with lower browser version. Application might not work as expected.');
}
} else if (Number(browser.version) < BROWSERS.internetExplorer.supportVersion) {
alert('You are working in older browser version. Application might not work as expected.');
}
} else if (userAgent.indexOf(BROWSERS.edge.codes.edge) > -1) {
// "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299"
browser.name = BROWSERS.edge.name;
browser.version = getVersion(userAgent, BROWSERS.edge.codes.edge, '/', ' ');
} else if (userAgent.indexOf(BROWSERS.chrome.codes.chrome) > -1) {
browser.name = BROWSERS.chrome.name;
// "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/66.0.3359.181 Chrome/66.0.3359.181 Safari/537.36"
browser.version = getVersion(userAgent, BROWSERS.chrome.codes.chrome, '/', ' ');
} else if (userAgent.indexOf(BROWSERS.safari.codes.safari) > -1) {
browser.name = BROWSERS.safari.name;
// "Mozilla/5.0 (iPhone; CPU iPhone OS 11_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1 980x1306"
browser.version = getVersion(userAgent, BROWSERS.safari.codes.safari, '/', ' ');
} else {
browser.name = BROWSERS.unknown.name;
browser.version = BROWSERS.unknown.code;
}
console.log(browser);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment