如何强制Internet Explorer在“标准模式”下呈现而不在“怪癖”中呈现?


74

我正在编写一个前端,该前端在IE7标准模式和IE8标准模式下都能很好地工作。

当我启动Internet Explorer并加载页面时,IE7和IE8都直接进入Quirks模式。如何强制IE7和IE8始终以标准模式加载页面?

到目前为止,我还没有添加特殊的元标记。

谢谢你的协助

编辑:目前,我的文档类型和标题如下:

<!DOCTYPE html> 
<html lang="de"> 
<head> 
    <title>...</title> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta charset="utf-8" />
    <script src="js/html5.js"></script> 

    (...)
</head>

7
我知道我参加聚会的时间很晚,但是这里有个简短的注意事项:如果您在IE开发人员工具中设置了渲染模式,那么下次加载页面时,该模式就会保留下来。因此,如果您选择Quirks模式,它将一直保持该模式,直到您手动更改它或关闭选项卡。所以,享受。
Matchu 2011年

1
抹茶,您的评论对我来说非常宝贵。通过手动设置渲染模式,我完全搞砸了我的测试!谢谢!:)
Brian Beckett

除非您使用http标头,否则它将永远无法正常工作stackoverflow.com/a/17258683/200442
Daniel Little

1
这真的很简单:确定IE 9的文档模式
2013年

Answers:


87

这是绝对确定的方法:

<!doctype html> <!-- html5 -->
<html lang="en"> <!-- lang="xx" is allowed, but NO xmlns="http://www.w3.org/1999/xhtml", lang:xml="", and so on -->
<head>
<meta http-equiv="x-ua-compatible" content="IE=Edge"/> 
<!-- as the **very** first line just after head-->
..
</head>

原因:
每当IE遇到任何冲突时,它都会回到“ IE 7标准模式”,而忽略x-ua-compatible

(我知道这是一个很老的问题的答案,但是我自己一直在为此苦苦挣扎,上述方案是正确的答案。它始终有效,每次都可以)


@Sameer Alibhai,偏离路线!它是如此隐含,以至于我忘记了;-)现在纠正了。
davidkonrad

1
不幸的是,这是不正确的,当您拥有所有这些东西时,本地网络上的Web服务器仍将启用怪癖模式。它也是IE = edge,而不仅仅是meta标签内容中的Edge。
mjaggard

3
@davidkonrad:那么lang信息和特定于类的类又去哪里了?此刻我的html看起来像这样(例如IE8):<html class="ie ie8 ie_old" lang="it-IT">对不起,无法评论最后答案,还没有必要的声誉……
blu bla

1
@davidkonrad您可以在html标记上具有lang属性,并且还具有兼容的meta标记!
andlrc

1
就在今天,由于没有明显的原因,一个网站在IE9中被完全破坏,出现了一个问题。从html标记中删除所有属性就成功了!谢谢你一千次,已经尝试了我能想象的一切的将近2个小时!
凯文G.15年

33

可悲的是,他们希望我们使用标签来让他们的浏览器知道该怎么做。查看文档,它告诉我们使用:

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

它应该做。


3
这不会将其踢出怪异模式或进入怪异模式,而只会更改“仿真模式”。IE6可以在非怪癖模式下运行(尽管这并不意味着它不是很怪异!)。

如果要以标准模式强制事物加载。
2011年

这适用于IE8。但是,IE7仍然首先进入怪癖模式。
迷宫

IE7是一个真正的痛苦。很高兴知道您告诉我们的行为,迷宫。
2011年

11
  1. 在页面开头使用html5 doctype。

    <!DOCTYPE html>

  2. 强制IE使用最新的渲染模式

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

  3. 如果您的目标浏览器是ie8,则在IE8中检查您的兼容设置

我详细写了博客


10

添加正确的doctype声明并避免使用XML prolog应该足以避免怪癖模式


必须说,这是实现目标的正确方法。不知何故,一个人不了解IE ...
Alfabravo

1
如果您是在本地网络上运行Web服务器,则此方法不适用于IE :-(
mjaggard 2013年

这个链接到wikipedia怪癖模式,保存了我的一天。最近两天我一直在苦苦挣扎,但实际上我不知道IE中发生了什么。但是我不知道当我以前将IE强制为标准模式时,它显示为Document Mode: IE7 standards。我如何执行它IE9 Standard
穆罕默德·汉南

9

我知道这个问题是在2年前提出的,但是还没有人提到。

最好的方法是使用http标头

将meta标签添加到头部并非总是可行的,因为IE可能在读取之前就已经确定了模式。确保IE始终使用标准模式的最佳方法是使用自定义http标头。

标头:

name: X-UA-Compatible  
value: IE=edge

例如,在.NET应用程序中,您可以将其放在web.config文件中。

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

1
这不是最好的,因为MS指出“如果同时发送了这些指令的[元和标头],则开发人员的首选项(元元素)优先于Web服务器设置(HTTP标头)”。msdn.microsoft.com/en-us/library/ff955275%28v=vs.85%29.aspx
psychowood 2014年

1
但是,您必须要小心,因为IE可以在到达Meta标签之前确定X-UA-Compatible值。这就是为什么标头仍然是最佳方法的原因。
丹尼尔·利特尔

2

HTML5 Doctype可能会导致您使用这些较旧的浏览器出现问题。这也可能归因于与HTML5 shiv相关的时髦。

您可以尝试切换到XHTML文档类型之一,并相应地至少暂时地更改标记。这可以使您缩小问题范围。

当这些IE切换到“怪癖”模式时,您的设计是否被打破?如果是CSS导致显示异常,则可能值得在CSS上进行操作,因此即使浏览器切换模式,该站点的外观也相同。


HTML5 doctype旨在使所有浏览器进入标准模式。
mjaggard
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.