Force IE8 *not* to use Compatibility View

CachingInternet Explorer-8Cross Browser

Caching Problem Overview


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...

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?

Caching Solutions


Solution 1 - Caching

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

Solution 2 - Caching

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>

Solution 3 - Caching

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

Solution 4 - Caching

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJack ShepherdView Question on Stackoverflow
Solution 1 - CachingTim GoodmanView Answer on Stackoverflow
Solution 2 - CachingtoneplexView Answer on Stackoverflow
Solution 3 - CachingMichael BennyView Answer on Stackoverflow
Solution 4 - CachingjasonflahertyView Answer on Stackoverflow