为啥 IE9 在我的网站上切换到兼容模式?

Posted

技术标签:

【中文标题】为啥 IE9 在我的网站上切换到兼容模式?【英文标题】:Why does IE9 switch to compatibility mode on my website?为什么 IE9 在我的网站上切换到兼容模式? 【发布时间】:2011-04-13 04:27:09 【问题描述】:

我刚刚安装了 IE9 测试版,并且在我创建的特定网站 (html5) 上,IE9 会跳转到兼容模式,除非我手动告诉它不要这样做。我尝试删除网站的几个部分,但没有任何变化。包括删除所有 CSS 包含。在我的其他网站上,一切正常。

另外,不要手动设置,因为这样 IE9 会记住用户设置,并且您无法将其恢复为自动(或者至少我还没有找到方法,甚至没有通过隐私浏览和清空缓存)

无论如何。跳转到兼容模式的站点:http://alliancesatwar.com/guide/ 它呈现正确的地方:http://geuze.name/basement/(我不能发布超过 1 个超链接)

两者都使用相同的doctype。这些网站有很多共同点(除了外观)使用相同的基本模板(编码、元标记、文档类型和相同的 javascript

如果有人能回答我,那就太好了!一个在 IE7 模式下呈现的 HTML5 网站是相当...蹩脚的。

【问题讨论】:

请解释一下“跳转到兼容模式”?如果您看到页面刷新和一个气球提示 IE 由于出现问题在兼容性视图中刷新了此页面,这意味着您发现了一个称为“硬断言”的 IE 错误,它类似于渲染引擎中的崩溃.我们有兴趣找到并修复这些;请在connect.microsoft.com/ie 提交错误。谢谢! 【参考方案1】:

我最近不得不解决这个问题,这就是我所做的:

首先,这个解决方案是围绕调整 Apache 服务器。

第二个主要想法是IE9中存在一个错误,这意味着元标记不起作用,而不是这个解决方案试试这个

查找/打开您的 httpd.conf

取消注释/或添加以下行

LoadModule headers_module modules/mod_headers.so

添加以下行

<IfModule headers_module>
    Header set X-UA-Compatible: IE=EmulateIE8
</IfModule>

保存/重启您的 Apache 服务器,

使用 IE9 浏览您的页面,使用 wireshark 或 fiddler 等工具,或使用 IE 开发人员工具检查标题是否存在

【讨论】:

【参考方案2】:

顺便说一句,在更现代的网站上,如果您根据样板文件在 html 标记上使用条件语句,这将由于某种原因导致 ie9 默认为兼容模式。此处的解决方法是将条件语句从 html 标记中移出,并将它们添加到 body 标记中,即从 head 部分中移出。这样,您仍然可以在样式表中使用这些类来定位旧版浏览器。

【讨论】:

【参考方案3】:

我已在单独的 *** 线程上发布了此评论,但认为值得在这里重复:

对于我们内部的 ASP.Net 应用程序,在网页、web.config 或代码隐藏中添加“X-UA-Compatible”标签完全没有区别。

唯一对我们有用的是在 IE8 中手动关闭此设置:

(叹气。)

这个问题似乎只发生在 Intranet 站点上的 IE8 和 IE9 上。外部网站可以正常工作并使用正确版本的 IE8/9,但对于内部网站,IE9 突然确定它实际上是 IE7,并且不支持任何 HTML 5。

不,我也不太明白这个逻辑。

我不情愿的解决方案是测试浏览器是否支持 HTML 5(通过创建画布,并测试它是否有效),如果无效则向用户显示此消息:

这不是特别用户友好,但让用户关闭这个烦人的设置 似乎是让他们正确运行内部 HTML 5 网络应用程序的唯一方法。

或者让用户使用 Chrome。 ;-)

【讨论】:

【参考方案4】:

对我来说在 IE9 文档模式下工作。

如果没有 X-UA-Compatible 标头/元来设置显式 documentMode,您将获得基于以下的模式:

用户之前是否点击过该域中的“兼容性视图”按钮; 也许这是否是由于网站上的其他内容导致 IE8/9 的渲染器崩溃并回退到旧渲染器而自动发生的; 用户是否已选择默认将所有网站置于兼容性视图中; IE 是否认为该站点在您的 Intranet 上,因此默认为兼容性视图; 相关网站是否在 Microsoft 自己的需要兼容性视图的网站列表中。

您可以从 IE 菜单的“工具 -> 兼容性视图设置”中更改这些设置。当然这个菜单现在被偷偷地隐藏了,所以在你按下 Alt 之前你不会看到它。

作为网站作者,如果您确信自己的网站符合标准(在其他浏览器中呈现良好,并使用功能嗅探来决定使用哪些浏览器解决方法),我建议您使用:

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

或 HTTP 标头:

