【问题标题】:How do I force Internet Explorer to render in Standards Mode and NOT in Quirks?如何强制 Internet Explorer 以标准模式而不是 Quirks 模式呈现?
【发布时间】:2011-07-19 10:45:13
【问题描述】:

我正在编写一个在 IE7 标准模式和 IE8 标准模式下运行良好的前端。

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

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

谢谢你帮助我

编辑:我的 doctype 和 head 目前如下所示:

<!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>

【问题讨论】:

  • 我知道我迟到了,但这里有一个简短的说明:如果您在 IE 开发人员工具中设置了呈现模式,则该模式将在您下次加载页面时保持不变。因此,如果您选择 Quirks Mode,它将一直使用该模式,直到您手动更改或关闭选项卡。所以,享受吧。
  • Matchu,您的评论对我来说非常宝贵。通过手动设置渲染模式,我完全搞砸了我的测试!谢谢! :)
  • 除非您使用 http 标头,否则它并不总是有效stackoverflow.com/a/17258683/200442

标签: internet-explorer internet-explorer-8 internet-explorer-7 quirks-mode x-ua-compatible


【解决方案1】:

这是绝对确定的方法:

<!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,当然!暗示我忘记了它;-)现在更正了。
  • 不幸的是,这是不正确的,当您拥有所有这些东西时,本地网络上的 Web 服务器仍将启用 quirks 模式。也是 IE=edge,而不仅仅是 meta 标签内容中的 Edge。
  • @davidkonrad:那么 lang info 和 ie-specific 类到哪里去了?我现在的 html 看起来像这样(例如 IE8):&lt;html class="ie ie8 ie_old" lang="it-IT"&gt; 抱歉,不能对最后一个答案发表评论,还没有必要的声誉......
  • @davidkonrad 你可以在你的 html 标签上有一个 lang 属性,并且有一个兼容的 meta 标签!
  • 今天遇到一个问题,一个网站在 IE9 中被完全摧毁,没有明显的原因。从html 标记中删除所有属性就成功了!谢谢你一千次,卡住了将近 2 个小时,已经尝试了我能想象的一切!
【解决方案2】:

遗憾的是,他们希望我们使用标签让他们的浏览器知道该做什么。查看this 文档,它告诉我们使用:

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

应该可以。

【讨论】:

  • 这不会将其踢出 quirks-mode 或进入 quirks-mode,而只会更改“仿真模式”。 IE6 可以在非古怪模式下运行(尽管这并不意味着它不是很古怪!)。
  • 如果应该强制事物以标准模式加载。
  • 这适用于 IE8。但是,IE7 还是会先进入 quirks 模式。
  • IE7 真的很痛苦。很高兴知道你告诉我们的行为,迷宫。
【解决方案3】:
  1. 在页面开头使用 html5 doctype。

    &lt;!DOCTYPE html&gt;

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

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

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

I blog this in details

【讨论】:

    【解决方案4】:

    添加正确的 doctype 声明并避免 XML prolog 应该足以避免 quirks mode

    【讨论】:

    • 这是实现事情的正确方法,必须说。不知何故,一个人不知道 IE...
    • 如果你在本地网络上运行你的网络服务器,这不适用于 IE :-(
    • 这个链接到wikipedia 怪癖模式,拯救了我的一天。过去两天我一直在苦苦挣扎,真的不知道我在 IE 中发生了什么。但我想知道当我过去将我的 IE 强制为标准模式时,它会显示为Document Mode: IE7 standards。我怎样才能强制它到IE9 Standard
    【解决方案5】:

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

    最好的方法是使用http header

    将元标记添加到头部并不总是有效,因为 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>
    

    【讨论】:

    • 不是最好的,因为 MS 声明“如果同时发送这些指令的 [元和标头],则开发人员的偏好(元元素)优先于 Web 服务器设置(HTTP 标头)。 " msdn.microsoft.com/en-us/library/ff955275%28v=vs.85%29.aspx
    • 但是您必须小心,因为 IE 可以在到达您的 Meta 标签之前决定 X-UA-Compatible 值。这就是为什么标头仍然是最好的方法。
    【解决方案6】:

    HTML5 Doctype 可能会导致您在使用这些旧浏览器时出现问题。它也可能归结为与 HTML5 shiv 相关的一些时髦的东西。

    您可以尝试切换到其中一种 XHTML 文档类型并相应地更改您的标记,至少暂时如此。这可能会让您缩小问题范围。

    当这些 IE 切换到 quirks 模式时,您的设计是否会中断?如果是您的 CSS 导致内容显示异常,则可能值得对 CSS 进行处理,以便即使在浏览器切换模式时网站看起来也一样。

    【讨论】:

    • HTML5 文档类型旨在将所有浏览器置于标准模式。
    猜你喜欢
    • 2011-06-28
    • 2012-10-28
    • 1970-01-01
    • 2011-01-20
    • 2012-06-14
    • 2012-07-21
    • 1970-01-01
    • 2011-09-11
    相关资源
    最近更新 更多