Jquery检查浏览器是否为IE

8

我该如何检查用户的浏览器是否为IE?我有以下代码,但它似乎不起作用。

if($.browser.msie && $.browser.version <= 9)
{
    alert('You Are Using An Outdated Browser! Switch To Chrome Or FireFox.');   
}

1
如果您坚持使用浏览器检测,IE条件注释已经存在于此目的。 - kinakuta
8
MSIE是一种浏览器品牌,而不是某个版本的浏览器。显示一个声称它已经“过时”的消息是毫无意义的。 - Will Palmer
3
如果我使用IE10浏览器,那么我使用的是过时的浏览器吗? - Hugo Dozois
6
那么你应该测试FormData功能,而不是测试IE浏览器。 - Alohci
1
测试功能支持,而非浏览器类型。 - i_am_jorf
显示剩余4条评论
5个回答

17

尝试使用James Padolsey的这个解决方案

// ----------------------------------------------------------
// If you're not in IE (or IE version is less than 5) then:
//     ie === undefined
// If you're in IE (>5) then you can determine which version:
//     ie === 7; // IE7
// Thus, to detect IE:
//     if (ie) {}
// And to detect the version:
//     ie === 6 // IE6
//     ie> 7 // IE8, IE9 ...
//     ie <9 // Anything less than IE9
// ----------------------------------------------------------
var ie = (function(){
    var undef, v = 3, div = document.createElement('div');

    while (
        div.innerHTML = '<!--[if gt IE '+(++v)+']><i></i><![endif]-->',
        div.getElementsByTagName('i')[0]
    );

    return v> 4 ? v : undef;
}());

评论区还有其他有趣的解决方案。


1
这个解决方案在IE10中返回undefined - Adriano
2
Microsoft已经移除了IE10的条件注释。见http://www.sitepoint.com/microsoft-drop-ie10-conditional-comments/ - doiley

11

browser在1.9版本中已被移除:

描述: 包含用户代理的标志,从navigator.userAgent读取。我们建议不要使用此属性,请尝试使用特性检测(请参见jQuery.support)。jQuery.browser可能会在未来的jQuery版本中移动到插件中。


1
因此,一个人会使用这个检查FormData:var canFormData = (typeof FormData !== 'undefined');。还有一些功能检测库,例如Modernizr - ComFreek

6

测试功能,而不是浏览器。如果您使用并需要像您在评论中所述的FormData,请更改您的检查方式:

if ( !("FormData" in window) ) {
   // Tell the user to use a better browser, or whatever
}

这是测试浏览器是否能够满足你的需求最准确的方法。你永远不知道什么时候会出现可能或不可能支持你所需功能的新浏览器。这将帮助你避免错误的结果。 - cimmanon
3
浏览器检测有时很有用。例如,window.onhashchange 存在,但在 IE 7 和 9 上无法触发。 - David Sherret

4
MS推荐的方式如何呢:http://msdn.microsoft.com/en-us/library/ms537509(v=vs.85).aspx(当然,UserAgent可以被欺骗...但是,如果有人在欺骗他们的UserAgent,你真的关心他们在你的网站上看到什么吗?)
 function getInternetExplorerVersion()
 // Returns the version of Internet Explorer or a -1
 // (indicating the use of another browser).
 {
    var rv = -1; // Return value assumes failure.

    if (navigator.appName == 'Microsoft Internet Explorer')
    {
        var ua = navigator.userAgent;
        var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");

        if (re.exec(ua) != null) rv = parseFloat( RegExp.$1 );
    }
    return rv;
}

0

只是提醒一下(虽然没有直接回答问题);与其使用浏览器检测,使用功能检测更好

这就是为什么有Modernizr的原因;

为什么要使用Modernizr

利用新的网络技术非常有趣,直到你不得不支持落后的浏览器。Modernizr使您能够编写条件JavaScript和CSS来处理每种情况,无论浏览器是否支持某个功能。它非常适合轻松进行渐进式增强。

所以你可以像这样使用它;

Modernizr.canvas ? showGraph() : showTable();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接