如何强制 Internet Explorer 以标准模式而不是 Quirks 模式呈现?
Posted
技术标签:
【中文标题】如何强制 Internet Explorer 以标准模式而不是 Quirks 模式呈现?【英文标题】:How do I force Internet Explorer to render in Standards Mode and NOT in 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 标头,否则它并不总是有效***.com/a/17258683/200442 真的很简单:Determining IE 9’s Document Mode 【参考方案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):<html class="ie ie8 ie_old" lang="it-IT">
抱歉,不能对最后一个答案发表评论,还没有必要的声誉......
@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】:在页面开头使用 html5 doctype。
<!DOCTYPE html>
强制 IE 使用最新的渲染模式
<meta http-equiv="X-UA-Compatible" content="IE=edge">
如果您的目标浏览器是 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 文档类型旨在将所有浏览器置于标准模式。以上是关于如何强制 Internet Explorer 以标准模式而不是 Quirks 模式呈现?的主要内容,如果未能解决你的问题,请参考以下文章
强制 Internet Explorer 9 使用 IE 9 模式
在 Intranet 中强制使用“Internet Explorer 8”浏览器模式
我可以强制 IE9 进入 Internet Explorer 9 标准模式吗
在 C# 中设置 Internet Explorer / Windows 以使用 Socks5 代理
如何从 Internet Explorer 11 降级到 Internet Explorer 10?
对于某些情况,如 Internet Explorer 特定的 CSS 或 Internet Explorer 特定的 JavaScript 代码,如何仅针对 Internet Explorer 10?