我已经对特定功能进行了功能检测,以决定是否可以使用它或是否必须使用解决方法。但是,不幸的是,我发现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。
答案 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的实际版本。