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...
开发者_如何学JAVAIs 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.
精彩评论