开发者

Force IE8 *not* to use Compatibility View

Just updated my site to newer, much more standards compliant design. My previous design was so rubbish that I had to use the IE=EmulateIE tag to force IE7 emulation.

Unfortunately, I believe that browsers may be caching this setting from previous visits, causing my new site (which looks great without the button pressed) to look rubbish again...

开发者_如何学JAVA

Is there any opposite tag that I could use, or some magic I can make PHP do to the HTTP headers disable caching of this setting?


In the absence of an X-UA-Compatible http-equiv header, the compatibility mode is determined by the !DOCTYPE (or the absence of a !DOCTYPE, as the case may be). For a chart of which !DOCTYPE gives you which mode (in various browsers) see here:

http://hsivonen.iki.fi/doctype/ (You'll need to scroll down toward the bottom of the page.)

You can override this behavior by using a meta element to specify an X-UA-Compatible http-equiv header, like so: <meta http-equiv="X-UA-Compatible" content="IE=edge" >

(Note: IE=edge goes with the highest available version -- currently IE8 as of this posting -- or one can explicitly specify IE8.)

For more information, see here: http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx


You can also set the X-UA-Compatible header in Apache, via the config or an .htaccess file using the code below. Credit goes to 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>


IE will never cache the X-UA-Compatibility setting on its own. The only other possibility is that users of the site pressed the 'Compatibility View' button on the address bar before you had the X-UA-Compatbile meta tag set. Then your site's domain will appear in a list stored locally on the client's machine. I wrote a blog post about how site owners can prune their domains from that locally stored list if/when a site gets updated to be IE8 compatible. http://blogs.msdn.com/ie/archive/2009/07/01/ie-compatibility-list-pruning.aspx


I know this post is old, but I find adding this to your .htaccess file:

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

...to be more manageable than adding it to pages.

Hope that helps someone.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