【发布时间】:2011-05-09 07:45:24
【问题描述】:
为了检测 IE,大多数 Javascript 库都会使用各种技巧。
- jQuery 似乎在页面的 DOM 中添加了一个临时对象以检测某些功能,
- YUI2 在其
YAHOO.env.ua = function()(文件yahoo.js)中对用户代理执行正则表达式
在阅读this answer 之后,我认为这是真的,为了检测 Javascript 中的简单 IE,我们可以简单地添加到我们的页面:
<!--[if IE]><script type="text/javascript">window['isIE'] = true;</script><![endif]-->
<script type="text/javascript" src="all-your-other-scripts-here.js"></script>
现在window.isIE 变量已为我们所有的 Javascript 代码设置,只需执行以下操作:
if(window.isIE)
...
除了因为必须在所有页面中添加它可能会导致痛苦之外,还有什么我可能不知道的问题/注意事项吗?
仅供参考:我知道使用object detection rather than browser detection 会更好,但在某些情况下您仍然必须使用浏览器检测。
【问题讨论】:
-
JS 库尝试使用 JavaScript 而不是条件 cmets 检测 IE 的一个主要原因是,对于条件 cmets,您需要向页面添加另一个脚本(这个脚本甚至看起来很奇怪)。这可能会让一些人(新程序员)感到困惑或惹恼其他人。
-
您忘记关闭条件注释中的 SCRIPT 元素...
-
在一个完美的世界中,您将只有两组 JavaScript 引擎作为目标,IE 和所有其他引擎。我们并不生活在那个世界。没关系,在一个完美的世界里,你只有一个引擎,所有这些都是废话。 (我的意思是,您通常需要的不仅仅是 if !ie)
-
创建的 div 并没有添加到 DOM 中,仅使用
document.createElement创建并在函数返回后丢弃(因为它仅分配给局部变量)。我刚刚在函数执行后(在 IE 和 Firefox 中)测试了document.getElementsByTagName('div').length,它在我的文档中返回了正确数量的 div。 -
这不再起作用了。 IE10 不再支持条件 cmets
标签: javascript internet-explorer browser-detection conditional-comments