用优雅简短的JavaScript判断IE版本号

来源:互联网 发布:广电网络wifi密码修改 编辑:程序博客网 时间:2024/05/01 06:59

平常一般判断IE版本号多数都是使用正则去匹配USER_AGENT,总觉得这个麻烦且有时不太好使,今天在Github Gist上看到一段优雅简短的JavaScript代码,用于判断IE版本号,向后兼容,调用方便。该JS使用到了IE条件注释,对IE条件注释还混淆不清的童鞋可前往这里看看:《IE浏览器条件注释if IE详解》。

  1. // ----------------------------------------------------------
  2. // A short snippet for detecting versions of IE in JavaScript
  3. // without resorting to user-agent sniffing
  4. // ----------------------------------------------------------
  5. // If you're not in IE (or IE version is less than 5) then:
  6. // ieVersion === false
  7. // If you're in IE (>=5) then you can determine which version:
  8. // ieVersion === 7; // IE7
  9. // Thus, to detect IE:
  10. // if (ieVersion) {}
  11. // And to detect the version:
  12. // ieVersion === 6 // IE6
  13. // ieVersion > 7 // IE8, IE9 ...
  14. // ieVersion < 9 // Anything less than IE9
  15. // ----------------------------------------------------------
  16. // UPDATE: Now using Live NodeList idea from @jdalton
  17. var ieVersion = (function() {
  18. var v = 3,
  19. div = document.createElement('div'),
  20. all = div.getElementsByTagName('i');
  21. while (
  22. div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
  23. all[0]
  24. );
  25. return v > 4 ? v : false;
  26. })();

思路很好,新增一个div元素,然后通过使用while循环判断使用IE条件注释的div标签中是否含有i标签,如果含有,v则自增1,直到浏览器无法读取到i标签为止。此时的v值如果大于4则为IE的实际版本号,否则v就是小于IE5的IE浏览器或者非IE浏览器,返回false

另外,此中的while循环使用的也非常巧妙,说实话,我以前没见过这种用法。查了一下书本,实际上这是一个逗号操作符,逗号操作符多用于声明多个变量。但除此之外,逗号操作符还可以用于赋值,返回的是表达式最后一个值,举个例子:

  1. var num = (0,5,6,7,2,9);
  2. console.log(num); // 此时num返回的是最后一个值,即是9

实际上,代码中的while循环可以理解为do-while循环,效果是一样的:

  1. do {
  2. div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->';
  3. } while (all[0]);

参考资源:

  1. A short snippet for detecting versions of IE in JavaScript
  2. 《JavaScript高级程序设计(第3版)》

在Win8.1下使用IE11测试了下,依然未识别,返回为false

原文地址:http://www.liveme.org/ie-detection-by-js.html

0 0