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

Posted

技术标签:

【中文标题】Internet Explorer 11 通过元标记禁用“在兼容性视图中显示 Intranet 站点”不起作用【英文标题】:Internet Explorer 11 disable "display intranet sites in compatibility view" via meta tag not working 【发布时间】:2014-10-22 19:37:13 【问题描述】:

我在 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 中有效。

一个多月前,我升级到 Internet Explorer 11,网站仍然按预期运行。

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

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

编辑

我刚刚尝试在我的 web.config 中添加自定义标头,如本答案中所述 https://***.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 很好地解释了这一点,我还没有尝试通过代码设置此标头,我们的用户无权更改他们的浏览器设置.. 其他任何更改都没有奏效。

更新

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

【问题讨论】:

企业模式与兼容性视图不同,请参阅***.com/a/26463309/98706 了解禁用它的方法,但在我的情况下,它并不像能够将其关闭那么简单,我想针对特定情况覆盖它使用元标记的 Intranet 网站,但这不起作用,因为我们的网站现在在白名单上,所以我没有再尝试过。 【参考方案1】:

确保:

&lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;

是你页面上的第一个&lt;meta&gt;标签,否则IE可能不尊重它。

另外,问题可能是 IE 正在为该网站使用 企业模式

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

【讨论】:

是的,我已经这样做了,不幸的是它没有工作:( 可能是该网站启用了企业模式(根据您的问题)...我已经更新了我的答案,如果有帮助请告诉我 “企业模式”和“兼容性视图”虽然相似,但有所不同。即使勾选了“在兼容性视图中显示 Intranet 站点”,X-UA-Compatible 标记也应该覆盖它。但是企业模式可能会覆盖它...您在您的网站上看到企业模式图标 (media.askvg.com/articles/images5/…) 了吗? 另外,如果您按 F12 并查看仿真选项卡,它会说明什么?它应该告诉你为什么它使用文档模式。我认为您使用的是企业模式,而不是兼容性视图。 这太烦人了!@#$ 浪费了全世界数十万小时的 Web 开发人员。【参考方案2】:

此问题通常是由于网站/内网 URL 被置于以下之一:

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

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

不幸的是,设置 META X-UA-Compatible 不会覆盖这个。

对于最终用户

有时最终用户覆盖它的唯一方法是按 F12 并更改 Emulation 选项卡下的 Document Mode。但是,此设置不是永久性的,并且可能会在开发者工具关闭后恢复。

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

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

工具 -> Internet 选项 -> 安全 -> 站点 -> 高级

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

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

对于网络管理员

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

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

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

How to Enable and Use Internet Explorer 11’s Enterprise Mode [HowToGeek] Turn on Enterprise Mode and use a site list[技术网]

【讨论】:

我用我在最近的研究中发现的更多细节扩展了你的好答案。我希望没关系。【参考方案3】:

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

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

标记到您的布局(模板)页面。我只花了两个小时调试和调整,才意识到我只是将那个元标记添加到我的子页面中。我一将它添加到我的布局页面,浏览器就完美地以 EDGE 模式加载。

【讨论】:

我的问题与 IE11 中的新企业模式有关,它强制浏览器模拟 IE8。它与兼容模式不同,兼容模式是这个元标记用来覆盖的。我正确地使用了它。 我的评论旨在帮助其他有相同症状的人,他们正在使用 ASP.NET MVC 构建站点。我不是专门针对你的。 元标记也适用于非 .NET/MVC 站点(用于兼容模式问题,而不是企业模式问题),顺便说一句,它不是特定于 ASP.NET【参考方案4】:

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

它旨在实现为“黑名单”,在企业模式列表中列出了少数实际需要旧版浏览器模式的网站,并指定了它们的呈现要求。然后,您组织中的所有其他站点都可以使用 Edge。在您的组织中实施它并包含所有 Intranet 站点的人完全误解了企业模式的实施方式。

【讨论】:

是的,他们绝对应该这样做,但不幸的是我在这件事上没有任何发言权,但已经向他们提出了。【参考方案5】:

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

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

【讨论】:

如果您有 web.config 访问权限,请参阅:***.com/questions/2518256/…。 我之前看到过这个问题,但我想我将 HTTP 标头行误认为 META 行,并认为我已经尝试过了。一旦我把它理顺了,它就工作得很好。谢谢你指点我。 我已经尝试将相同的兼容性 EDGE 设置应用到 Web 配置中,但它对我不起作用,我发现让它工作的唯一方法是请求将我们的特定网站添加到白色列表,因此它们在新的 IE11 企业模式中被忽略,这似乎与兼容模式有所不同。这对我来说绝不是一个好的解决方案,因为我每次都必须跳过循环才能完成它。 听起来你和我走的路一样。我必须做两件事。 1 是页面 META 标记中的 EDGE 设置。您可能可以在 web.config 中执行此操作(或不执行此操作;我不知道),但我是在站点母版页上执行的。另一个是将自定义 HTTP 标头添加到 web.config。【参考方案6】:

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

【讨论】:

这些链接无效。它们被用作仅具有计算机名称的 URL 与具有 FQDN 的 URL 的示例。 专业提示:Example.com 的存在就是为了这个目的 这仍然是一个问题,此评论对解决方案没有任何帮助。【参考方案7】:

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

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

【讨论】:

请看我在工单上的更新,企业模式和兼容模式是两个不同的东西【参考方案8】:

不管怎样,我在 IE11 中也遇到了问题:

没有处于企业模式。 已选中“在兼容性视图中显示 Intranet 站点”。 我拥有问题中提到的所有 &lt;!DOCTYPE html&gt;IE=Edge 设置 元标题确实是&lt;head&gt; 元素中的第一个元素

过了一会儿,我发现:

发送到服务器的用户代理标头是 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 (但可能有一个很好的案例)

【讨论】:

【参考方案9】:

通过将其添加到受信任的站点列表或本地设置,将其移动到受信任的站点区域。这会将其移出 Intranet 区域,并且不会在 Compat 中呈现。查看。

【讨论】:

附言。我知道这很有效,因为这是我们在我的公司正在为未使用 X-UA 标签编写的基于浏览器的新产品所做的,以强制按照他们想要的方式进行渲染。 鉴于这可能是公司范围内的设置,您的答案必须应用于每个用户的机器,这并不理想。【参考方案10】:

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

IE 可能使用世界上最糟糕的算法来检测“Intranet”站点……确实,指定 server.domain.tld 为我解决了这个问题。

是的,您没看错,IE 不是通过私有 IP 地址检测 Intranet 站点,就像任何听说过 TCP/IP 的开发人员会做的那样,不,如果它没有域,则通过 URL 的“主机”部分部分,必须是内部的。

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

请注意,这是针对大型企业客户,让他们为您更改 GPO 就像试图将阿尔卑斯山向东移动 4 米,这不会发生。

【讨论】:

IE 可能会进行 DNS 查找并从中知道 IP。因为它是 MS,它可能会做 AD,但 DNS 更有意义。 @SQLDBA 否定,如果您指定 IP,例如 10.0.0.1,则主机不会被检测为“内联网”站点...与 DNS 无关,您对 AD 是什么意思?你的意思是它连接到 AD 并在那里查找主机?没有意义,为什么要这样做?再说一次,他们是微软是有原因的™。

以上是关于Internet Explorer 11 通过元标记禁用“在兼容性视图中显示 Intranet 站点”不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何使此 Google 字体在 Internet Explorer 11 上运行

Internet Explorer 11 中的 window.postMessage 是不是有最大长度限制?

Internet Explorer 8 到 11 中的滚动条按钮大小

为啥即使在模拟 Internet Explorer 8 文档模式时,Internet Explorer 11 也不支持条件注释?

尝试使用Internet Explorer 11 / IE11运行Codeception / Selenium时的PHPUnit_Framework_Exception

Internet Explorer 11 检测