Ehu*_*and 26 jquery browser-detection internet-explorer-11
只是偶然发现了一个问题.当尝试使用Jquery检测IE 11(目前正在播出的测试版)时,结果为'firefox'.相同的代码检测IE 10.我需要知道用户正在使用什么浏览器才能显示不同的指令.
我在Oracle VirtualBox中测试是否重要.操作系统是Win 7.
这是代码:
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script>
var browser = function() { 
if ($.browser.msie) return "ie";
var ua = navigator.userAgent.toLowerCase();
if ($.browser.mozilla/* && /firefox/.test(ua)*/) return "firefox"; 
if (/chrome/.test(ua)) return "chrome";
return /*"#"*/'unknown';
} ();
alert (browser); // This return firefox
alert ($.browser.version); // This returns 11.0 - the CORRECT version of IE
</script>
如您所见,Jquery可以找到浏览器版本,但不能找到浏览器名称.知道如何绕过它吗?
Ehu*_*and 62
最终的解决方案:
if (!!navigator.userAgent.match(/Trident\/7\./))
  return "ie";  
我们只能希望发布版本的行为相同.
这是出于兼容性原因.客户端代码通常执行浏览器检测而不是功能检测(这是一种不好的做法).因此,为了确保客户端正确使用IE 11的所有功能,Microsoft已经做到了这一点,IE 11将报告它与Mozilla兼容.
因此,不进行浏览器检测,而是进行特征检测.请参阅浏览器检测与功能检测.有一些很棒的库,Modernizr可能是最知名的(并且Microsoft将它作为Visual Studio中ASP.NET模板的一部分发布).
jQuery Migrate的目的是允许运行旧的编写糟糕的代码,而不是鼓励编写新的编写错误的代码.由于那个陈旧的编写错误的代码是在IE11发布之前很久就创建的,所以它无论如何都不知道IE11,并且可能会出错.jQuery Migrate插件不会被更改为检测IE11.如果您正在编写新代码,请不要使用浏览器检测.而是使用特征检测.