Based off of another SO reply by kennebec, I had problems following the code so I rewrote it to give myself a better understanding of what is being accomplished.
I would be very grateful if you could critique it or point out any problems I have caused or could modify to improve it.
Tested with IE8/9/10/11, FF, Chrome, Opera & Safari.
Original JSFiddle link Updated with changes from thriggle JSFiddle link
function getBrowser() {
var userAgent = navigator.userAgent,
matched = userAgent.match(/(chrome|firefox|opera|safari|msie|trident(?=\/))\/?\s*(\d+)/i) || [],
version,
browser = { name: '', version: '' };
// IE Shells; I gaurantee that you will see this with Dell branded OEM IE 11 installs.
if(/trident/i.test(matched[1])) {
version = /\brv[ :]+(\d+)/g.exec(userAgent) || [];
return { name: 'Internet Explorer', version: (version[1] || '') };
}
// Not Chrome; at first glance this looks like a block for chrome identification, but
// its actually Opera.
if(matched[1] === 'Chrome') {
version = userAgent.match(/\b(OPR|Edge)\/(\d+)/);
if(version !== null) {
return { name: version[1].replace('OPR', 'Opera'), version: version[2] };
}
}
// The rest; Chrome, Safari, etc
matched = matched[2] ? [matched[1], matched[2]] : [navigator.appName, navigator.appVersion, '-?'];
if((version = userAgent.match(/version\/(\d+)/i)) !== null) {
matched.splice(1, 1, version[1]);
}
browser.name = (matched[0] !== "") ? matched[0] : "Unknown";
browser.version = (matched[1] !== "") ? matched[1] : "Unknown";
return browser;
}
1 Answer 1
Like Kennebec's original answer, the code is inconsistent in its identification of different versions of browsers. For example, Internet Explorer 9 will appear as MSIE 9.0 while Internet Explorer 11 (which despite forsaking the family name still wields the trident of its ancestors) will appear as Internet Explorer 11. Since you have direct control over the name returned for a trident-detected version of IE, why not return "MSIE" instead of "Internet Explorer"?
Super minor nitpick: you misspelled "guarantee" in the code comments.
-
\$\begingroup\$ Thanks for the input, I have updated the fiddle(now v31) with your point of inconsistency and it is an improvement. \$\endgroup\$Ne Ma– Ne Ma2015年03月04日 09:34:05 +00:00Commented Mar 4, 2015 at 9:34