var loginAllowed = true, browser = "unknown", version = "unknown"; var BrowserDetect = { init: function () { if (window.MSCompatibleInfo) { browser = "Internet Explorer"; } else if (window.operamini) { browser = "Opera Mini"; } else if (this.detectOldOpera()) { browser = "Opera"; } else if (window.chrome) { //webkit but not Safari browser = "webkit-based"; } else if (window.WebKitPoint) { browser = "Safari"; version = "4+ or iOS Safari 2+"; } else if (window.mozInnerScreenY) { browser = "mozilla-based"; } else if (!this.detectFeature("opacity")) { browser = "Too old to detect"; //e.g. IE<5.5 (others already filtered out) } else if (this.detectFeature("flexDirection")) { browser = "unknown modern browser"; } switch (browser) { case "Internet Explorer": if (!this.detectFeature("flexDirection")) { version = "10"; } else { version = "11 or higher"; } break; case "Opera Mini": //if (!this.detectFeature("outline")) { // version = "7 or less"; //} break; case "Opera": if (!this.detectFeature("textShadow")) { version = "9.4 or less."; } else if (!this.detectFeature("boxShadow")) { version = "9.5 - 10.4"; } else if (!this.detectFeature("textOverflow")) { version = "10.5 - 10.6"; } else if (!this.detectFeature("flexDirection")) { version = "11 - 12"; } else { version = "12 - 12.16"; } break; case "webkit-based": if (this.detectFeature("flexDirection")) { browser = "Modern Webkit browser"; version = "Chrome 29+, Opera 17+, Iron, etc."; } else { version = "not up-to-date"; } break; case "Safari": if (!this.detectFeature("textShadow")) { version = "3 or less."; } else if (!this.detectFeature("borderRadius")) { version = "3.1 - 4"; } else if (!this.detectFeature("boxShadow")) { version = "5"; } else if (!this.detectFeature("borderImage")) { version = "5.1"; } else { version = "6 or higher, or Maxthon"; } break; case "mozilla-based": if (!this.detectFeature("textShadow")) { version = "Firefox 3.5 or less, etc."; } else if (!this.detectFeature("boxShadow")) { version = "Firefox 3.6, etc."; } else if (!this.detectFeature("textOverflow")) { version = "Firefox 4 - 6, etc."; } else if (!this.detectFeature("borderImage")) { version = "Firefox 7 - 14, etc."; } else if (!this.detectFeature("flexDirection")) { version = "Firefox 15 - 22, etc."; } else { version = "Firefox 23 or higher, SeaMonkey, etc."; } break; default: break; } if (loginAllowed === false) { document.getElementById('first').innerHTML = "<span>Login disallowed</span>"; } document.getElementById('browser').innerHTML = "Detected browser: " + browser; document.getElementById('version').innerHTML = "Detected version: " + version; }, detectFeature: function (property) { if (property in document.documentElement.style) { return true; } else { loginAllowed = false; return false; } }, detectOldOpera: function () { if (window.opera && !this.detectFeature("objectFit")) { //trying to make this future-proof.{ //What if Opera reintroduce window.opera in a future version? return true; } else { return false; } } }; BrowserDetect.init();
<h4>This is a javascript browser-check that I'm updating because of IE11's user-agent string. But this time based on feature rather than User-agent String. Forked from http://jsfiddle.net/kaya_basharan/YNaVk/18/.</h4> <!--[if lt IE 8]> <p id="old_ie_warning">Detected browser: IE 7 or less.</p> <![endif]--> <!--[if IE 8]> <p id="ie8_warning">Detected browser: IE 8.</p> <![endif]--> <!--[if IE 9]> <p id="ie9_warning">Detected browser: IE 9.</p> <![endif]--> <!--[if !IE]> --> <!-- Code for IE10+ and other browsers --> <div> <p id="first">Login allowed</p> <p id="browser"></p> <p id="version"></p> </div> <!--<![endif]-->
[id*=warning] { color: #f00; } span { font-weight: 700; }