Pourquoi IE9 passe-t-il en mode de compatibilité sur mon site Web?

197

Je viens d'installer la version bêta d'IE9 et sur un site spécifique, j'ai créé (HTML5) IE9 passe en mode de compatibilité, sauf si je le lui dis manuellement. J'ai essayé de supprimer plusieurs parties du site Web, mais aucun changement. Y compris la suppression de toutes les inclusions CSS. Sur un autre site Web de moi, ça va très bien.

De plus, ne le définissez pas manuellement, car IE9 se souvient du paramètre utilisateur et vous ne pouvez pas le rétablir en automatique (ou du moins, je n'ai pas trouvé comment, même pas via la navigation privée et le vidage du cache)

En tous cas. Le site où il passe en mode de compatibilité: http://alliancesatwar.com/guide/
Celui où il s'affiche correctement: http://geuze.name/basement/ (je ne peux pas poster plus d'un hyperlien)

Les deux utilisent le même doctypeet tout. Ces sites ont beaucoup en commun (à part l'apparence) en utilisant le même modèle de base (encodage, balises META, doctype et le même javascript)

Ce serait génial si quelqu'un avait une réponse pour moi! Un site Web HTML5 qui s'affiche en mode IE7 est assez ... boiteux.

René
la source
5
Veuillez expliquer "passe en mode de compatibilité"? Si vous voyez l'actualisation de la page et une bulle indiquant qu'IE a actualisé cette page dans la vue de compatibilité en raison d'un problème, cela signifie que vous avez trouvé un bogue IE appelé "assertion ferme" qui est similaire à un plantage dans le moteur de rendu . Nous souhaitons les trouver et les corriger; veuillez déposer un bogue sur connect.microsoft.com/ie . Merci!
EricLaw

Réponses:

263

Fonctionne dans IE9 documentMode pour moi.

Sans en- X-UA-Compatibletête / méta pour définir un documentMode explicite, vous obtiendrez un mode basé sur:

  • si l'utilisateur a déjà cliqué sur le bouton «Affichage de compatibilité» dans ce domaine;
  • peut-être aussi si cela s'est produit automatiquement en raison d'un autre contenu sur le site provoquant le crash du moteur de rendu d'IE8 / 9 et retombant sur l'ancien moteur de rendu;
  • si l'utilisateur a choisi de mettre tous les sites en vue de compatibilité par défaut;
  • si IE pense que le site se trouve sur votre intranet et par conséquent, par défaut pour la vue de compatibilité;
  • si le site en question figure dans la propre liste de sites Web de Microsoft qui nécessitent une vue de compatibilité.

Vous pouvez modifier ces paramètres dans «Outils -> Paramètres d'affichage de compatibilité» du menu IE. Bien sûr, ce menu est maintenant caché, donc vous ne le verrez pas tant que vous n'aurez pas appuyé sur Alt.

En tant qu'auteur de site, si vous êtes certain que votre site est conforme aux normes (s'affiche bien dans d'autres navigateurs et utilise le reniflage de fonctionnalités pour décider des solutions de contournement du navigateur à utiliser), je suggère d'utiliser:

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

ou l'en-tête HTTP:

X-UA-Compatible: IE=Edge

pour obtenir le dernier rendu quelle que soit la version d'IE utilisée.

bobince
la source
79
Remarque importante: si IE 9 est configuré pour toujours afficher les sites intranet en mode de compatibilité, ni la balise META ni l'en-tête HTTP ne le remplaceront.
Jacob
29
Comme Jacob le mentionne, IE peut afficher par défaut tous les sites locaux / intranet pour être en mode compat. Appuyez sur alt -> Outils Paramètres de compatibilité et assurez-vous que la case n'est pas cochée.
Cory Mawhorter
30
La balise META n'a fonctionné pour moi que lorsque je l'ai placée juste après <head> (voir également la réponse ci-dessous). Quand je l'ai mis plus bas dans l'élément <head>, cela n'a pas fonctionné (j'ai toujours la page déchirée).
Boris van Schooten
13
@Jacob: C'est un peu trompeur. Oui, vous serez en mode navigateur compatible et il n'y a pas d'issue. Mais vous pouvez toujours utiliser l'en-tête HTTP pour définir le mode de document auquel la version d'IE fonctionne le mieux pour votre site. IE = Edge devrait toujours vous fournir le dernier moteur de rendu. Ainsi, même si vous êtes techniquement en mode de compatibilité, vous pouvez afficher vos pages comme en mode normal. Corrigez-moi si je me trompe, mais au moins notre site Intranet fonctionne exactement comme cela (même si le paramètre "Afficher les sites intranet dans la vue de compatibilité" est coché).
mkataja
7
@BorisvanSchooten: Je ne sais pas si c'est la raison, mais les <meta>balises doivent se trouver dans les 512 premiers octets d'un fichier HTML traité. Je dis «traité» parce que vous pouvez avoir toutes sortes de PHP là-haut, mais le code rendu est ce qui est important. Je suis arrivé à l'endroit où j'ai mis tous mes commentaires <meta>sous les <meta>balises, afin de ne pas casser l'exigence.
doubleJ
33

