web-dev-qa-db-fra.com

Comment puis-je afficher un message aux navigateurs IE6 / IE7 pour passer à IE8 et que IE8 ne montre pas l'avertissement IE7?

Je souhaite uniquement permettre aux utilisateurs de l'IE8 (non-IE6, IE7) ou d'un autre navigateur d'accéder à mon site lors de la connexion.

J'ai suivi: http://code.google.com/p/ie6-upgrade-warning/ Mais je voulais aussi qu'il n'autorise pas les utilisateurs IE7 d'utiliser le site principal lorsqu'ils sont connectés (ils peuvent voir Pages publiques.) La raison en est que l'application Web principale comporte de nombreux effets JavaScript qui ne fonctionneront que 100% dans le mode de rendu IE8 (ou tout autre navigateur en dehors de IE.)

Le problème de la modification de l'avertissement de mise à niveau IE6 d'être IE7 est qu'il ressemblait à IE8 affichée ma page Web dans un mode de rendu IE7 et "réside" d'être IE7 et déclenche le code IE7 stylesheet.

Alors, comment puis-je forcer IE8 pour toujours rendre ma page en mode IE8?

24
MikeN

Utilisez cette balise:

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

Correction à l'exemple d'Adamsane:

<!--[if lt IE 8]> Special instructions for IE 7 or less here <![endif]-->

14
Scott

Plutôt que d'essayer de forcer IE 8+, j'utilise une combinaison de commentaires conditionnels et d'un simple contrôle JavaScript. Le document.documentMode La propriété a été ajoutée à IE dans la version 8, donc si elle existe du tout (quelle que soit la valeur, même si elle doit être 7 avec ce code), cela signifie que nous sommes en mode de compatibilité et ne devrait pas montrer l'avertissement:

<!--[if lte IE 7]>
    <script>
        if (!document.documentMode) { //if documentMode exists, this is a later IE in compatibility mode
            showBadBrowserMessage();
        }
    </script>
<![endif]-->
4
Jerph

Voici ce script cool qui fonctionne pour tous les anciens navigateurs:

<script type="text/javascript"> 
    var $buoop = {vs:{i:7,f:5,o:12,s:5,n:9}}; 
    $buoop.ol = window.onload; 
    window.onload=function(){ 
     try {if ($buoop.ol) $buoop.ol();}catch (e) {} 
     var e = document.createElement("script"); 
     e.setAttribute("type", "text/javascript"); 
     e.setAttribute("src", "//browser-update.org/update.js"); 
     document.body.appendChild(e); 
    } 
</script> 

Remarque: si le visiteur ignore le conseil, il n'apparaîtra plus longtemps depuis un certain temps.

Plus peut être trouvé: ICI

4
star18bit

Personnellement, je recommanderais aux utilisateurs de mettre à niveau IE pour des raisons de sécurité. J'utiliserais un commentaire conditionnel sur les navigateurs cibles ci-dessous.

      <!--[if lt IE 8]>You are using an outdated version of Internet Explorer.  For security reasons you should upgrade your browser. Please go to Windows Updates and install the latest version.<![endif]-->

Ce message doit être discret mais gracieux. Vous devez également rendre le site Web utilisable pour ceux qui ne peuvent pas mettre à niveau leurs navigateurs.

4
Tracy

Dépend de la manière dont vous avez codé votre code HTML (x), mais IE8 devrait utiliser le mode de normes (non ie7) si vous avez un doctype strict comme:

<!DOCTYPE html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

en haut de vos fichiers HTML.

spécifications xhtml 1.0 - documents strictement conformes

Voici un bon message sur la manière dont DIFTYPES/ETC affecte le mode de rendu IE8: Comprendre les modes de compatibilité dans Internet Explorer 8

1
Chad Birch

