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

Ren*_*ené 197 html5 css3 compatibility-mode internet-explorer-9

我刚刚安装了IE9测试版并且在我创建的特定网站上(HTML5)IE9跳转到兼容模式,除非我手动告诉它不要.我试过删除网站的几个部分,但没有变化.包括删除所有CSS包括.在我的其他网站上它很好.

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

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

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

如果有人对我有答案,那就太好了!在IE7模式下呈现的HTML5网站非常......蹩脚.

bob*_*nce 262

适用于我在IE9 documentMode中工作.

如果没有X-UA-Compatibleheader/meta来设置显式documentMode,您将获得一个基于以下模式的模式:

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

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

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

<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>
Run Code Online (Sandbox Code Playgroud)

或HTTP标头:

X-UA-Compatible: IE=Edge
Run Code Online (Sandbox Code Playgroud)

获取最新的渲染器,无论IE版本在使用中.

  • 重要说明:如果IE 9配置为始终以兼容模式显示Intranet站点,则元标记和HTTP标头都不会覆盖它. (79认同)
  • 正如Jacob所提到的,IE可以默认显示所有本地/内部网站点处于compat模式.按alt - >工具兼容性查看设置,并确保未选中此框. (29认同)
  • 当我把它放在<head>之后时,meta标签只对我有用(另见下面的答案).当我把它放在<head>元素中时,它不起作用(我仍然得到了撕裂的页面). (29认同)
  • @Jacob:这有点误导.是的,您将处于兼容性浏览器模式,并且没有出路.但您仍然可以使用HTTP标头来设置文档模式,IE版本的最佳版本适用于您的网站.IE = Edge应始终为您提供最新的渲染引擎.因此,即使您在技术上处于兼容模式,也可以像在正常模式下一样呈现页面.如果我错了,请纠正我,但至少我们的Intranet站点的工作方式与此类似(即使选中"在兼容性视图中显示Intranet站点"设置). (12认同)
  • @BorisvanSchooten:我不知道这是否是原因,但`<meta>`标签需要在处理过的HTML文件的前512个字节内.我说"已处理"因为你可以拥有各种PHP,但渲染的代码是重要的.我已经到了将所有关于`<meta>`的注释放在`<meta>`标签下面的地方,所以我没有打破要求. (6认同)
  • @Boris van Schooten:如果可以,我会给你100个赞成票; 我在这上面撕裂我的头发. (2认同)

pka*_*rio 33

我放

<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>
Run Code Online (Sandbox Code Playgroud)

之后的第一件事

<head>
Run Code Online (Sandbox Code Playgroud)

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

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

  • +1,**这是一个非常有价值的说明**.如果你在`meta`语句之前在`<head>`中有`<script>`,那么它(IE = edge)将被忽略. (14认同)

Del*_*ani 22

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

<meta http-equiv="X-UA-Compatible" content="IE=edge">
Run Code Online (Sandbox Code Playgroud)

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

  • 对不起,我无法解决您的问题.但是,我编辑了我的答案,使用`IE = edge`代替,它总是调用可用的最新引擎. (2认同)

Mik*_*ill 6

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

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

为我们工作的事情是手动关闭此设置在IE8:

在此输入图像描述

(叹.)

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

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

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

在此输入图像描述

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

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