Come posso mostrare un messaggio ai browser IE6/IE7 per eseguire l'aggiornamento a IE8 e fare in modo che IE8 non mostri l'avviso IE7?

StackOverflow https://stackoverflow.com/questions/822508

Domanda

Voglio consentire solo agli utenti con IE8 (non IE6, IE7) o un altro browser di accedere al mio sito dopo aver effettuato l'accesso.

Ho seguito: http://code.google.com/p/ie6-upgrade-warning/Ma volevo anche che non consentisse agli utenti IE7 di utilizzare il sito principale quando hanno effettuato l'accesso (possono visualizzare le pagine pubbliche). Il motivo è che l'applicazione web principale ha molti effetti JavaScript che funzioneranno al 100% solo nella modalità di rendering IE8 (o qualsiasi altro browser diverso da IE.)

Il problema con la modifica dell'avviso di aggiornamento di ie6 in ie7 è che sembrava che IE8 visualizzasse la mia pagina web in una modalità di rendering IE7 e "mentisse" sul fatto di essere ie7 e attivasse il codice del foglio di stile IE7.

Quindi, come posso forzare IE8 a eseguire sempre il rendering della mia pagina in modalità IE8?

È stato utile?

Soluzione

Usa questo tag:

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

Altri suggerimenti

Correzione dell'esempio di AdamSane:

  

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

ecco un buon link che suggerisce qualche soluzione

http://garmahis.com/tools/ie6-update-warning/

personalmente mi piace la quarta soluzione ( http://www.browser-update.org/ )

solo un gioco da ragazzi

Personalmente consiglierei agli utenti di aggiornare IE per motivi di sicurezza. Vorrei utilizzare un commento condizionale per indirizzare i browser sotto IE8.

      <!--[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]-->

Questo messaggio dovrebbe essere discreto ma grazioso. Dovresti anche rendere il sito Web utilizzabile per coloro che non possono aggiornare il proprio browser.

Invece di provare a forzare la modalità IE 8+, utilizzo una combinazione di commenti condizionali e un semplice controllo javascript. La proprietà document.documentMode è stata aggiunta a IE nella versione 8, quindi se esiste del tutto (indipendentemente dal valore, sebbene debba essere 7 con questo codice) significa che siamo in modalità compatibilità e non dovrebbe mostrare l'avvertimento:

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

Ecco questo fantastico script che funziona per tutti i vecchi browser:

<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> 

Nota: se il visitatore ignora il consiglio, non verrà più visualizzato per qualche tempo.

Altre informazioni: qui

Dipende da come hai codificato il tuo (X) HTML, ma IE8 dovrebbe usare la modalità standard (non la modalità IE7) se hai un tipo di documento rigoroso come:

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

nella parte superiore dei tuoi file HTML.

Specifiche XHTML 1.0 - Documenti strettamente conformi

Ecco un buon post su come diversi doctypes / etc influenzano la modalità di rendering di IE8: Comprensione delle modalità di compatibilità in Internet Explorer 8

Probabilmente il modo migliore sarebbe quello di rilevare la stringa User-Agent del browser dell'utente e reindirizzarli a una pagina chiedendo loro di aggiornare (o scaricare un browser diverso come Firefox o Chrome) se stanno usando una vecchia versione di IE. Puoi vedere esempi dei programmi utente di IE 7 e 8 su questo post sul blog degli sviluppatori IE . Le versioni precedenti di IE seguono un modello simile.

Una cosa che non dovresti fare, tuttavia, è supporre che qualsiasi stringa dell'agente utente che non segue un certo schema non sia valida. Controlla MSIE ([0-9]) e vedi se è nel range; se manca del tutto, supponiamo che il browser sia supportato. Se è MSIE 7, controlla ulteriormente l'indicatore Trident che indica la modalità di compatibilità (e, suppongo, chiedi all'utente di disattivarlo). Ciò consentirà ad altri futuri browser upstart di avere la possibilità di combattere per rendere la tua pagina senza girarli via alla porta :)

Come è stato accennato, suggerirei che il modo migliore per raggiungere questo obiettivo sia utilizzare i commenti condizionali per includere un foglio di stile specifico per tutte le versioni di IE precedenti alla 8:

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

Il CSS incluso potrebbe impostare un avviso in modo che sia visibile o forse abilitare un overlay sulla pagina che "blocca" gli utenti.Potrebbe essere una buona idea includere alcune regole che nascondano elementi importanti nella pagina che altrimenti potrebbero confondere l'utente se non funzionano come previsto.

L'altra tua opzione è reindirizzare l'utente a un'altra pagina: non sono un grande fan dei reindirizzamenti ma se usati con cura possono essere una soluzione adeguata.

Hai considerato Perché stai escludendo un gran numero di utenti dal tuo sito?Forse dovresti prenderti il ​​tempo per capire come degradare con garbo il tuo JavaScript o viceversa;'migliorare progressivamente' con JavaScript.

D'altro canto, potresti avere il controllo sui sistemi utilizzati dall'organizzazione che utilizza il tuo sito, nel qual caso probabilmente sei d'accordo a escludere le persone che utilizzano sistemi non standard.

Puoi utilizzare i commenti condizionali CSS

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

Utilizzando javascript puoi chiedere a quale browser hai inviato la richiesta >

<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>

La festa è finita? gt &; lt &;

Lo è, ma penso che le informazioni qui possano essere leggermente aggiornate.

Secondo gli standard odierni, " oggi " essendo il 29 ottobre 2013, puoi utilizzare questo metatag per attivare le ultime modalità IE Browser e Document e avviare l'installazione del Chrome Frame di Google in IE precedenti:

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

Ciò consente di server specifici stili IE6 / 7. Tieni presente che sto dicendo 'stili' non 'fogli di stile', il che significa: useresti solo un singolo file CSS e in esso ci sono tutti i tuoi stili IE6 e IE7. Questo per minimizzare le richieste HTTP ... ma questa è una conversazione totalmente diversa.

In ogni caso, con lo snippet di cui sopra non è necessario utilizzare script o commenti condizionali.

Nota: Google Chrome Frame verrà ritirato a gennaio 2014 - maggiori informazioni qui .

L'idea stessa che stai " bannando " Gli utenti di IE 6 e 7 dal tuo sito Web sono ridicoli. Molte persone non possono aggiornare il proprio browser o installarne un altro a causa di restrizioni di lavoro o perché non sanno come. Escludere queste persone dall'uso del tuo sito ti costerà solo a lungo termine.

Correggi il tuo JavaScript, aggira i problemi o degrada con garbo in modo che il sito funzioni bene anche se è spento.

EDIT: ho inserito alcune informazioni in più in un commento qui sotto che dovrebbe davvero essere in questo post:

Spesso è possibile rilevare IE e aggirarlo. Al diavolo, puoi persino usare i commenti condizionali per caricare una versione diversa di JavaScript. L'uso di un framework JS eliminerà le differenze tra i browser a un livello di cui non devi preoccuparti. Oppure prendi IE7.js e incollalo sul sito - ho sentito che arriva cose che funzionano come te non ci crederebbero.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top