Internet Explorer 11通过元标记禁用“在兼容性视图中显示Intranet站点”

时间:2014-08-28 20:18:05

标签: html html5 internet-explorer compatibility internet-explorer-11

我在Intranet网站上工作超过6个月 我是否一直在使用下面的html5 doctype和边缘兼容性元标记来强制Internet Explorer不能模拟较旧的浏览器版本,这一切都运行正常。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>My title</title>
    <meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
</head>
<body>
</body>
</html>

我这样做的原因是因为我工作的地方使用策略设置来启用所有Intranet站点的兼容性视图,并且使用EDGE设置的这种方法在Internet Explorer 9中有效。

Intranet site compatibility view setting

一个多月前,我升级到Internet Explorer 11,该网站仍按预期工作。

今天这已停止按预期工作,我不能肯定地说,但我认为强制兼容性视图的策略未在IE11中启用,现在它是......并且因为已启用兼容性元标记不再按预期执行,此站点正在模拟IE8的企业模式下运行。

当执行兼容性“企业模式”时,是否有人知道如何解决此问题并强制IE11在Intranet站点上使用?并且无法通过浏览器设置禁用?

修改

我刚尝试在我的web.config中添加自定义标头,如本答案中所述 https://stackoverflow.com/a/18257208/98706

这对我不起作用我仍然在

的开发人员工具栏控制台中收到以下消息
HTML1122: Internet Explorer is running in Enterprise Mode emulating IE8.

在IE11中启用此Intranet兼容性设置时,就好像将版本8视为edge一样。

这篇文章:https://www.leapinggorilla.com/Blog/Read/1016/ie-ate-my-css---disabling-compatability-mode 很好地解释了这一点,我还没有尝试通过代码设置此标头,我们的用户无权更改其浏览器设置..其他任何更改都没有工作。

更新

请参阅我对这篇文章的评论,了解企业模式和兼容模式之间的区别,因为它很重要。

10 个答案:

答案 0 :(得分:87)

确保:

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

是您网页上的第一个<meta>标记,否则IE可能不会尊重它。

或者,问题可能是IE正在为此网站使用企业模式

  • 您的问题提到控制台显示:HTML1122: Internet Explorer is running in Enterprise Mode emulating IE8.
  • 如果是这样,您可能需要disable enterprise mode(或like this)或从IE的“工具”菜单中关闭该网站。
  • 但理论上,企业模式被X-UA-Compatible标记覆盖,但IE可能有错误......

答案 1 :(得分:17)

此问题通常是由网站/内部网址放在以下其中一个中引起的:

  • 兼容模式列表
  • Internet Explorer Intranet区域
    (使用在兼容性视图中显示Intranet站点设置)
  • 企业模式列表

在公司网络上,这些兼容性视图设置通常通过组策略集中控制。在您的情况下,企业模式似乎是罪魁祸首。

IE 11 Enterprise Mode

很遗憾,设置META X-UA-Compatible 不会覆盖

对于最终用户

有时,最终用户覆盖此选项的唯一方法是按下F12并更改 Emulation 选项卡下的文档模式。但是,此设置不是永久性的,并且可能会在Developer Tools关闭后恢复。

您还可以尝试从Intranet区域中排除您的网站。但属于Intranet区域的域列表通常也受组策略的控制,因此这种工作的可能性很小。

要查看属于Intranet区域的域列表,请转到:

工具 - &gt;互联网选项 - &gt;安全 - &gt;网站 - &gt;高级

如果列表包含您的子域并且显示为灰色,那么在您的网络管理员允许之前,您将无法覆盖兼容性视图。

您确实需要与网络管理员联系,以允许更改组策略中的兼容性视图设置。

对于网络管理员

在打开开发人员工具(F12)的情况下加载网站通常会报告IE切换到较旧模式的原因。

上面提到的所有3个设置通常都是通过组策略控制的,但有时可以在用户计算机上覆盖。

如果企业模式是问题(原始海报就是这种情况),以下两篇文章可能会有所帮助:

