强制IE8 *不*使用兼容性视图

时间:2010-01-14 14:24:29

标签: caching internet-explorer-8 cross-browser

刚刚将我的网站更新为更新,更符合标准的设计。我以前的设计是如此垃圾,我不得不使用IE = EmulateIE标签来强制IE7仿真。

不幸的是,我相信浏览器可能会从之前的访问中缓存此设置,导致我的新网站(在没有按下按钮的情况下看起来很棒)再次看起来像垃圾......

我是否可以使用任何相反的标记,或者我可以让PHP对HTTP标题执行某些操作来禁用此设置的缓存?

4 个答案:

答案 0 :(得分:51)

在没有兼容X-UA的http-equiv标头的情况下,兼容模式由!DOCTYPE确定(或者根据具体情况而不存在!DOCTYPE)。对于!DOCTYPE给出哪种模式(在各种浏览器中)的图表,请参见此处:

http://hsivonen.iki.fi/doctype/ (您需要向下滚动到页面底部。)

您可以使用meta元素指定兼容X-UA的http-equiv标头来覆盖此行为,如下所示: <meta http-equiv="X-UA-Compatible" content="IE=edge" >

(注意:IE = edge具有最高可用版本 - 目前是IE8的发布 - 或者可以明确指定IE8。)

有关详细信息,请参阅此处: http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx

答案 1 :(得分:8)

您还可以使用以下代码通过config或.htaccess文件在Apache中设置X-UA-Compatible标头。积分转到html5boilerplate.com

# ----------------------------------------------------------------------
# Better website experience for IE users
# ----------------------------------------------------------------------

# Force the latest IE version, in various cases when it may fall back to IE7 mode
# github.com/rails/rails/commit/123eb25#commitcomment-118920
# Use ChromeFrame if it's installed for a better experience for the poor IE folk

<IfModule mod_setenvif.c>
  <IfModule mod_headers.c>
    BrowserMatch MSIE ie
    Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
  </IfModule>
</IfModule>

<IfModule mod_headers.c>
#
# Because X-UA-Compatible isn't sent to non-IE (to save header bytes), we need to inform proxies that content changes based on UA
#
  Header append Vary User-Agent
# Cache control is set only if mod_headers is enabled, so that's unncessary to declare
</IfModule>

答案 2 :(得分:5)

IE永远不会自行缓存X-UA兼容性设置。唯一的另一种可能性是,在您设置X-UA-Compatbile元标记之前,网站的用户按下地址栏上的“兼容性视图”按钮。然后,您网站的域名将显示在客户端计算机上本地存储的列表中。我写了一篇博客文章,说明如果/当网站更新为IE8兼容时,网站所有者如何从本地存储列表中删除其域名。 http://blogs.msdn.com/ie/archive/2009/07/01/ie-compatibility-list-pruning.aspx

答案 3 :(得分:5)

我知道这篇文章很旧,但我发现将它添加到你的.htaccess文件中:

Header set X-UA-Compatible "IE=edge"

...比将其添加到页面更易于管理。

希望能有所帮助。