web-dev-qa-db-fra.com

Forcer IE8 * pas * à utiliser la vue de compatibilité

Je viens de mettre à jour mon site vers une conception plus récente et bien plus conforme aux normes. Ma conception précédente était tellement détraquée que j'ai dû utiliser la balise IE = EmulateIE pour forcer l'émulation IE7.

Malheureusement, je pense que les navigateurs peuvent mettre en cache ce paramètre lors des visites précédentes, ce qui fait que mon nouveau site (qui a fière allure sans appuyer sur le bouton) a de nouveau l'air de détritus ...

Y a-t-il une balise opposée que je pourrais utiliser, ou une magie que je peux faire PHP faire pour les en-têtes HTTP désactiver la mise en cache de ce paramètre?

55
Jack Shepherd

En l'absence d'en-tête http-equiv compatible X-UA, le mode de compatibilité est déterminé par !DOCTYPE (ou l'absence d'un !DOCTYPE, selon le cas). Pour un graphique dont !DOCTYPE vous donne quel mode (dans différents navigateurs) voir ici:

http://hsivonen.iki.fi/doctype/ (Vous devrez faire défiler vers le bas de la page.)

Vous pouvez remplacer ce comportement en utilisant un élément meta pour spécifier un en-tête http-equiv compatible X-UA, comme ceci: <meta http-equiv="X-UA-Compatible" content="IE=Edge" >

(Remarque: IE = Edge va avec la version la plus élevée disponible - actuellement IE8 au moment de cette publication - ou on peut spécifier explicitement IE8.)

Pour plus d'informations, voir ici: http://msdn.Microsoft.com/en-us/library/cc288325 (VS.85) .aspx

51
Tim Goodman

Vous pouvez également définir l'en-tête compatible X-UA dans Apache, via la configuration ou un fichier .htaccess en utilisant le code ci-dessous. Le crédit revient à 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>
8
toneplex

IE ne mettra jamais en cache le paramètre de compatibilité X-UA seul. La seule autre possibilité est que les utilisateurs du site ont appuyé sur le bouton "Affichage de compatibilité" dans la barre d'adresse avant que le méta-tag X-UA-Compatbile ne soit défini. Le domaine de votre site apparaîtra alors dans une liste stockée localement sur la machine du client. J'ai écrit un article de blog sur la façon dont les propriétaires de sites peuvent élaguer leurs domaines à partir de cette liste stockée localement si/quand un site est mis à jour pour être compatible avec IE8. http://blogs.msdn.com/ie/archive/2009/07/01/ie-compatibility-list-pruning.aspx

5
Michael Benny

Je sais que ce message est ancien, mais je trouve l'ajouter à votre fichier .htaccess:

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

... pour être plus gérable que l'ajouter aux pages.

J'espère que cela aide quelqu'un.

5
jasonflaherty