Jquery无法检测到IE 11

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>
Run Code Online (Sandbox Code Playgroud)

如您所见,Jquery可以找到浏览器版本,但不能找到浏览器名称.知道如何绕过它吗?

Ehu*_*and 62

最终的解决方案:

if (!!navigator.userAgent.match(/Trident\/7\./))
  return "ie";  
Run Code Online (Sandbox Code Playgroud)

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

  • `if(/ Trident\/ 7\./).test(navigator.userAgent))`更好,因为`.test()`实际上返回一个布尔值 - 而且速度要快得多.使用`.match()`返回一个带有结果的数组. (10认同)
  • 这就是我从微软那里得到的:"你报告的"错误"是HTML5规范的一部分并且是有意的.这是业界广泛努力阻止向不同浏览器定制内容的网站的一部分." (9认同)
  • "行业"很容易通过简单地符合规范来消除浏览器测试.然而,即使是规格也是众所周知的缺陷,实施工作也不会更好.功能测试显然是规范开发的更好方法,但并非所有错误/功能都能被检测到. (5认同)

mas*_*son 7

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

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

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


Dav*_*vin 5

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

  • 我知道这是福音,但我不认为我的代码使用浏览器插件(并且必须提供特定于浏览器的用户提示)是"写得不好".哦,等等,我知道:"不要使用插件!" 除了我的插件用于文档扫描......"不支持扫描!" 除了我们的客户每年需要扫描数百万份纸质文档......"让您的客户停止使用纸张!" 这是财富500强和政府......"生活在一个不同的世界!" 哦好的.得到它了. (8认同)