答案 2 :(得分:6)

对于正在构建ASP.NET MVC项目的人,请确保添加:

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

标记到您的布局(模板)页面。我只花了两个小时调试和调整,只是意识到我只在我的子页面中添加了这个元标记。只要我将其添加到我的布局页面,浏览器就会完全加载到EDGE模式。

答案 3 :(得分:3)

标记的答案是正确的答案。但是,Pricey,您应该对您的AD和桌面管理员组进行跟进。他们滥用IE11企业模式站点列表。 Microsoft并不打算将其用于组织内的所有Intranet站点。这将传播现有的“以兼容模式呈现所有内部网站点”设置,这是全世界企业网站推进的祸根。

这意味着要实现为“黑名单”,少数网站实际上需要在企业模式列表中列出的旧浏览器模式,并指定其渲染要求。然后,组织中的所有其他站点都将被释放以使用Edge。组织中使用所有内部网站实现它的人员完全误解了企业模式的实施方式。

答案 4 :(得分:2)

这是一个老问题,有一些好的信息。但我刚刚发现,使用FQDN会关闭IE 9 - 11中的Compat模式。 例。我有compat问题
http://lrmstst01:8080/JavaWeb/login.do
但问题随之消失
http://lrmstst01.mydomain.int:8080/JavaWeb/login.do
注意:.int是我们内部域的一部分

答案 5 :(得分:1)

这个问题有点陈旧,但我刚刚解决了一个非常类似的问题。我们这里有几个内部网站点,包括我负责的站点,其他站点需要兼容模式或者它们中断。因此,站点规则默认IE为Intranet站点上的兼容模式。我正在升级我自己的东西,不再需要它;事实上,我试图使用的一些功能在compat模式下看起来并不正确。我就像你一样使用元IE-Edge标签。

IE假设没有完全限定地址的网站是内联网,并采取相应行动。考虑到这一点,我只是将IIS中的绑定更改为仅侦听完全限定的地址,然后设置一个侦听不合格地址的虚拟网站。第二个将所有流量重定向到完全合格的地址,使IE认为它是一个外部站点。无论是否选中Intranet站点上的兼容模式框,该站点都可以正确呈现。

答案 6 :(得分:0)

将其添加到“受信任的站点”列表或本地设置,将其移至“受信任的站点”区域。这会将其移出Intranet区域,并且不会在Compat中呈现。图。

答案 7 :(得分:0)

将以下属性添加到IIS站点的web.config文件中。这在我的IE11内联网上对我有用。

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <clear />
      <add name="X-UA-Compatible" value="IE=edge" />
    </customHeaders>
  </httpProtocol>
</system.webServer> 

答案 8 :(得分:0)

我通过将用户重定向到托管Intranet的服务器的FQDN来解决了这个问题。

IE可能使用世界上最差的算法来检测“内部网”网站......事实上,指定server.domain.tld可以解决我的问题。

是的,你读得正确,IE检测内网站点不是通过私有IP地址,就像任何听说过TCP / IP的开发者会做的那样,不是,通过URL的“主机”部分,如果它没有域名部分,必须是内部的。

可怕知道IE开发人员不了解最基本的TCP / IP概念。

请注意,这是在一个大企业客户,让他们为你改变GPO就像试图将阿尔卑斯山向东移动4米,不会发生。

答案 9 :(得分:0)

对于它的价值,我在IE11中也遇到了问题:

  • 不是在企业模式下。
  • 已选中“在兼容性视图中显示Intranet站点”。
  • 我有问题中提到的所有<!DOCTYPE html>IE=Edge设置
  • 元标头确实是<head>元素中的第一个元素

一段时间后,我发现:

  • 发送到服务器的用户代理标头是IE7,但是 ...
  • JavaScript的值为IE11!

HTTP标头

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E)

JavaScript

window.navigator.userAgent === 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko'

所以我最终在客户端进行了检查。

同时,顺便说一句,不再建议检查用户代理。参见https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent (但可能会有一个很好的案例)