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


197

我刚刚安装了IE9 beta,并且在我创建的特定网站(HTML5)上,除非我手动告知IE9,否则IE9会跳至兼容模式。我曾尝试删除网站的多个部分,但没有任何变化。包括删除所有的CSS include。在我的其他网站上,一切正常。

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

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

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

如果有人对我有答案,那就太好了!以IE7模式呈现的HTML5网站真是太糟糕了。


5
请说明“跳入兼容模式”吗?如果您看到页面刷新,并且显示提示IE由于问题而在IE中刷新了该页面的气球,则表示您发现了一个名为“硬断言”的IE错误,类似于呈现引擎崩溃。我们有兴趣找到并修复这些问题;请在connect.microsoft.com/ie上提交错误。谢谢!
EricLaw 2010年

Answers:


263

对我来说,可以在IE9 documentMode中工作。

没有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版本)。


79
重要说明:如果将IE 9配置为始终以兼容模式显示Intranet网站,则meta标签和HTTP标头都不会覆盖该网站。
雅各布

29
正如Jacob提到的那样,IE可以默认将所有本地/内联网站点显示为兼容模式。按alt->工具兼容性视图设置,并确保未选中该框。
2011年

30
当我将<meta>标签放在<head>之后时,它才对我有用(另请参见下面的答案)。当我将它放在<head>元素中更深的地方时,它不起作用(我仍然撕裂了页面)。
鲍里斯·范·舒滕

13
@雅各布:这是一种误导。是的,您将处于兼容浏览器模式,并且没有出路。但是您仍然可以使用HTTP标头将文档模式设置为IE版本最适合您的站点。IE = Edge应该始终为您提供最新的渲染引擎。因此,即使您在技术上处于兼容模式,也可以将页面呈现为普通模式。如果我错了,请纠正我,但至少我们的Intranet站点可以像这样工作(即使选中了“在兼容性视图中显示Intranet站点”设置)。
mkataja 2012年

7
@BorisvanSchooten:我不知道这是为什么,但是<meta>标签必须在已处理HTML文件的前512个字节内。我之所以说“已处理”,是因为您可以在那里使用各种PHP,但是呈现的代码很重要。我已经到了将所有评论添加<meta><meta>标签下方的位置,这样我就不会违反要求。
doubleJ 2012年

33

我放

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

之后的第一件事

<head>

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

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


您必须关闭标签页并打开一个新标签页,您尝试过吗?
Zeb

1
他说“没有”而不是“没有”;)
内森·JB

14
+1,这是一个非常有价值的音符。如果在此语句之前有<script>s ,它将被忽略(IE = edge)。<head>meta
jakub.g 2012年

22

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

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

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


它可以在其他网站上使用。所以不应该这样。另外,该元标记是有害的,因为每次有新的IE版本时,您都必须手动对其进行更新。
勒内·

2
对不起,我无法解决您的问题。但是,我已经编辑了答案以IE=edge代替使用,它总是调用最新可用的引擎。
Delan Azabani

您的假设是不正确的。演示指定X-UA-Compatible,以防止IE显示“兼容性视图”按钮,因为如果用户按下该按钮,则网站内容将无法正常工作。
EricLaw 2010年

@ReneGeuze,您理解错了。Edge始终是指IE的最新版本。
neoswf 2012年

@DelanAzabani我的Intranet门户切换到兼容模式,即使我按照您的建议添加了meta标签。请建议如何解决并保留在标准模式示例中-IE 8,IE 8易用性,然后我只需要IE 8。
dsi 2014年

6

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

对于我们内部的ASP.Net应用程序,在网页上,web.config或后面的代码中添加“ X-UA-Compatible”标记绝对没有区别。

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

在此处输入图片说明

(叹。)

仅在Intranet站点上的IE8和IE9会出现此问题。外部网站可以正常工作,并使用正确版本的IE8 / 9,但是对于内部网站,IE9突然决定它实际上是IE7,并且不支持HTML 5。

不,我也不太了解这种逻辑。

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

在此处输入图片说明

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

或让用户使用Chrome。;-)


1

http://www.HTML-5.com/index.html上的站点确实具有X-UA-Compatible元标记,但仍进入兼容性视图,如地址栏中的“残缺页面”图标所示。如何获得菜单选项以强制IE 9(最终版本9.0.8112.16421)在“标准模式”下呈现页面?我尝试右键单击该残缺的页面图标以及“ Alt”按键,以显示Rene Geuze提到的其他菜单选项,但是这些选项无效。


4
删除元数据周围的IE条件注释。您将页面用作application/xhtml+xml,因此使用XML解析规则;XML不支持条件注释。无论如何,这没有任何意义。浏览器必须先选择一种模式,然后才能决定要解释的条件注释。
bobince '02

1

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


0

在我看来不错:

替代文字

您确定没有全局设置吗?这是Windows 7上Beta的全新安装。开发人员工具报告该页面默认为IE9标准模式。


我有1个以上关于此错误的报告。尽管可能与基本目录(Alliancesatwar.com)有关,但它也以兼容模式呈现所有子目录。但是,我有一个问题,就是网站根源是什么使IE以兼容模式呈现网站?因此,也许至少该指南编码正确。我希望如此。
勒内(René)2010年

@Rene Strange,我只是通过单击主页上的“指南”链接来复制它。但这只发生了一次,经过几次尝试,我还没有重现,只是那一次
Yi Jiang

0

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

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

第二个主要想法是IE9中存在一个错误,这意味着meta标签将不起作用,而不是此解决方案,请尝试此操作

  • 查找/打开您的httpd.conf
  • 取消注释/或添加以下行

    LoadModule headers_module modules/mod_headers.so
  • 添加以下行

    <IfModule headers_module>
        Header set X-UA-Compatible: IE=EmulateIE8
    </IfModule>
  • 保存/重新启动您的Apache服务器,

  • 使用IE9浏览到您的页面,使用WiresharkFiddler等工具,或使用IE开发人员工具检查标题是否存在
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.