使用javascript可靠地检测IE8

时间:2010-08-31 13:03:35

标签: javascript internet-explorer internet-explorer-8

我已经编写了一个Web应用程序,需要IE版本8(或者更高版本)。如果我在VM上的干净Windows安装上运行IE8,它会在javascript中使用navigator.userAgent查询时将'MSIE 8.0'报告为用户代理。但是在同事的Windows 7机器上,他的IE在帮助|关于窗口中报告版本8,但是用户代理字符串是'MSIE 7.0'。

我认为在他的机器上的某个地方有一个设置告诉IE欺骗以前的版本,我认为某种兼容性设置,但对于我的生活我找不到它。我不是从我的最终设置quirksmode或IE7兼容模式。

8 个答案:

答案 0 :(得分:12)

<meta http-equiv="X-UA-Compatible" content="IE=8">
<script type="text/javascript">
var is_ie8_or_newer = false;
</script>
<!--[if gte IE 8]>
<script type="text/javascript">
is_ie8_or_newer = true;
</script>
<![endif]-->

答案 1 :(得分:7)

用户代理不是确定浏览器版本的合理或可靠方式。 为什么不通过仅使用IE8来查找所需功能并使用它? 这是一种更可靠的方法。

答案 2 :(得分:4)

我见过的最有趣的技巧 - 不知道效率如何 - 是动态利用IE条件评论功能 。为此,您的代码会在文档片段中隐藏<div><div>或其他任何内容,并在其中插入一些HTML,其中包含一个条件注释,用于检查特定浏览器版本:< / p>

var dummy = document.getElementById('dummy');
dummy.innerHTML = '<!' + '--[if IE 8]>x<![endif]-->';
var isIE8 = dummy.innerHTML === 'x';

IE8可以在URL框旁边显示一个小按钮,用于在IE7模式和IE8模式之间切换浏览器。您可以打开“开发人员工具”,并告诉您当前的设置是什么。

答案 3 :(得分:2)

你能使用条件评论吗?

<script>
  var is_ie8 = false;
</script>
<!--[if IE 8]>
  <script>
    is_ie8 = true;
  </script>
<![endif]-->

答案 4 :(得分:0)

http://www.modernizr.com/

它应该检测到这些问题。或者,我不确定,但IE 8可能会在“兼容模式”中切换其User-Agent标记。

答案 5 :(得分:0)

我能弄清楚如何让我的IE8版本说它是IE7的唯一方法是启用兼容性视图。见http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx

答案 6 :(得分:0)

原来他的浏览器设置为在兼容模式下显示所有“内部网站点”。此外,是的,兼容模式会更改用户代理字符串。

答案 7 :(得分:0)

GIT (in the comments)上找到了这个甜蜜的功能:

function getIEVersion() 
{    
    var v = 3, div = document.createElement('div'), a = div.all || [];
    while (div.innerHTML = '<!--[if gt IE '+(++v)+']><br><![endif]-->', a[0]); 
    return v > 4 ? v : !v;    
};