J'ai écrit une application Web qui nécessite une version 8 de la version 8 (ou une plus haute absumité). Si j'exécute IE8 sur une installation de Windows propre sur un VM, il rapporte "MSIE 8.0" en tant qu'agent utilisateur lorsqu'il est interrogé avec Navigator.useragent dans JavaScript. Mais sur une machine de collègues de Windows 7, sa machine IE rapporte la version 8 de l'aide | À propos de la fenêtre, mais la chaîne d'agent d'utilisateur est 'MSIE 7.0'. P>
Je pense que quelque part sur sa machine, il existe un paramètre qui dit à IE de spoof la version précédente, une sorte de réglage de compatibilité que je présume, mais pour la vie de moi, je ne peux pas le trouver. Je ne configure pas le mode de compatibilité QuirksMode ou IE7 de ma fin. P>
8 Réponses :
L'agent utilisateur n'est pas un moyen sensible ou fiable de déterminer la version du navigateur. Pourquoi ne cherchez-vous pas la présence de la fonctionnalité dont vous avez besoin en le rendant uniquement IE8 et utilisez cela? C'est une méthode beaucoup plus fiable. P>
J'ai entendu cela un million de fois et c'est vrai lorsque vous avez affaire à une caractéristique particulière. Mais quand il s'agit d'une quirk sans rapport avec une caractéristique spécifique que vous devez encore faire face, il est utile d'avoir des stratégies qui n'impliquent pas de détecter quelque chose de totalement non liée à ce que vous faites.
Il devrait détecter de tels problèmes. Alternativement, je ne suis pas sûr, mais c'est-à-dire que 8 pourrait changer de balise d'agent utilisateur en «mode de compatibilité». P>
UA reniflant est encore pire que la détection de la version dans JS - voir UA de Chrome pour un avant-goût de la folie: User-Agent: Mozilla / 5.0 (X11; U; Linux x86_64; EN-US) AppleWebKit / 533.2 (KHTML, comme Gecko) Chrome / 5.0.342.9 Safari / 533.2 Code> (Certains scripts de Braindead recherchent "gecko" dans le script, car c'est ce que Firefox a; et ne me débouche pas sur le "mozilla" initial)
Modernizr détecte Caractéristiques i>, pas des bugs, incompatibilité ou versions de navigateur
@YI JIANG: AH OK, je dois avoir mal compris. Je réagissais à la partie de l'agent utilisateur.
@Piskvor et je répondais à l'affiche originale de cette réponse ... Votre commentaire n'a pas montré quand je tapais le commentaire ... clarifié.
@YI Jiang: Quel est souvent (généralement?) L'intention légitime des personnes posant des questions sur l'agent utilisateur reniflant. @Piskvor: Je ne préconisais rien, je répondais simplement à la question. Il voulait voir ce qui était bizarre avec son scénario - je soupçonne que cela aurait pu être ça.
Pourriez-vous utiliser des commentaires conditionnels?
<meta http-equiv="X-UA-Compatible" content="IE=8"> <script type="text/javascript"> var is_ie8_or_newer = false; </script> <!--[if gte IE 8]> <script type="text/javascript"> is_ie8_or_newer = true; </script> <![endif]-->
Je ne sais pas si cela fonctionne pour un navigateur en mode de compatibilité. L'avez-vous testé?
@RUSHYOO: Je pense que c'est exactement ce que vous voulez: l'opéra se présentant comme c'est-à-dire que c'est toujours l'opéra et agit comme l'opéra.
Dépend. Pour remplacer l'intention d'un utilisateur, c'est généralement une mauvaise chose (TM). Encore une fois, l'utilisateur est un idiot pour s'appuyer sur l'usurpointe.
@RUSHYOO: Mais Opera n'emponge qu'à l'opéra pour laisser les utilisateurs à utiliser des sites qui s'appuient sur (mauvais) navigateur reniflant, afin qu'ils puissent utiliser des sites qui seraient autrement inaccessibles (c'est aussi pourquoi il s'agit d'un paramètre par site).
@Quentin: Je vais signaler cela comme la réponse correcte, même si j'ai faite de légères modifications. J'ai utilisé
pas bon. JavaScript doit être couru du fichier .js, alors que ce code signifiait uniquement pour HTML.
J'enverrais cela et supposerais que l'utilisateur n'utilise pas IE8 et utilise le commentaire conditionnel pour détecter IE8 et mettre à jour le VAR. Ceci est dû au fait que tous les navigateurs ne prennent pas en charge les commentaires et la part de marché tombe rapidement - mieux pour cibler la tendance actuelle / future par défaut.
@Bwric - err ... C'est ce que ce code fait. C'est pourquoi la variable est définie sur FALSE B> et le seul changement si une version appropriée de IE est détectée.
@Quentin Désolé, je vois que maintenant. C'est parce que je peux ici à la recherche d'un moyen de détecter IE8 ou plus bas de sorte que ma tête travaillait de manière opposée lorsque je le lis. Désolé!
Cela ne fonctionnera pas sur IE10 + puisque IE10 a cessé de soutenir les commentaires conditionnels
Le truc le plus divertissant que j'ai vu - sans avoir aucune idée de la fonctionnalité efficace - est de tirer parti de la fonctionnalité de commentaire conditionnelle IE Dynamiquement em>. Pour ce faire, votre code prend un
var dummy = document.getElementById('dummy');
dummy.innerHTML = '<!' + '--[if IE 8]>x<![endif]-->';
var isIE8 = dummy.innerHTML === 'x';
C'est très comme Gist.github.com/527683 , gist.github.com/542301 et gist.github.com/548648
La seule façon de comprendre comment obtenir ma version de IE8 de dire que c'est IE7 est d'activer la vue de la compatibilité. Voir http: //blogs.msdn .COM / B / IE / Archive / 2008/08/27 / Introduction - Compatibilité-View.aspx P>
Eteint que son navigateur a été réglé pour afficher tous les "sites intranet 'en mode de compatibilité. En outre, oui, le mode de compatibilité change la chaîne d'agent utilisateur. P>
Avez-vous vraiment besoin de vérifier la version du navigateur? Ou pouvez-vous simplement utiliser la détection de fonctionnalités? parce que je déteste la détection de navigateur déteste.
@ Geowa4 - Je suis un fan F *** ING de la forme d'astérisque de censure. :)
@Chaospandion ouais bien [explétif] vous! :-P
@ Geowa4: En réalité, il s'agit du meilleur soutien des normes CSS offertes par IE8 que je recherche; Je ne sais pas comment faire fonctionner de manière spécifique. Bien sûr, je pourrais contenir de la détection pour quelque chose d'IE8 spécifique de toute façon. Quoi qu'il en soit, la question reste, pourquoi l'agent utilisateur a-t-il signalé une version précédente?
ou plutôt, quelle est mon application Web qui provoque que l'agent utilisateur a mal reporté, car s'il s'agit de faux, cela pourrait signifier qu'il est mis en mode de compatibilité par l'application Web, ce qui est précisément le comportement que je ne cherche pas