覆盖Intranet兼容模式IE8

san*_*all 200 internet-explorer intranet internet-explorer-8 compatibility-mode

默认情况下,IE8强制Intranet网站进入兼容模式.我尝试将元标题更改为IE8,但它不会确认元标题,只是使用浏览器设置.有谁知道如何禁用它?

And*_*ehi 224

可以覆盖Intranet中的兼容模式.

对于IIS,只需将以下代码添加到web.config即可.用IE9为我工作.

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <clear />
      <add name="X-UA-Compatible" value="IE=edge" />
    </customHeaders>
  </httpProtocol>
</system.webServer> 
Run Code Online (Sandbox Code Playgroud)

相当于Apache:

Header set X-UA-Compatible: IE=Edge
Run Code Online (Sandbox Code Playgroud)

对于nginx:

add_header "X-UA-Compatible" "IE=Edge";
Run Code Online (Sandbox Code Playgroud)

对于express.js:

res.set('X-UA-Compatible', 'IE=Edge')
Run Code Online (Sandbox Code Playgroud)

  • 这不是正确的答案.这个答案改变了文档模式,它没有改变重要的"浏览器模式".我仍在寻找解决该问题的方法. (21认同)
  • 这是正确的答案.元标记没有任何作用,但添加响应标头有效.更多信息:http://social.msdn.microsoft.com/Forums/is/iewebdevelopment/thread/acf1e236-715b-4feb-8132-f88e8b6652c5#36404ffe-626f-4cf2-9f92-9e0e068cc3fc (20认同)
  • (澄清一下:它适用于文档模式,但不适用于浏览器模式) (9认同)
  • 这不是正确的答案,因为它是.net特定的(甚至没有承认这一事实). (4认同)
  • 同意.这应该是正确答案,因为它只是正确覆盖了本网站的Intranet设置. (3认同)
  • @codeulike:这不适用于IIS6,因为它不执行xml配置,但设置全局响应头. (2认同)
  • @codeulike,IIS6(或IIS7不在集成模式下)将不使用system.webserver设置. (2认同)
  • 这应该工作,并且用于工作,但对我来说,在IE10中,添加响应头不会覆盖愚蠢的"在兼容性视图中显示Intranet站点"设置. (2认同)

And*_*rew 84

Michael Irigoyen是正确的,但它有点复杂......

如果您正在使用Paul Irish的精彩样板,那么您将拥有以下内容: -

<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]>    <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]>    <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Run Code Online (Sandbox Code Playgroud)

如果您选中"在兼容性视图中显示Intranet站点",这将无法按预期工作并强制IE进入Intranet环境中的兼容模式.您需要删除条件IE注释以防止Intranet兼容模式.

所以下面的代码将起作用:

<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Run Code Online (Sandbox Code Playgroud)

基本上,如果您在<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">语句之前触发条件IE注释,那么如果您使用默认设置运行IE9,则将在Intranet环境中强制进入兼容模式.

更新 - 附加信息: 但请注意,有一个技巧可以使HTML5 boilplate工作:

在DOCTYPE 之前添加一个emtpy条件注释.并注意为好,当你做那个,那么你可以添加条件注释周围的X-UA-Compatible指令,使得网页HTML5,也有效.例如:

<!--[if HTML5]><![endif]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
Run Code Online (Sandbox Code Playgroud)

,是由这个答案的第一部分灵感的博客文章,有更多详细信息.顺便说一句:由于在博客中提到,一方面也可以代替用的DOCTYPE前的条件注释半条件与评论没有条件:<!--[]-->.因此,像这样:

<!--[]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
Run Code Online (Sandbox Code Playgroud)

但请注意,后一种变体(<--[]--><!DOCTYPE html>),如通过对另一个问题的回答所解释,将激活众所周知的问题 - 对于没有支持的旧版IE版本X-UA-Compatioble(读取:用于IE7和IE6) - 将浏览器引入怪癖模式.

  • +1,关于保罗爱尔兰样板的好点. (4认同)

Pil*_*Bob 34

