Jquery无法检测到IE 11

时间:2013-09-08 13:16:37

标签: jquery internet-explorer-11 browser-detection

偶然发现了一个问题。当尝试使用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可以找到浏览器版本,但不能找到浏览器名称。 知道如何绕过它?

4 个答案:

答案 0 :(得分:61)

最终解决方案:

if (!!navigator.userAgent.match(/Trident\/7\./))
  return "ie";  

我们只能希望发布版本的行为相同。

答案 1 :(得分:7)

出于兼容性原因。客户端代码通常执行浏览器检测而不是功能检测(这是一种不好的做法)。因此,为了确保客户端正确使用IE 11的所有功能,Microsoft已经做到了这一点,IE 11将报告它与Mozilla兼容。

因此,不进行浏览器检测,而是进行特征检测。见Browser detection versus feature detection。有一些很棒的库,Modernizr可能是最知名的(并且Microsoft将它作为Visual Studio中ASP.NET模板的一部分发布)。

请参阅MSDN blog about IE 11 User Agent Strings

答案 2 :(得分:5)

jQuery Migrate的目的是允许运行旧的编写错误的代码,而不是鼓励编写新的编写错误的代码。由于那个陈旧的编写错误的代码是在IE11发布之前很久就创建的,所以它无论如何都不知道IE11,并且可能会出错。 jQuery Migrate插件不会被更改为检测IE11。如果您正在编写新代码,请不要使用浏览器检测。而是使用特征检测。

答案 3 :(得分:2)

jQuery.browser已被弃用且已被删除,您应该使用$.support或更好的工具,例如Modernizr