检查用户是否使用IE与jQuery

我通过点击某个类的div来调用下面的函数。

如果用户正在使用Internet Explorer,并且在使用其他浏览器的情况下放弃/取消该function,那么有没有办法可以检查这些function? 这里的用户都将在IE8或更高版本,所以我不需要覆盖IE7和更低的版本。

如果我可以告诉他们使用哪个浏览器,这将是很好,但不是必需的。

function示例:

$('.myClass').on('click', function(event) { // my function }); 

使用下面的JavaScript方法:

 function msieversion() { var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); if (msie > 0) // If Internet Explorer, return version number { alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)))); } else // If another browser, return 0 { alert('otherbrowser'); } return false; } 

您可以在下面的Microsoft支持网站上find详细信息:

如何从脚本中确定浏览器版本

更新:( IE 11支持)

 function msieversion() { var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer, return version number { alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)))); } else // If another browser, return 0 { alert('otherbrowser'); } return false; } 

从Internet Explorer 12+(aka Edge)开始, 用户代理string又一次发生了变化。

 /** * detect IE * returns version of IE or false, if browser is not Internet Explorer */ function detectIE() { var ua = window.navigator.userAgent; var msie = ua.indexOf('MSIE '); if (msie > 0) { // IE 10 or older => return version number return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); } var trident = ua.indexOf('Trident/'); if (trident > 0) { // IE 11 => return version number var rv = ua.indexOf('rv:'); return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); } var edge = ua.indexOf('Edge/'); if (edge > 0) { // Edge (IE 12+) => return version number return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); } // other browser return false; } 

示例用法:

 alert('IE ' + detectIE()); 

IE 10的默认string:

 Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0) 

IE 11的默认string:

 Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko 

IE 12的默认string(又名Edge):

 Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0 

边13的默认string(thx @DrCord):

 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586 

边缘14的默认string:

 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/14.14300 

在CodePentesting:

http://codepen.io/gapcode/pen/vEJNZN

只要加上马里奥的非常有用的答案。

如果你想知道的是,如果浏览器是IE浏览器,代码可以简化为:

  var ms_ie = false; var ua = window.navigator.userAgent; var old_ie = ua.indexOf('MSIE '); var new_ie = ua.indexOf('Trident/'); if ((old_ie > -1) || (new_ie > -1)) { ms_ie = true; } if ( ms_ie ) { //IE specific code goes here } 

这对任何版本的Internet Explorer都会返回true

 function isIE(userAgent) { userAgent = userAgent || navigator.userAgent; return userAgent.indexOf("MSIE ") > -1 || userAgent.indexOf("Trident/") > -1 || userAgent.indexOf("Edge/") > -1; } 

userAgent参数是可选的,默认为浏览器的用户代理。

你可以使用导航对象来检测用户导航,你不需要jquery

 <script type="text/javascript"> if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) || navigator.userAgent.indexOf("Trident/") > -1 ){ // do stuff with ie-users } </script> 

http://www.javascriptkit.com/javatutors/navigator.shtml

方法01:
$ .browser在jQuery版本1.3中被弃用,并在1.9中被删除

 if ( $.browser.msie) { alert( "Hello! This is IE." ); } 

方法02:
使用条件注释

 <!--[if gte IE 8]> <p>You're using a recent version of Internet Explorer.</p> <![endif]--> <!--[if lt IE 7]> <p>Hm. You should upgrade your copy of Internet Explorer.</p> <![endif]--> <![if !IE]> <p>You're not using Internet Explorer.</p> <![endif]> 

方法03:

  /** * Returns the version of Internet Explorer or a -1 * (indicating the use of another browser). */ function getInternetExplorerVersion() { 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; } function checkVersion() { var msg = "You're not using Internet Explorer."; var ver = getInternetExplorerVersion(); if ( ver > -1 ) { if ( ver >= 8.0 ) msg = "You're using a recent copy of Internet Explorer." else msg = "You should upgrade your copy of Internet Explorer."; } alert( msg ); } 

方法04:
使用JavaScript /手动检测

 /* Internet Explorer sniffer code to add class to body tag for IE version. Can be removed if your using something like Modernizr. */ var ie = (function () { var undef, v = 3, div = document.createElement('div'), all = div.getElementsByTagName('i'); while ( div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i>< ![endif]-->', all[0]); //append class to body for use with browser support if (v > 4) { $('body').addClass('ie' + v); } }()); 

参考链接

使用上面的答案; 简单&浓缩返回布尔:

var isIE = /(MSIE|Trident\/|Edge\/)/i.test(navigator.userAgent);

使用modernizr

 Modernizr.addTest('ie', function () { var ua = window.navigator.userAgent; var msie = ua.indexOf('MSIE ') > 0; var ie11 = ua.indexOf('Trident/') > 0; var ie12 = ua.indexOf('Edge/') > 0; return msie || ie11 || ie12; }); 

这是Angular团队如何做的( v 1.5.5 ):

 var msie, // holds major version number for IE, or NaN if UA is not IE. /** * documentMode is an IE-only property * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx */ msie = window.document.documentMode; 

然后有几行代码分散在整个使用它作为一个数字,如

 if (event === 'input' && msie <= 11) return false; 

 if (enabled && msie < 8) { 
 function detectIE() { var ua = window.navigator.userAgent; var ie = ua.search(/(MSIE|Trident|Edge)/); return ie > -1; } 

我知道这是一个老问题,但是如果有人再次遇到这个问题,并且在检测IE11时遇到问题,那么这里就是适用于所有当前版本IE的工作解决scheme。

 var isIE = false; if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) { isIE = true; } 

如果你不想使用useragent,你也可以这样做,检查浏览器是否是IE浏览器。 评论的代码实际上运行在IE浏览器中,并将“false”变为“true”。

 var isIE = /*@cc_on!@*/false; if(isIE){ //The browser is IE. }else{ //The browser is NOT IE. } 

我用过这个

 function notIE(){ var ua = window.navigator.userAgent; if (ua.indexOf('Edge/') > 0 || ua.indexOf('Trident/') > 0 || ua.indexOf('MSIE ') > 0){ return false; }else{ return true; } } 

@ SpiderCode的解决scheme无法与IE 11兼容。以下是我在代码中使用的最佳解决scheme,我需要针对特定​​function的浏览器检测。

IE11不再作为MSIE报告,根据这一列表的变化,有意避免误检。

你可以做什么,如果你真的想知道它的IE浏览器是检测用户代理中的三叉戟/string,如果navigator.appName返回Netscape,像(未经testing);

感谢这个答案

 function isIE() { var rv = -1; 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 ); } else if (navigator.appName == 'Netscape') { var ua = navigator.userAgent; var re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})"); if (re.exec(ua) != null) rv = parseFloat( RegExp.$1 ); } return rv == -1 ? false: true; } 

下面我find了一个优雅的做法 – Google

 / detect IE var IEversion = detectIE(); if (IEversion !== false) { document.getElementById('result').innerHTML = 'IE ' + IEversion; } else { document.getElementById('result').innerHTML = 'NOT IE'; } // add details to debug result document.getElementById('details').innerHTML = window.navigator.userAgent; /** * detect IE * returns version of IE or false, if browser is not Internet Explorer */ function detectIE() { var ua = window.navigator.userAgent; // Test values; Uncomment to check result … // IE 10 // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'; // IE 11 // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko'; // IE 12 / Spartan // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0'; // Edge (IE 12+) // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586'; var msie = ua.indexOf('MSIE '); if (msie > 0) { // IE 10 or older => return version number return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); } var trident = ua.indexOf('Trident/'); if (trident > 0) { // IE 11 => return version number var rv = ua.indexOf('rv:'); return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); } var edge = ua.indexOf('Edge/'); if (edge > 0) { // Edge (IE 12+) => return version number return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); } // other browser return false; } 

这里有很多答案,我想添加我的input。 IE 11对于flexbox(看到它所有的问题和不一致之处)是一个很好的屁股,我真的需要一个简单的方法来检查一个用户是否使用任何IE浏览器(包括11),但不包括Edge,因为Edge实际上是很不错。

基于这里给出的答案,我写了一个简单的函数,返回一个全局布尔variables,然后您可以使用该行。 检查IE是很容易的。

 var isIE; (function() { var ua = window.navigator.userAgent, msie = ua.indexOf('MSIE '), trident = ua.indexOf('Trident/'); isIE = (msie > -1 || trident > -1) ? true : false; })(); if (isIE) { alert("I am an Internet Explorer!"); } 

这样你只需要查一次,然后将结果存储在一个variables中,而不必在每个函数调用中获取结果。 (据我所知,你甚至不需要等待文档准备好执行这个代码,因为用户代理与DOM没有关系。)

试试这个,如果你使用jquery版本> = 1.9

 var browser; jQuery.uaMatch = function (ua) { ua = ua.toLowerCase(); var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || /(webkit)[ \/]([\w.]+)/.exec(ua) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || /(msie) ([\w.]+)/.exec(ua) || ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || /(Trident)[\/]([\w.]+)/.exec(ua) || []; return { browser: match[1] || "", version: match[2] || "0" }; }; // Don't clobber any existing jQuery.browser in case it's different if (!jQuery.browser) { matched = jQuery.uaMatch(navigator.userAgent); browser = {}; if (matched.browser) { browser[matched.browser] = true; browser.version = matched.version; } // Chrome is Webkit, but Webkit is also Safari. if (browser.chrome) { browser.webkit = true; } else if (browser.webkit) { browser.safari = true; } jQuery.browser = browser; } 

如果使用jQuery版本<1.9 (jQuery 1.9中删除了$ .browser),请改用以下代码:

 $('.myClass').on('click', function (event) { if ($.browser.msie) { alert($.browser.version); } }); 

您可以检测所有的Internet Explorer(最后testing版本12)。

 <script> var $userAgent = ''; if(/MSIE/i['test'](navigator['userAgent'])==true||/rv/i['test'](navigator['userAgent'])==true||/Edge/i['test'](navigator['userAgent'])==true){ $userAgent='ie'; } else { $userAgent='other'; } alert($userAgent); </script> 

见这里https://jsfiddle.net/v7npeLwe/

 function msieversion() { var ua = window.navigator.userAgent; console.log(ua); var msie = ua.indexOf("MSIE "); if (msie > -1 || navigator.userAgent.match(/Trident.*rv:11\./)) { // If Internet Explorer, return version numbe // You can do what you want only in IE in here. var version_number=parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))); if (isNaN(version_number)) { var rv_index=ua.indexOf("rv:"); version_number=parseInt(ua.substring(rv_index+3,ua.indexOf(".",rv_index))); } console.log(version_number); } else { //other browser console.log('otherbrowser'); } } 

你应该看到在控制台的结果,请使用铬检查。

我已经把这个代码放在文档就绪函数中,它只能在Internet Explorer中触发。 在Internet Explorer 11中testing

 var ua = window.navigator.userAgent; ms_ie = /MSIE|Trident/.test(ua); if ( ms_ie ) { //Do internet explorer exclusive behaviour here } 

更新到SpiderCode的解决scheme,其中string“MSIE”返回-1,但它匹配“三叉戟”的问题。 它用来返回NAN,但现在返回该版本的IE的11。

  function msieversion() { var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); if (msie > -1) { return ua.substring(msie + 5, ua.indexOf(".", msie)); } else if (navigator.userAgent.match(/Trident.*rv\:11\./)) { return 11; } else { return false; } } 

尝试这样做

 if ($.browser.msie && $.browser.version == 8) { //my stuff } 

您可以使用$.browser获取名称,供应商和版本信息。

请参阅http://api.jquery.com/jQuery.browser/