13

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

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

所以,我想对它是否是IE浏览器进行特征检测。

到目前为止我的方法是这样的:

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

这将查看该attachEvent()方法是否存在以及是否ActiveXObject存在支持。因为attachEventOpera 支持attachEvent.

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

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

如果您想了解更多有关使用此功能的具体情况,请参阅this other question

4

3 回答 3

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>
于 2012-08-29T21:00:57.643 回答
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]-->
于 2012-08-29T20:59:53.710 回答
0

使用条件注释而不是条件编译具有允许检测 IE 版本的优点(与 JScript 版本相反,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 和更高版本根本不支持条件注释。但是,条件编译仍然有效,是次佳选择,因此我建议使用它,尽管如上所述,它无法识别 IE 的实际版本。

于 2012-10-03T16:59:38.210 回答