200 votes

Remplacer le mode de compatibilité intranet IE8

Par défaut, IE8 force les sites intranet à passer en mode de compatibilité. J'ai essayé de changer l'en-tête méta pour IE8, mais il ne reconnaît pas l'en-tête méta et utilise simplement les paramètres du navigateur. Quelqu'un sait-il comment désactiver ce mode ?

224voto

Andras Csehi Points 3228

Il est possible de passer outre le mode de compatibilité dans l'intranet. Il suffit d'ajouter le code ci-dessous au web.config. Cela a fonctionné pour moi avec IE9.

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <clear />
      <add name="X-UA-Compatible" value="IE=edge" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

84voto

Andrew Points 766

Michael Irigoyen a raison MAIS c'est un peu plus compliqué...

si vous utilisez le merveilleux boilerplate de Paul Irish, vous obtiendrez quelque chose comme ce qui suit :-.

<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]>    <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]>    <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

Cela ne fonctionnera PAS comme prévu et forcera IE à passer en mode de compatibilité dans une situation où il n'est pas possible de se connecter. Intranet environnement si vous avez coché la case "Afficher les sites intranet en vue de compatibilité". Vous devez supprimer les commentaires conditionnels d'IE pour empêcher le mode de compatibilité Intranet.

Le code suivant fonctionnera donc :

<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

En fait, si vous déclenchez les commentaires conditionnels de l'IE avant l'élément <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> vous serez alors contraint de passer en mode de compatibilité dans un système de gestion de l'information. Intranet si vous utilisez IE9 avec les paramètres par défaut.

MISE À JOUR - INFORMATIONS SUPPLÉMENTAIRES : Mais notez qu'il existe une astuce qui permet de faire fonctionner le boilplate HTML5 :

Ajouter un commentaire emtpy, conditionnel avant le DOCTYPE. Notez également que lorsque vous faites que alors vous pouvez también ajouter des commentaires conditionnels autour de la X-UA-Compatible ce qui rend la page également valide pour le HTML5. Ainsi, par exemple :

<!--[if HTML5]><![endif]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->

A billet de blog inspiré par la première partie de cette réponse a plus de détails. Et d'ailleurs : Comme mentionné dans cet article de blog, on peut également remplacer le commentaire conditionnel avant le DOCTYPE par un commentaire de type semi-conditionnel commentaire avec aucune condition : <!--[]--> . Ainsi, comme ça :

<!--[]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->

Mais notez que cette dernière variante ( <--[]--><!DOCTYPE html> ) sera, comme expliqué par exemple par cette réponse à une autre question L'utilisation de l'interface utilisateur, qui permet d'activer le problème bien connu qu'elle pose pour les anciennes versions d'IE sans prise en charge de l'interface utilisateur de l'Internet. X-UA-Compatioble (lire : pour IE7 et IE6) - mettre le navigateur en mode bizarrerie.

34voto

PilotBob Points 1209

Si vous déroulez le menu "Outils" et choisissez "Paramètres d'affichage de compatibilité", vous trouverez en bas de cette boîte de dialogue un paramètre "Afficher les sites intranet en mode de compatibilité". Si vous le décochez, cela devrait résoudre le problème et IE utilisera le mode basé sur le DOCTYPE.

19voto

stefan.s Points 563

Il existe une certaine confusion dans les réponses à cette question.

La première réponse est actuellement une solution côté serveur qui définit un drapeau dans l'en-tête http et certains commentaires indiquent qu'une solution utilisant une balise méta ne fonctionne tout simplement pas.

Je pense que cet article de blog donne un bon aperçu de la façon d'utiliser les méta-informations de compatibilité et, selon mon expérience, il fonctionne comme décrit : http://blogs.msdn.com/b/cjacks/archive/2012/02/29/using-x-ua-compatible-to-create-durable-enterprise-web-applications.aspx

Les points principaux :

  • la mise en place de l'information à l'aide d'une balise méta et dans l'en-tête fonctionnent toutes les deux.
  • La balise méta a la priorité sur l'en-tête.
  • La balise méta doit être la première balise, afin de s'assurer que le navigateur ne détermine pas le moteur de rendu avant sur la base d'une heuristique.

Un point important (et je pense que beaucoup de confusion vient de ce point) est que IE a deux "classes" de modes :

  1. Le mode document
  2. Le mode de navigation

Le mode document détermine le moteur de rendu (comment la page Web est rendue).

Le mode de navigation détermine la chaîne User-Agent (UA) qu'IE envoie aux serveurs, le mode de document qu'IE utilise par défaut et la manière dont IE évalue les commentaires conditionnels.

Vous trouverez de plus amples informations sur le mode document et le mode navigateur dans cet article : http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for-site-developers.aspx?Redirected=true

D'après mon expérience, les métadonnées de compatibilité influencent uniquement le mode document . Donc si vous comptez sur la détection du navigateur, cela ne vous aidera pas. Mais si vous utilisez la détection des fonctionnalités, c'est ce qu'il faut faire.

Je recommande donc d'utiliser la balise meta (dans la page html) en utilisant cette syntaxe :

<meta http-equiv="X-UA-Compatible" content="IE=9,10" ></meta>

Avis : donnez une liste des modes de navigation pour lesquels vous avez effectué des tests.

L'article de blog déconseille également l'utilisation d'EmulateIEX. En voici une citation :

Ceci étant dit, une chose que je trouve étrange est quand une application demande EmulateIE7, ou EmulateIE8. Ces modes d'émulation sont eux-mêmes décisions. Donc, au lieu d'être spécifique sur ce que vous voulez, vous demandez une des deux choses suivantes vous demandez une ou deux choses et vous déterminez laquelle de ces deux choses en cherchant ailleurs dans le code un DOCTYPE (et ensuite en en essayant de comprendre si ce DOCTYPE vous donnera des standards ou des bizarreries en fonction de son contenu - une autre tâche parfois déroutante). tâche parfois déroutante). Plutôt que de faire cela, je pense qu'il est beaucoup plus judicieux de de spécifier directement ce que vous voulez, plutôt que de donner une réponse qui qui est elle-même une question. Si vous voulez les normes IE7, alors utilisez IE=7, plutôt que plutôt que IE=EmulateIE7. (Notez que cela ne veut pas dire que vous ne devez pas utiliser un fichier DOCTYPE - vous devriez).

9voto

alaa9jo Points 214

Essayez ce méta-tag :

<meta http-equiv="X-UA-Compatible" content="IE=8" />

Il devrait forcer IE8 à s'afficher en mode standard même si l'option "Afficher les sites intranet en vue de compatibilité" est cochée [que ce soit pour l'intranet ou pour tous les sites web], je l'ai essayé moi-même sur IE 8.0.6.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X