je mets

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

première chose après

<head>

(Je l'ai lu quelque part, je ne me souviens pas)

Je ne pouvais pas croire que cela fonctionnait !!

pkario
la source
Vous devez fermer l'onglet et ouvrir un nouvel onglet, avez-vous essayé cela?
Zeb
1
Il a dit "n'a" pas "n'a pas";)
Nathan JB
14
+1, c'est une note très précieuse . Si vous avez des <script>s à l'intérieur <head>avant cette metainstruction, elle (IE = bord) sera ignorée.
jakub.g
22

Pour forcer IE à effectuer le rendu en mode standard IE9, vous devez utiliser

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

Certaines conditions peuvent amener IE9 à basculer dans les modes de compatibilité. Par défaut, cela peut se produire sur les sites intranet.

Delan Azabani
la source
Cela fonctionne dans l'autre site Web. Donc ça ne devrait pas être ça. En outre, cette méta-balise est mauvaise car vous devez la mettre à jour manuellement chaque fois qu'il y a une nouvelle version d'IE.
René
2
Désolé, je ne peux pas résoudre votre problème. Cependant, j'ai modifié ma réponse pour l'utiliser à la IE=edgeplace, ce qui invoque toujours l'utilisation du dernier moteur disponible.
Delan Azabani
Votre hypothèse est incorrecte. Les démos spécifient X-UA-Compatible pour empêcher IE d'afficher le bouton Affichage de compatibilité car si l'utilisateur le pousse, le contenu du site ne fonctionnera pas correctement.
EricLaw
@ RenéGeuze, vous vous êtes trompé. Edge fait toujours référence à la dernière version d'IE.
neoswf
@DelanAzabani mon commutateur de portail intranet en mode de compatibilité même j'ai ajouté une balise META comme vous l'avez suggéré. s'il vous plaît suggérer comment il pourrait résoudre et rester sur l'exemple de mode standard - IE 8, IE 8 comapitibility alors je veux IE 8 uniquement.
dsi
6

J'ai posté ce commentaire sur un thread StackOverflow séparé, mais j'ai pensé qu'il valait la peine de le répéter ici:

Pour notre application ASP.Net interne, l'ajout de la balise "X-UA-Compatible" sur la page Web, dans le fichier web.config ou dans le code-behind n'a fait aucune différence.

La seule chose qui a fonctionné pour nous a été de désactiver manuellement ce paramètre dans IE8:

entrez la description de l'image ici

(Soupir.)

Ce problème ne semble se produire qu'avec IE8 et IE9 sur les sites intranet. Les sites Web externes fonctionneront correctement et utiliseront la bonne version d'IE8 / 9, mais pour les sites Web internes, IE9 décide soudain qu'il s'agit en fait d'IE7 et ne prend pas en charge HTML 5.

