27

刚刚偶然发现一个问题。当尝试使用 Jquery 检测 IE 11(目前正在播出的 beta 版本)时,结果是“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

4 回答 4

63

最终的解决方案:

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

我们只能希望发布版本也能起到同样的作用。

于 2013-09-08T14:04:47.777 回答
7

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

因此,不要进行浏览器检测,而是进行特征检测。请参阅浏览器检测与特征检测。有一些很棒的库,其中Modernizr可能是最著名的(微软将它作为 Visual Studio 中 ASP.NET 模板的一部分提供)。

请参阅有关 IE 11 用户代理字符串的 MSDN 博客

于 2014-08-13T18:24:46.710 回答
5

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

于 2013-09-29T14:47:05.547 回答
2

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

于 2013-09-08T22:36:44.927 回答