【问题标题】: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 提交错误。谢谢!

标签: html css internet-explorer-9 compatibility-mode


【解决方案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 浏览您的页面,使用 wiresharkfiddler 等工具,或使用 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,我刚刚通过单击主页上的指南链接复制了它。但这只发生过一次,经过几次尝试我还没有重现,只是那一次
        最近更新 更多