Non, je ne comprends pas non plus cette logique.

Ma solution réticente a été de tester si le navigateur prend en charge HTML 5 (en créant un canevas et en testant s'il est valide), et en affichant ce message à l'utilisateur s'il n'est pas valide:

entrez la description de l'image ici

Ce n'est pas particulièrement convivial, mais obliger l'utilisateur à désactiver ce paramètre ennuyeux semble être le seul moyen de les laisser exécuter correctement les applications Web HTML 5 internes.

Ou demandez aux utilisateurs d'utiliser Chrome. ;-)

Mike Gledhill
la source
1

Le site http://www.HTML-5.com/index.html possède la balise META compatible X-UA mais passe toujours en mode de compatibilité comme indiqué par l'icône «page déchirée» dans la barre d'adresse. Comment obtenez-vous l'option de menu pour forcer IE 9 (version finale 9.0.8112.16421) à afficher une page en mode Standards? J'ai essayé de faire un clic droit sur cette icône de page déchirée ainsi que sur l'astuce "Alt" pour afficher les options de menu supplémentaires mentionnées par René Geuze, mais celles-ci n'ont pas fonctionné.

Rob chez TVSeries.com
la source
4
Supprimez le commentaire conditionnel IE autour de la méta. Vous diffusez la page en tant que application/xhtml+xml, de sorte que les règles d'analyse XML sont utilisées; XML ne prend pas en charge les commentaires conditionnels. En tout cas, cela n'a aucun sens; le navigateur doit choisir un mode avant de pouvoir décider quels commentaires conditionnels interpréter.
bobince
1

En passant sur les sites Web plus modernes, si vous utilisez des instructions conditionnelles sur votre balise html conformément au passe-partout, cela entraînera pour une raison quelconque ie9 à passer par défaut au mode de compatibilité. La solution ici est de déplacer vos instructions conditionnelles hors de la balise html et de les ajouter à la balise body, en d'autres termes hors de la section head. De cette façon, vous pouvez toujours utiliser ces classes dans votre feuille de style pour cibler des navigateurs plus anciens.

uknowit2
la source
0

Ça me va bien:

texte alternatif

Vous êtes sûr que vous n'avez pas défini les paramètres globalement ou quelque chose? Il s'agit d'une nouvelle installation de la version bêta sur Windows 7. Les outils de développement indiquent que la page est par défaut en mode standard IE9.

Yi Jiang
la source
J'ai eu plus d'un rapport de cette erreur. Bien que cela ait peut-être à voir avec le répertoire de base ( alliancesatwar.com ), il rend également tous les sous-répertoires en mode de compatibilité. Mais alors j'ai la question, qu'est-ce qui, à la racine du site Web, rend IE rendre le site Web en mode de compatibilité? Alors peut-être qu'au moins ce guide est bien codé. J'espère donc.
René
@Rene Strange, je viens de le reproduire, en cliquant sur le lien Guide de la page d'accueil. Mais cela n'est arrivé qu'une seule fois, et après quelques tentatives, je n'ai pas encore reproduit cela, juste qu'une seule fois
Yi Jiang
0

J'ai récemment dû résoudre ce problème et voici ce que j'ai fait:

Tout d'abord, cette solution consiste à régler le serveur Apache.

La deuxième pensée principale est qu'il y a un bogue dans IE9 qui signifie que la balise meta ne fonctionnera pas, au lieu de cette solution, essayez ceci

  • trouver / ouvrir votre httpd.conf
  • décommenter / ou ajouter la ligne suivante

    LoadModule headers_module modules/mod_headers.so
  • ajoutez les lignes suivantes

    <IfModule headers_module>
        Header set X-UA-Compatible: IE=EmulateIE8
    </IfModule>
  • enregistrez / redémarrez votre serveur Apache,

  • parcourir votre page avec IE9, utilisez des outils comme Wireshark ou Fiddler ou utiliser des outils de développement IE pour vérifier l' en- tête est là
Abderrazak BOUADMA
la source