Le meilleur moyen serait probablement de détecter la chaîne d'agent utilisateur du navigateur de l'utilisateur et de les rediriger vers une page leur demandant de mettre à niveau (ou de télécharger un navigateur différent tel que Firefox ou Chrome) si elles utilisent une ancienne version d'IE. Vous pouvez voir des exemples des agents utilisateur de IE 7 et 8 à ce sujet Entrée de blog de développeur . Versions plus anciennes de IE suivez un modèle similaire.

Une chose que vous ne devriez pas faire, cependant, suppose que toute chaîne d'agent d'utilisateur ne suivant pas un certain motif n'est pas valide. Vérifiez simplement MSIE ([0-9]) et voyez si c'est dans la plage; S'il manque entièrement, supposez que le navigateur est pris en charge. S'il s'agit de MSIE 7, vérifiez également le marqueur de trident indiquant le mode de compatibilité (et, je suppose, demandez à l'utilisateur de l'éteindre). Cela permettra à d'autres navigateurs futurs empruntés d'avoir une chance de combattre pour rendre votre page sans les éteindre à la porte :)

1
bdonlan

Comme cela a été mentionné, je vous suggère la meilleure façon d'y parvenir est d'utiliser des commentaires conditionnels pour inclure un particulier de feuille de style à toutes les versions de IE plus tôt que 8:

<!--[if lt IE 8]> Include CSS here <![endif]-->

Le CSS inclus pourrait constituer un avertissement pour être visible ou peut-être permettre une superposition sur la page qui les utilisateurs 'écluses sur. Il serait peut-être une bonne idée d'inclure des règles qui cachent des éléments importants sur la page qui pourrait autrement dérouter l'utilisateur si elles ne fonctionnent pas comme prévu.

Votre autre option est de rediriger l'utilisateur vers une autre page - Je ne suis pas un grand fan de réoriente, mais si elle est utilisée avec soin ils peuvent être une solution adaptée.

Avez-vous envisagé pourquoi vous verrouiller un grand nombre d'utilisateurs sur votre site? Peut-être que vous devriez prendre le temps de comprendre comment soit votre JavaScript gracieusement dégrader, ou l'inverse; " Améliorer progressivement " avec JavaScript.

D'autre part, vous pourriez avoir le contrôle sur les systèmes utilisés par l'organisation à l'aide de votre site dans ce cas, vous êtes probablement des gens de verrouillage OK sur l'utilisation des systèmes non standard.

1
Tom

Vous pouvez utiliser des commentaires conditionnels CSS

<!--[if IE 8]>
Special instructions for IE 6 here
<![endif]-->
0
AdamSane

Utilisation de JavaScript, vous pouvez demander quel navigateur a envoyé la demande>

<script type="text/javascript">
function detectBrowser()
{
var browser=navigator.appName;
var b_version=navigator.appVersion;
var version=parseFloat(b_version);
if (browser=="Microsoft Internet Explorer")
  && (version>=8))
  {
  alert("Your browser is good enough!");
  }
  else
  {
  alert("It's time to upgrade your browser!");
  }
  }
 </script>
0
Luixv

Est cette fête? > <

C'est, mais je pense que les informations ici peuvent être mises à jour un peu.

Par les normes actuelles, "Aujourd'hui" étant le 29 octobre 2013, vous pouvez utiliser cette balise méta pour déclencher le dernier IE et des modes de document et déclencher l'installation de Google Chrome Cadre chez les plus âgés:

<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">

Cela vous permet de servir des styles spécifiques à IE6/7. N'oubliez pas que je dis que je dis que je dis 'styles' pas "des feuilles de style", ce qui signifie que vous n'utilisez qu'un seul fichier CSS et y compris tous vos styles IE6 et IE7. Ceci est pour minimiser les demandes HTTP ... mais c'est une conversation totalement différente.

Quoi qu'il en soit, avec l'extrait ci-dessus, il n'y a pas besoin de scripts ni de commentaires conditionnels.

Remarque: Google Chrome Cadre sera à la retraite en janvier 2014 - Plus d'informations ici .

0
Ricardo Zea