可能重复:
分化在IE7兼容模式下IE7浏览器和浏览器
我们还没有来得及与我们相当广泛的系统进行全面测试IE8。 我们也达到了在我们不能禁止使用IE8的点。 我们的用户是固执,不是非常复杂的,所以我们不觉得我们可以告诉他们使用“兼容模式”按钮。 相反,我们将添加“IE = EmulateIE7” meta标记作为临时的解决办法。
问题是,当使用这种标签,浏览器仍然报告本身是IE8,然后由我们的网页上检测和拒绝。 我可以理解为什么服务器端检测无法拿起meta标签(服务器已有的用户代理之前的元标签发送和处理),但客户端检查也会失败。 如果兼容模式按钮被点击的客户机,用户代理是IE7,但如果我们使用了元标记。
这意味着,除其他事项外,我们必须禁用检查,然后,如果我们犯了一个错误的地方,却忘了元标记添加到页面中,我们将打破页面。
有没有其他人遇到了这一点,并想出了一个更好的办法? 难道就没有办法检测到IE8在兼容模式下运行时的模式由meta标签设置?
而且,我们知道,有思想,我们应该只是让所有IE8标准模式兼容,但在我们的现实中的小角落的网页的有效的学校,这不是一个可行的选择,现在(我会指出,我们没有创建4个或5个版本的IE浏览器是有在一个非标准的方式被写入)。
IE8包括在用户代理字符串三叉戟令牌不管兼容模式。
查看MSDN了解更多详细信息: http://blogs.msdn.com/ie/archive/2009/01/09/the-internet-explorer-8-user-agent-string-updated-edition.aspx
IE7在Windows Vista上
Mozilla的/ 4.0(兼容; MSIE 7.0; Windows NT的6.0)
IE8在Windows Vista上(兼容性视图)
Mozilla的/ 4.0(兼容; MSIE 7.0; Windows NT的6.0; 三叉戟/ 4.0)
IE8在Windows Vista上
Mozilla的/ 4.0(兼容; MSIE 8.0; Windows NT的6.0; 三叉戟/ 4.0)
您需要检查document.documentMode的价值,这将有8个在真正的IE8模式和IE7模式的值7。 用户代理字符串将是在两种情况下相同的,将静止状态IE8。 需要注意的是该JavaScript变量只能在IE8使用。
仅供参考,以了解如何检测兼容模式的详细信息(AKA如何检测兼容性视图),请考虑您查看以下链接...
http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx
...这显示了一些有用的信息。
问题实际上是更加复杂,当你处理链接来到你的网站从IE8仿真黑名单中的网站,如Facebook。
一位Facebook上的共享链接会导致你的链接在一个弹出窗口打开 - 如果该“包括更新WEBLISTS”在兼容性视图设置,这是默认选中被选中,在弹出的窗口看见来自Facebook的黑名单引用并打开黑名单窗口最初模式。 当在后台检测三叉戟\ 4.0 - 你会看到的价值,并设置下级CSS。
然而,浏览器加载后进行切换兼容模式并没有令人耳目一新更改为标准模式。 因此,必须对指定的标准模式错误的CSS。
解决方案 - 强制IE浏览器进行兼容模式。 是的 - 似乎很奇怪,为什么让用户去下层在您的网站,如果你不需要。
就像下层设置IE = EmulateI7强制浏览下来,你可以添加IE = EmulateIE8并强制用户在IE8标准来查看您的网页。 这种模式甚至删除他们的选择兼容性视图,并降低你的测试需求该模式的能力
不太“检测IE8兼容模式”,但它可能会帮助一样好:
如果你有机会到服务器本身,你可以发送一个HTTP头,看看迈克·奥蒙德的关于它的博客 。 对于MSDN页面实现在IIS上的元交换机具有头部的细节和如何设置/发送。