如果您下拉"工具"菜单并选择"兼容性视图设置"在该对话框的底部是"在兼容模式下显示Intranet站点"设置.如果取消选中此项应解决问题,IE将使用基于DOCTYPE的模式.

  • 我没有downvote,但我猜它是因为你从用户的角度回答(用户应该做什么).这个问题来自Web开发人员,并询问如何解决问题,而无需用户特别做任何事情. (19认同)
  • 我相信他确实从程序员的角度来回答这个问题."...... IE将使用DOCTYPE上的模式".请参阅:http://msdn.microsoft.com/en-us/library/ms535242%28VS.85%29.aspx如果公司正在运行Active Directory,则管理员可以传播对浏览器设置的更改.你不能用FireFox做到这一点! (2认同)
  • @PilotBob如果您有120K +用户和数百(如果没有数千)内联网站点需要支持,这不是一个可行的解决方案. (2认同)

ste*_*n.s 19

在这个问题的答案中存在一定程度的混淆.

最常见的答案是服务器端解决方案,它在http标头中设置一个标志,一些注释表明使用元标记的解决方案不起作用.

我认为这篇博客文章很好地概述了如何使用兼容性元信息,并根据我的经验进行了描述:http: //blogs.msdn.com/b/cjacks/archive/2012/02/29/using-x- UA兼容到创建持久-企业网络applications.aspx

要点:

  • 使用元标记和标题设置信息都有效
  • 元标记优先于标头
  • 元标记必须是第一个标记,以确保浏览器在基于启发式之前不确定渲染引擎

一个重点(我认为很多混乱来自这一点)是IE有两个"类"模式:

  1. 文件模式
  2. 浏览器模式

文档模式确定呈现引擎(如何呈现网页).

浏览器模式确定IE向服务器发送的用户代理(UA)字符串,IE默认的文档模式,以及IE如何评估条件注释.

有关文档模式与浏览器模式的更多信息,请参阅本文:http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for-网站developers.aspx?重定向=真

根据我的经验,兼容性元数据只会影响文档模式.因此,如果您依赖浏览器检测,这对您没有帮助.但是如果你正在使用特征检测,这应该是要走的路.

因此,我建议使用以下语法使用元标记(在html页面中):

<meta http-equiv="X-UA-Compatible" content="IE=9,10" ></meta>
Run Code Online (Sandbox Code Playgroud)

注意:列出您已测试的浏览器模式.

该博客文章还建议不要使用EmulateIEX.这里有一个引用:

话虽这么说,我觉得奇怪的一件事是当一个应用程序请求EmulateIE7或EmulateIE8时.这些模拟模式本身就是决策.因此,不是要具体说明你想要的东西,而是要求两件事中的一件,然后通过在代码中的其他地方查找DOCTYPE来确定这两件事中的哪一件(然后试图了解DOCTYPE是否会给你标准或怪癖取决于其内容 - 另一个有时令人困惑的任务).而不是那样做,我认为直接指定你想要的东西更有意义,而不是给出一个本身就是问题的回答.如果你想要IE7标准,那么使用IE = 7,而不是IE = EmulateIE7.(请注意,这并不意味着您不应该使用DOCTYPE - 您应该这样做.)


Ala*_*jar 9

试试这个metatag:

<meta http-equiv="X-UA-Compatible" content="IE=8" />
Run Code Online (Sandbox Code Playgroud)

它应该强制IE8呈现为IE8标准模式,即使"在兼容性视图中显示内部网站点"被检查[内部网或所有网站],我在IE 8.0.6上尝试了我自己

  • 不,不是的. (15认同)
  • 这实际上是正确的,但它必须出现在页面上的任何和所有META标签之前,否则它将无法正常工作. (11认同)
  • (澄清一下:它适用于文档模式,但不适用于浏览器模式.因此渲染是固定的,但浏览器仍假装为IE7) (6认同)
  • 这对我不起作用.据我所知,IE8s"在兼容模式下显示Intranet站点"是不可重写的 (2认同)

Jam*_*ruk 7

我们的系统管理员通过取消选中我们组织的全局框来解决此问题.用户甚至不需要注销.

在此输入图像描述