Avant de lire :
Avant de lire le contenu spécifique de l'article, j'espère que vous pourrez d'abord ouvrir IE8, ouvrir http://www.taobao.com , puis saisir dans la barre d'adresse :
javascript: alerte (document.documentMode + navigateur.userAgent);void(0)
Je ne sais pas si vous êtes surpris après avoir vu les résultats. Quoi qu'il en soit, je trouve cela très étrange, car il n'y a pas de balise de compatibilité dans la méta de la page, et il n'y a pas de balise X-UA-Compatible dans l'en-tête http lorsque fiddler vérifie. Pourquoi diable le site Web fonctionne-t-il en mode IE7 ?
Mode de compatibilité IE7 et vue de compatibilité
Hier, alors que je lisais un article sur l'iframe hautement adaptatif dans Word of Mouth, j'ai découvert que la démo qu'elle fournissait était différente de ma démo dans IE8. Le résultat en ligne était évidemment le même que dans IETester7. aucune marque de compatibilité dans la méta, fiddler vérifie qu'il n'y a pas de marque X-UA-Compatible dans l'en-tête http, mais pourquoi les résultats en ligne sont-ils différents des résultats locaux ? Cela m'a déprimé. Après l'avoir revu, j'ai découvert que la démo en ligne n'affichait pas le bouton "Affichage de compatibilité" dans IE8. En y réfléchissant, cela doit être la raison.
Plus tard, j'ai trouvé un article Just The Facts: Recap of Compatibility View. Bien qu'il n'ait pas résolu le problème, le contenu était bon, j'aimerais le partager et citer un de ses passages :
L'affichage de compatibilité et la balise X-UA-Compatible ne sont pas équivalents
L'affichage de compatibilité est quelque chose que vous effectuez sur le client. Cela affecte trois choses : la chaîne de l'agent utilisateur, le vecteur de version (utilisé dans l'évaluation des commentaires conditionnels) et le mode vers lequel les DOCTYPEs déclenchent les normes : normes IE8 ou normes X. -La balise/en-tête <META> compatible UA est quelque chose que vous utilisez dans le contenu de la page/côté serveur et, lorsqu'elle est présente, remplace complètement les paramètres d'affichage de compatibilité sur le client. Elle affecte deux choses : le vecteur de version et le mode DOCTYPE qui déclenche les normes. map to. Cela ne peut pas affecter la chaîne UA car il est déjà trop tard pour changer cela – le client a déjà fait la requête GET au serveur (et elle contient une chaîne UA. Ce que cela signifie pour les développeurs, c'est que si votre site pivote). sur la chaîne User Agent, l'ajout uniquement de la balise X-UA-Compatible (pour que IE8 affiche votre site en mode Standards IE7) ne rendra pas votre site Web compatible - vous devrez également mettre à jour la logique de détection de votre chaîne User Agent car Bien.
Cela signifie que la vue de compatibilité joue trois rôles :
La balise méta ne joue que deux rôles : 1. Version, 2. Type de document
(Il est dit ici que la balise méta n'affecte pas le UserAgent. Elle doit faire référence à l'ua côté serveur. Comme la requête du client a été envoyée et contient ua, elle ne sera pas affectée. Cependant, l'ua du client est toujours affecté et ie7 s'affiche.)
correct:
(Peut-être que le test précédent était erroné) L'ua du client ne sera pas affecté, cela affectera uniquement document.documentMode
en outre:
La balise/en-tête <META> fait respectivement référence à : <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"> et à l'ajout d'en-têtes http côté serveur, comme dans le fichier de configuration .net :
De plus, vous pouvez également ajouter des en-têtes http à IIS ou Apache :
résolution de problèmes
À ce stade, le problème au début de l'article n'est toujours pas résolu. Hier soir, j'ai accidentellement vu l'article de Qin Ge sur l'utilisation de doctype pour activer le mode navigateur . Il mentionnait que le mode de compatibilité serait également activé dans la liste noire des sites de Microsoft. l'article ci-dessus L'un des deux commentaires est : res://iecompat.dll/iecompatdata.xml (IE8 uniquement). Entrez cette adresse dans IE8 et elle affichera : Liste d'affichage de compatibilité De cette façon, vous pourrez enfin trouver le domaine. noms de Koubei et Taobao dans cette liste, donc je pense que cela devrait être la réponse à la question au début de cet article. Vous pouvez également trouver un nom de domaine dans cette liste, l'ouvrir et saisir le javascript au début de. l'article dans la barre d'adresse (ps : Microsoft a trop de listes), convertissant autant de sites en IE7.
<configuration>
<système.serveurweb>
<Protocole http>
<en-têtes personnalisés>
<clair />
<add name="X-UA-Compatible" value="IE=EmulateIE7" />
</customHeaders>
</httpProtocole>
</system.webServer>
</configuration>