27

可能重复:
Differentiate IE7 browser and browser in IE7 compatibility mode检测IE8兼容模式

我们还没有来得及与我们相当广泛的系统进行全面测试IE8。我们也达到了禁止使用IE8的程度。我们的用户固执而且不复杂,所以我们不觉得我们可以告诉他们使用“兼容模式”按钮。相反,我们将添加“IE = EmulateIE7”元标记作为临时修复程序。

问题是,当使用这个标签时,浏览器仍然报告自己是IE8,然后被我们的页面检测到并被拒绝。我可以理解为什么服务器端检测无法获取元标记(在元标记发送和处理之前服务器已经拥有用户代理),但客户端检查也失败。如果在客户机上单击了兼容性模式按钮,则用户代理是IE7,但如果我们使用元标记,则不是。

这意味着,除其他外,我们必须禁用检查,然后,如果我们在某个地方犯了一个错误,并忘记将meta标记添加到页面,我们将打破页面。

有没有其他人遇到过这个问题,想出一个更好的方法?当模式由元标记设置时,是否无法检测IE8是否以兼容模式运行?

而且,我们确实知道有一个有效的思想流派,我们应该使所有页面与IE8标准模式兼容,但是在我们现实的小角落,这不是一个现在可行的选择(而且我'我们会指出,我们没有创建必须以非标准方式编写的IE的4或5个版本)。

+0

我知道我是一个后来者,但经过相当数量的测试后,我可以强烈推荐这种方法来检测IE文档呈现模式:http://stackoverflow.com/a/13732003/850782 – EpicVoyage 2014-01-10 16:40:53

+0

我刚刚添加了一个解决方案将处理(所有情况?)兼容模式为建议的重复问题。从原始来源:http://stackoverflow.com/a/29288153/2879498 – TylerY86 2015-04-08 19:39:28

回答

12

您需要检查document.documentMode的值,该值在真正的IE8模式下为8,在IE7模式下为7。用户代理字符串在两种情况下都是相同的,并且仍然会声明IE8。请注意,此JavaScript变量仅在IE8中可用。

+4

的用户代理字符串是不完全下兼容性视图IE7和IE8一样,有一个额外的“三叉戟4.0”的字符串中的令牌。看到这里:http://blogs.msdn.com/ie/archive/2009/01/09/the-internet-explorer-8-user-agent-string-updated-edition.aspx – 2009-08-31 03:55:54

+1

这不会在IE9中工作或IE10? – djangofan 2012-12-03 17:34:56

24

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(compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0

Windows Vista上的IE8
Mozilla/4.0(compatible; MSIE 8.0; Windows NT 6.0; 三叉戟/ 4。0

+4

重申这是正确的答案:没有三叉戟是IE7,而Trident是IE8(或更高版本)。 – GlennG 2012-11-22 15:13:18

2

问题实际上在您处理来自IE8仿真BLACKLIST网站(如Facebook)的链接到您的网站时更加复杂。

Facebook上的共享链接导致您的链接在Popup中打开 - 如果在兼容性视图设置中选中了“INCLUDE UPDATES WEBLISTS”(默认选中),弹出窗口将显示Facebook上的黑名单引用来源并打开该窗口最初处于黑名单模式。当在Trident \ 4.0的背景中检测到时 - 您将看到该值,并设置低级CSS。

但是,在浏览器加载后,它会切换到“共享”模式并更改为“标准”模式而不刷新。因此,您分配的标准模式有错误的CSS。

解决方案 - 强制IE浏览器退出兼容模式。是的 - 看起来很奇怪,为什么让用户在你不需要的时候在你的网站上下了一层。

就像Downlevel一样,您设置IE = EmulateI7来强制浏览器向下,您可以添加IE = EmulateIE8并强制用户在IE8 Standard中查看您的页面。这种模式甚至删除他们的选择兼容性视图,并降低你的测试需要该模式