如何检测Safari,Chrome,IE,Firefox和Opera浏览器?
我有FF,Chrome,IE,Opera和Safari 5个插件/扩展。
我需要代码来识别用户浏览器并重定向(点击安装按钮)以下载相应的插件。
Google浏览器可靠检测通常会导致检查用户代理字符串。 这种方法不可靠,因为欺骗这个值是微不足道的。
我已经编写了一种通过鸭式打印来检测浏览器的方法。
如果真的有必要,请仅使用浏览器检测方法,例如显示特定于浏览器的指令来安装扩展。 尽可能使用功能检测。
演示:https://jsfiddle.net/311aLtkz/
// Opera 8.0+
var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
// Firefox 1.0+
var isFirefox = typeof InstallTrigger !== 'undefined';
// Safari 3.0+ "[object HTMLElementConstructor]"
var isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || (typeof safari !== 'undefined' && safari.pushNotification));
// Internet Explorer 6-11
var isIE = /*@cc_on!@*/false || !!document.documentMode;
// Edge 20+
var isEdge = !isIE && !!window.StyleMedia;
// Chrome 1+
var isChrome = !!window.chrome && !!window.chrome.webstore;
// Blink engine detection
var isBlink = (isChrome || isOpera) && !!window.CSS;
可靠性分析
前面的方法取决于渲染引擎的属性( -moz-box-sizing
和-webkit-transform
)来检测浏览器。 这些前缀最终会被删除,因此为了使检测更加健壮,我转而使用了浏览器特有的特性:
document.documentMode
。 StyleMedia
构造函数。 不包括三叉戟给我们留下了Edge。 InstallTrigger
chrome
对象,包含多个属性,包括记录的chrome.webstore
对象。 SafariRemoteNotification
进行检查,以覆盖3.0及更高版本中的所有Safaris。 window.opera
已经存在多年了,但是当Opera用Blink + V8(由Chromium使用)替换它的引擎时,它将会被删除。 chrome
对象被定义(但chrome.webstore
不是)。 由于Opera努力克隆Chrome,我为此使用了用户代理嗅探。 !!window.opr && opr.addons
可用于检测Opera 20+(常绿)。 CSS.supports()
在Blink中引入。当然,这与Opera中使用的Blink一样。 成功测试:
2016年11月更新,包括从9.1.3及更高版本检测Safari浏览器
您可以尝试以下方法来检查浏览器版本。
<!DOCTYPE html>
<html>
<body>
<p>What is the name(s) of your browser?</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
<script>
function myFunction() {
if((navigator.userAgent.indexOf("Opera") || navigator.userAgent.indexOf('OPR')) != -1 )
{
alert('Opera');
}
else if(navigator.userAgent.indexOf("Chrome") != -1 )
{
alert('Chrome');
}
else if(navigator.userAgent.indexOf("Safari") != -1)
{
alert('Safari');
}
else if(navigator.userAgent.indexOf("Firefox") != -1 )
{
alert('Firefox');
}
else if((navigator.userAgent.indexOf("MSIE") != -1 ) || (!!document.documentMode == true )) //IF IE > 10
{
alert('IE');
}
else
{
alert('unknown');
}
}
</script>
</body>
</html>
如果你只需要知道IE浏览器版本,那么你可以按照下面的代码。 此代码适用于从IE6到IE11的版本
<!DOCTYPE html>
<html>
<body>
<p>Click on Try button to check IE Browser version.</p>
<button onclick="getInternetExplorerVersion()">Try it</button>
<p id="demo"></p>
<script>
function getInternetExplorerVersion() {
var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE ");
var rv = -1;
if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv:11./)) // If Internet Explorer, return version number
{
if (isNaN(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))))) {
//For IE 11 >
if (navigator.appName == 'Netscape') {
var ua = navigator.userAgent;
var re = new RegExp("Trident/.*rv:([0-9]{1,}[.0-9]{0,})");
if (re.exec(ua) != null) {
rv = parseFloat(RegExp.$1);
alert(rv);
}
}
else {
alert('otherbrowser');
}
}
else {
//For < IE11
alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
}
return false;
}}
</script>
</body>
</html>
我知道使用lib可能会矫枉过正,但为了丰富线程,您可以检查is.js的方法:
is.firefox();
is.ie(6);
is.not.safari();
链接地址: http://www.djcxy.com/p/23033.html
上一篇: How to detect Safari, Chrome, IE, Firefox and Opera browser?