ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

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

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

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

K
Kermit

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

我放

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

之后的第一件事

<head>

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

我简直不敢相信它确实有效!


您必须关闭标签并打开一个新标签,您尝试过吗?
他说“没有”不是“没有”;)
+1,这是一个非常有价值的注释。如果您在此 meta 语句之前的 <head> 中有 <script>,它将被忽略 (IE=edge)。
T
TodK

要强制 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。
M
Mike Gledhill

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

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

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

https://i.stack.imgur.com/gdyg2.png

(叹。)

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

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

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

https://i.stack.imgur.com/l4NgF.png

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

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


R
Rob at TVSeries.com

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 不支持条件注释。无论如何,这没有任何意义;浏览器必须选择一种模式它可以决定解释哪些条件注释。
u
uknowit2

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


Y
Yi Jiang

在我看来很好:

https://i.stack.imgur.com/YZmkO.png

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


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

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

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

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

找到/打开你的 httpd.conf

取消注释/或添加以下行 LoadModule headers_module modules/mod_headers.so

添加以下行 Header set X-UA-Compatible: IE=EmulateIE8

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

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