检查用户是否正在使用IE浏览器

490

我会通过点击具有特定类的div来调用以下类似的函数。

是否有一种方法可以在启动函数时检查用户是否正在使用Internet Explorer,并在他们使用其他浏览器时中止/取消它,以便它仅适用于IE用户?这里的用户都将在IE8或更高版本上运行,因此我不需要覆盖IE7和更低版本。

如果我能知道他们正在使用哪个浏览器,那就太好了,但并非必需。

示例函数:

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

7
按照现代Web开发标准,开发旧版IE的做法是不好的。 - Rosseyn
11
实际上,这种“不良做法”是由标准本身强制实施的,所以这不是开发者的错......浏览器的工作方式不同,规范对实现问题过于宽松。为了做出既不会有漏洞又不会无聊透顶的东西,必须进行浏览器检测。我建议采用另一种最佳实践:随着现代Web开发的发展,支持非基于Chromium的浏览器是一种不良做法(其中Safari被认为根本不是基于Chromium的)。很抱歉,但这种疯狂必须在某个时候以某种方式结束...... - user2173353
4
现今最好的实践是使用“特性检测”而非“浏览器检测”。询问所需功能是否由浏览器提供即可。 - Chris Rogers
2
@Chris - 抱歉...我的本意是想让那句话更有幽默感。我要把责任归咎于IE窃取了我的快乐,留下了苦涩和沮丧。 :) - JDB
2
@JDB - 完全不用担心。IE浏览器(又称“欢乐的月亮面孔杀手”)已经扼杀了许多人的灵魂。 :-) - Chris Rogers
显示剩余9条评论
33个回答

2
@SpiderCode的解决方案不能用于IE 11。以下是我在需要特定功能的浏览器检测中使用的最佳解决方案。
根据这个变更列表,IE11不再报告为MSIE,这是有意为之以避免误检测。
如果你真的想知道它是否是IE,可以在用户代理中检测Trident/字符串,如果navigator.appName返回Netscape,可以尝试类似下面的代码(未经测试);
感谢这个答案
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;
}

1

在我谷歌搜索的过程中,我发现了以下优雅的方法来实现这个目标 ---

/ 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;
}

1
这正是来自 我的CodePen笔记本 的代码,它是我回答这个问题的一部分。;-) - Mario
1
是的,我也用了同样的方法,但是 Stack Overflow 的人不想分享链接。今后我会在参考文献中更新链接。感谢你的出色工作,Mario。 - Rameshwar Vyevhare

1
这是另一种检测IE的方法,而无需查看用户代理。

var usingIE="__IE_DEVTOOLBAR_CONSOLE_EVAL_ERROR" in document;
alert("You are"+(usingIE?"":"n't")+" using Internet Explorer.");

我在测试我的网站是否能在IE上正常工作时,无意中发现了这个。我进入了调试器并点击了文件夹图标。它有我的脚本,还有一个我没有的 Dynamic Scripts 文件夹。我打开了它,发现了很多 browsertools.library.js 文件。在它们里面,我找到了一些内容,比如:

document.__IE_DEVTOOLBAR_CONSOLE_EVAL_RESULT = undefined;
document.__IE_DEVTOOLBAR_CONSOLE_EVAL_ERROR = false;
document.__IE_DEVTOOLBAR_CONSOLE_EVAL_ERRORCODE = undefined;
try{
document.__IE_DEVTOOLBAR_CONSOLE_EVAL_RESULT = eval("\r\n//# sourceURL=browsertools://browsertools.library.js");
}
catch( eObj ){
document.__IE_DEVTOOLBAR_CONSOLE_EVAL_ERRORCODE = eObj.number;
document.__IE_DEVTOOLBAR_CONSOLE_EVAL_RESULT = eObj.message || eObj.description || eObj.toString();
document.__IE_DEVTOOLBAR_CONSOLE_EVAL_ERROR = true;
}

因此,我使用这些来测试用户的浏览器是否为IE。请注意,这仅适用于想要知道他们是否使用IE,而不是确切的IE版本。


1

我在2020年登陆了这个页面,看到至IE5的所有userAgent字符串都有Trident,我不确定它们是否改变了什么。因此,仅检查userAgent中的Trident对我有效。

var isIE = navigator.userAgent.indexOf('Trident') > -1;

1

更新SpiderCode的答案以解决字符串“MSIE”返回-1但匹配“Trident”的问题。它以前返回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;
       }
    }

0

这只适用于IE 11版本以下。

var ie_version = parseInt(window.navigator.userAgent.substring(window.navigator.userAgent.indexOf("MSIE ") + 5, window.navigator.userAgent.indexOf(".", window.navigator.userAgent.indexOf("MSIE "))));

console.log("版本号", ie_version);


0
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');
}
}

您应该在控制台中看到结果,请使用Chrome检查。


0

JavaScript函数用于检测Internet Explorer或Edge的版本

function ieVersion(uaString) {
  uaString = uaString || navigator.userAgent;
  var match = /\b(MSIE |Trident.*?rv:|Edge\/)(\d+)/.exec(uaString);
  if (match) return parseInt(match[2])
}

0

您可以检测所有的Internet Explorer浏览器(最后测试版本为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/


0

我把这段代码放在文档就绪函数中,它只在Internet Explorer中触发。在Internet Explorer 11中进行了测试。

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

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