Javascript IE 检测,为什么不使用简单的条件注释? [英] Javascript IE detection, why not use simple conditional comments?

查看:17
本文介绍了Javascript IE 检测,为什么不使用简单的条件注释?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为了检测 IE,大多数 Javascript 库会做各种各样的把戏.

In order to detect IE most Javascript libaries do all sort of tricks.

  • jQuery 似乎在页面的 DOM 中添加了一个临时对象来检测某些功能,
  • YUI2 在其 YAHOO.env.ua = function()(文件 yahoo.js)
  • 中对用户代理执行正则表达式
  • jQuery seem to add a temporary object into your pages's DOM to detect some features,
  • YUI2 does regex on the user agent in its YAHOO.env.ua = function() (file yahoo.js)

阅读这个答案后我想到这是真的,为了在 Javascript 中简单地检测 IE,我们可以简单地添加到我们的页面中:

After reading this answer it came in my mind that it's true, in order to detect simply IE in Javascript we could simply add to our pages:

<!--[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 代码设置,只需执行以下操作:

Now the window.isIE variable is set for all our Javascript code, by simply doing:

if(window.isIE)
   ...

除了这可能会导致痛苦,因为它必须添加到所有页面中,还有什么我可能不知道的问题/注意事项吗?

Beside the fact that this might result in being a pain because it has to be added in all pages, are there any issues/considerations I might be unaware of?

仅供参考:我知道最好使用对象检测而不是浏览器检测,但在某些情况下,您仍然需要使用浏览器检测.

FYI: I know it's better to use object detection rather than browser detection, but there are cases where you still have to use browser detection.

推荐答案

James Padolsey 在 GitHub 上放了一个小片段 我将在这里引用:

James Padolsey put a little snippet on GitHub that I'll quote here:

// ----------------------------------------------------------
// A short snippet for detecting versions of IE in JavaScript
// without resorting to user-agent sniffing
// ----------------------------------------------------------
// If you're not in IE (or IE version is less than 5) then:
// ie === undefined
// If you're in IE (>=5) then you can determine which version:
// ie === 7; // IE7
// Thus, to detect IE:
// if (ie) {}
// And to detect the version:
// ie === 6 // IE6
// ie > 7 // IE8, IE9 ...
// ie < 9 // Anything less than IE9
// ----------------------------------------------------------

// UPDATE: Now using Live NodeList idea from @jdalton

var ie = (function(){

    var undef,
        v = 3,
        div = document.createElement('div'),
        all = div.getElementsByTagName('i');

    while (
        div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
        all[0]
    );

    return v > 4 ? v : undef;

}());

当然,所有的功劳都应该归詹姆斯所有,我只是信使(但如果我的复制粘贴操作出错,请射击信使).

Of course all credits should go to James, I'm only the messenger (but please shoot the messenger if my copy-paste action erred).

还要查看创建的分叉.Paul Irish 在评论中解释了内部运作.

Also look at the forks that were created. Paul Irish explained the inner workings in a comment.

这篇关于Javascript IE 检测,为什么不使用简单的条件注释?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