我该如何检测IE浏览器?

时间:2012-08-29 20:52:35

标签: javascript cross-browser browser-feature-detection

我已经对特定功能进行了功能检测,以决定是否可以使用它或是否必须使用解决方法。但是,不幸的是,我发现IE在该功能中存在一些错误,即使它存在,也会对我无效。所以,即使它通过了功能检测,我也需要检测到浏览器是IE,所以如果它是IE,我不会使用该功能。

我试图看看我是否可以对实际的错误行为进行特征检测(这将是最好的,因为如果IE修复了将来的行为它会适应),但似乎没有任何方法可以做(different question的主题)。这意味着我只想确定它是一个IE浏览器,所以我可以避免这个错误的功能。 我不想使用useragent字符串,因为我们都知道它很容易被欺骗,很容易出错。

所以,我想对是否是IE浏览器进行功能检测。

到目前为止我的方法是:

var isIE = (document.body.attachEvent && window.ActiveXObject);

这会查看是否存在attachEvent()方法以及是否存在ActiveXObject支持。我必须做的不仅仅是attachEvent检查,因为Opera支持attachEvent

这是检测IE的可靠方法吗?还有更好的方法吗?

请不要回复我真的不应该进行浏览器检测,而应该使用功能检测。我已经在进行功能检测,但这导致了一个问题,因为“支持”该功能并因此通过功能检测的浏览器结果是如此错误,以至于我无法在该浏览器中使用该功能。所以,现在我必须检测出错误的浏览器。

如果您想了解更多关于此问题的具体情况,请参阅this other question

3 个答案:

答案 0 :(得分:10)

条件注释条件编译,在此解释:

http://www.quirksmode.org/css/condcom.html

或者在这里找到的相关堂兄:

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

两者都是Internet Explorer独有的,因此它们将允许您嗅探IE。

<script type="text/javascript">

/*@cc_on
document.write("JScript version: " + @_jscript_version + ".<br>");
   /*@if (@_jscript_version >= 5)
      document.write("JScript Version 5.0 or better.<br \/>");
      document.write("This text is only seen by Internet Explorer browsers that support JScript 5+<br>");
   @else @*/
      document.write("This text is seen by all other browsers (ie: Firefox, IE 4.x etc)<br>");
   /*@end
@*/

</script>

答案 1 :(得分:6)

在链接的帖子中,给出了条件评论的建议。这将允许您甚至检测IE的版本。

在你的头脑中添加这样的东西:

<!--[if lt IE 9]>
  <script type="text/javascript">
    var lt9=true;
  </script>
<![endif]-->

这是IE特有的,在其他浏览器中会被忽略。

对于简单检测,请使用以下内容:

<!--[if gte IE 6]>
  <script type="text/javascript">
    // this is IE greater than or equal to 6
    var isIE=true;
  </script>
<![endif]-->

答案 2 :(得分:0)

使用条件注释而不是条件编译具有允许检测IE版本的优势(与JScript版本相反,这是条件编译中最好的)。您可以使用innerHTML从脚本执行此操作,如下所示。以下示例显示了如何检测IE 8或更低版本:

var div = document.createElement("div");
div.innerHTML = "<!--[if lte IE 8]><i></i><![endif]-->";
var isIe8orLower = (div.getElementsByTagName("i").length == 1);

alert("Is IE 8 or lower: " + isIe8orLower);

请注意IE 10 and later do not support conditional comments at all。但是,conditional compilation继续有效并且是下一个最佳选择,所以我建议使用它,但如上所述,它无法识别IE的实际版本。