X-UA-Compatible: IE=Edge

无论使用什么 IE 版本,都可以获取最新的渲染器。

【讨论】:

重要提示:如果 IE 9 配置为始终以兼容模式显示 Intranet 站点,则元标记和 HTTP 标头都不会覆盖它。 正如 Jacob 所提到的,IE 可以默认显示所有本地/Intranet 站点以处于兼容模式。按 alt -> 工具兼容性视图设置,并确保您没有选中该框。 元标签只有在我把它放在 之后才对我有用(另见下面的答案)。当我把它放在 元素中时,它不起作用(我仍然得到撕裂的页面)。 @Jacob:这有点误导。是的,您将处于兼容浏览器模式并且没有出路。但是您仍然可以使用 HTTP 标头将文档模式设置为最适合您的站点的 IE 版本。 IE=Edge 应该始终为您提供最新的渲染引擎。因此,即使您在技术上处于兼容模式,您也可以像在正常模式下一样呈现您的页面。如果我错了,请纠正我,但至少我们的 Intranet 站点的工作方式完全一样(即使选中了“在兼容性视图中显示 Intranet 站点”设置)。 @BorisvanSchooten:我不知道这是否是原因,但&lt;meta&gt; 标签必须位于已处理 HTML 文件的前 512 个字节内。我说“已处理”是因为您可以在那里拥有各种 php,但呈现的代码才是最重要的。我已经将我所有关于&lt;meta&gt; 的cmets 放在&lt;meta&gt; 标签下面,这样我就不会违反要求。【参考方案5】:

http://www.HTML-5.com/index.html 的站点确实具有 X-UA-Compatible 元标记,但仍会进入兼容性视图,如地址栏中的“撕裂页面”图标所示。如何获得强制 IE 9(最终版本 9.0.8112.16421)以标准模式呈现页面的菜单选项?我尝试右键单击那个破损的页面图标以及“Alt”键来显示 Rene Geuze 提到的其他菜单选项,但这些都不起作用。

【讨论】:

移除元数据周围的 IE 条件注释。您将页面作为application/xhtml+xml 提供服务,因此使用 XML 解析规则; XML 不支持条件 cmets。无论如何,这没有任何意义;浏览器必须选择一种模式它可以决定解释什么条件cmets。【参考方案6】:

我放了

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

之后的第一件事

<head>

(我在某处读过,我不记得了)

我不敢相信它确实有效!

【讨论】:

您必须关闭标签并打开一个新标签,您尝试过吗? 他说“没有”而不是“没有”;) +1,这是一个非常有价值的注释。如果您在此 meta 语句之前的 &lt;head&gt; 中有 &lt;script&gt;s,它将被忽略(IE=edge)。【参考方案7】:

要强制 IE 以 IE9 标准模式呈现,您应该使用

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

某些情况可能会导致 IE9 跳入兼容模式。默认情况下,这可能发生在 Intranet 站点上。

【讨论】:

它适用于其他网站。所以不应该这样。此外,该元标记是邪恶的,因为每次有新的 IE 版本时您都必须手动更新它。 抱歉,我无法解决您的问题。但是,我已经编辑了我的答案以使用 IE=edge 代替,它总是调用可用的最新引擎。 您的假设不正确。演示指定 X-UA-Compatible 以防止 IE 显示 Compatibility View 按钮,因为如果用户按下它,站点内容将无法正常工作。 @ReneGeuze,你弄错了。 Edge 始终指的是最新版本的 IE。 @DelanAzabani 我的 Intranet 门户切换到兼容模式,即使我按照您的建议添加了元标记。请建议它如何解决并保持标准模式示例 - IE 8,IE 8 兼容性然后我只想要 IE 8。【参考方案8】:

我觉得不错:

你确定你没有设置全局或其他什么?这是 Windows 7 上测试版的全新安装。开发人员工具报告该页面默认为 IE9 标准模式。

【讨论】:

我收到了不止 1 个关于此错误的报告。虽然它可能与基本目录(alliancesatwar.com)有关,它也以兼容模式呈现所有子目录。但是我有一个问题,网站根目录中的什么使IE以兼容模式呈现网站?所以也许至少本指南的编码是正确的。我希望如此。 @Rene Strange,我刚刚通过单击主页上的指南链接复制了它。但这只发生过一次,经过几次尝试我还没有重现,只是那一次

以上是关于为啥 IE9 在我的网站上切换到兼容模式?的主要内容,如果未能解决你的问题,请参考以下文章

IE浏览器为啥会出现兼容模式?

改变网页的兼容性模式

Windows 7 中的 ASP.NET 项目和 IE10 兼容模式问题

电脑网站登录框,不显示验证码怎么办?

兼容模式下ie9和ie10显示样式在不兼容模式下为啥不加载css样式?

卡在 IE 兼容模式下