偶然发现了一个问题。当尝试使用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可以找到浏览器版本,但不能找到浏览器名称。 知道如何绕过它?
答案 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模板的一部分发布)。
答案 2 :(得分:5)
jQuery Migrate的目的是允许运行旧的编写错误的代码,而不是鼓励编写新的编写错误的代码。由于那个陈旧的编写错误的代码是在IE11发布之前很久就创建的,所以它无论如何都不知道IE11,并且可能会出错。 jQuery Migrate插件不会被更改为检测IE11。如果您正在编写新代码,请不要使用浏览器检测。而是使用特征检测。
答案 3 :(得分:2)
jQuery.browser
已被弃用且已被删除,您应该使用$.support
或更好的工具,例如Modernizr