如何为 IE10 和 IE11 设置不同的用户代理

How to set a different user agent for IE10 and IE11

我在 Tomcat 上有一个 java 网络应用程序 运行,它在 Internet Explorer 8 中运行,并且通过将用户代理字符串设置为 IE8 模式在 Internet Explorer 10 中运行。此 Web 应用程序主要通过 content="IE=10" 在 IE10 模式下在 Internet Explorer 11 中运行。由于 IE11 仿真问题,Web 应用程序无法在 IE8 模式下的 IE11 中运行。 IE11 的边缘模式不起作用。 IE10 模式是现阶段唯一可行的选择。

我正在寻找一种方法将IE10的浏览器模式设置为模拟IE8,并在没有conditional comments的情况下将IE11设置为模拟IE10。

我们在 Windows 7 上有使用 IE8、IE10 和 IE11 的用户。 IE10 是当前使用的主要浏览器。我们正在转向 IE11 "soon"。不能使用其他浏览器。用户无法选择IE版本,随着时间的推移会升级到IE11。

回答问题:"Why set IE=8 mode for IE10 and IE=10 mode for IE11?":

可能会修复一些 Web 应用程序代码,以便 IE11 在 IE=10 模式下工作。 IE8 的 IE11 仿真已损坏到不值得尝试修复的程度。供应商不支持 IE11。我能做的最好的事情就是设置一个适用于大多数功能的仿真模式,并尽可能修复其余部分。

IE=8是适用于IE8和IE10的UA模式。这需要保留到不再使用IE10。

<meta http-equiv="X-UA-Compatible" content="IE=8" />

IE11 中最有希望让此应用程序运行的 UA 设置是 IE=10。这不能直接设置,因为它会破坏 IE10 用户的应用程序。仅对于 IE11,这是一个解决方案:

<meta http-equiv="X-UA-Compatible" content="IE=10" />

Conditional comments are no longer supported by IE10 and IE11. 这意味着下面的代码不起作用。它导致 IE11 的文档模式为 Edge。

<!--[if IE 11]>    
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<![endif]-->

content="IE=8, IE=10" 的设置适用于 IE11 但不适用于 IE10。

使用 Velocity,可以通过抓取用户代理然后根据用户代理字符串设置模式,为 Internet Explorer 10 和 Internet Explorer 11 设置不同的用户代理。这目前适用于 Internet Explorer 10。

#if ( $req.getHeader("User-Agent").matches('.*Trident.6.0.*')  )
<meta http-equiv="X-UA-Compatible" content="IE=8" />
#else
<meta http-equiv="X-UA-Compatible" content="IE=10" />
#end