一尘不染

Javascript IE检测,为什么不使用简单的条件注释?[重复]

javascript

为了检测IE,大多数Javascript库都会执行各种技巧。

  • jQuery似乎在页面的DOM中添加了一个临时对象来检测某些功能,
  • YUI2在用户代理的YAHOO.env.ua = function()(文件yahoo.js)中进行正则表达式

为了仅检测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)
   ...

除了由于必须将其添加到所有页面而可能导致的痛苦之外, 还有其他我可能没有意识到的问题/注意事项吗?


阅读 316

收藏
2020-05-01

共1个答案

一尘不染

James Padolsey在GitHub上放了一些代码片段,我将在这里引用:

// ----------------------------------------------------------
// 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;

}());

当然,所有的荣誉都应该归詹姆斯所有,我只是信使(但如果我的复制粘贴操作有误,请射击信使)。

还要看看创建的叉子。保罗·爱尔兰(PaulIrish)在评论中解释了内部工作原理。

2020-05-01