Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Internet explorer 8 检测IE8兼容模式_Internet Explorer 8_Backwards Compatibility_Ie8 Compatibility Mode - Fatal编程技术网

Internet explorer 8 检测IE8兼容模式

Internet explorer 8 检测IE8兼容模式,internet-explorer-8,backwards-compatibility,ie8-compatibility-mode,Internet Explorer 8,Backwards Compatibility,Ie8 Compatibility Mode,可能重复: 我们还没有时间用相当广泛的系统全面测试IE8。我们也达到了不能禁止使用IE8的地步。我们的用户很固执,也不太老练,所以我们觉得我们不能告诉他们使用“兼容模式”按钮。相反,我们将添加“IE=EmulateIE7”元标记作为临时修复 问题是当使用这个标签时,浏览器仍然报告自己是IE8,然后被我们的页面检测到并拒绝。我可以理解为什么服务器端检测无法提取元标记(在发送和处理元标记之前,服务器已经有了用户代理),但是客户端检查也失败了。如果在客户机上单击兼容性模式按钮,则用户代理是IE7,但

可能重复:

我们还没有时间用相当广泛的系统全面测试IE8。我们也达到了不能禁止使用IE8的地步。我们的用户很固执,也不太老练,所以我们觉得我们不能告诉他们使用“兼容模式”按钮。相反,我们将添加“IE=EmulateIE7”元标记作为临时修复

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

这意味着,除其他事项外,我们必须禁用检查,然后,如果我们在某个地方出错,忘记将meta标记添加到页面,我们将有损坏的页面

是否有其他人遇到过这种情况并提出了更好的方法?当模式由meta标记设置时,是否无法检测IE8是否在兼容模式下运行

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

不太可能“检测IE8兼容模式”,但也可能有帮助:


如果您有权访问服务器本身,则可以发送HTTP标头,请查看。的MSDN页面包含标头的详细信息以及如何设置/发送标头。

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

IE8在用户代理字符串中包含一个trident标记,而不管兼容模式如何

有关更多详细信息,请参阅MSDN:

Windows Vista上的IE7
Mozilla/4.0(兼容;MSIE 7.0;Windows NT 6.0)

Windows Vista上的IE8(兼容性视图)
Mozilla/4.0(兼容;MSIE 7.0;Windows NT 6.0;Trident/4.0

Windows Vista上的IE8

Mozilla/4.0(兼容;MSIE 8.0;Windows NT 6.0;Trident/4.0

当您处理来自IE8仿真黑名单网站(如Facebook)的链接时,问题实际上更加复杂

Facebook上的共享链接会导致您的链接在弹出窗口中打开-如果“包含更新网站列表”“是在兼容性视图设置上选中的,默认情况下,弹出窗口会从Facebook看到黑名单推荐人,并在黑名单模式下打开窗口。在Trident\4.0的后台检测时-您将看到值,并设置底层CSS

但是,在浏览器加载后,它会切换出兼容模式,并在不刷新的情况下更改为标准模式。因此,为标准模式指定的CSS错误

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


就像Downlevel设置IE=EmulateI7以强制关闭浏览器一样,您可以添加IE=EmulateI8并强制用户在IE8标准中查看您的页面。这种模式甚至消除了他们选择兼容性视图的能力,并减少了对该模式的测试需求

FYI,关于如何检测兼容性模式的细节(AKA如何检测兼容性视图),请考虑查看下面的链接…


…这显示了一些有用的信息。

兼容性视图下IE7和IE8的用户代理字符串不完全相同,字符串中有一个额外的“Trident 4.0”标记。请看这里:这在IE9或IE10中不起作用?重申这是正确的答案:没有Trident,它是IE7,有Trident,它是IE8(或更高版本)。我知道我是一个后来者,但经过大量测试后,我可以强烈推荐这种检测IE文档呈现模式的方法:我刚刚添加了一个处理(所有情况下?)的解决方案兼容模式到建议的重复问题。来源于原文: