问题描述
为了检测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()
(fileyahoo.js
)
阅读它在我脑海中浮现,它是真的,为了检测IE在Javascript中我们可以简单地添加到我们的页面:
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提出:
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检测,为什么不使用简单的条件注释?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!