2009-05-04 24 views
23

voglio consentire solo agli utenti con IE8 (non IE6, IE7) o un altro browser per accedere al mio sito quando loggatoCome posso mostrare un messaggio ai browser IE6/IE7 per l'aggiornamento a IE8 e fare in modo che IE8 non mostri l'avviso IE7? .

ho seguito: http://code.google.com/p/ie6-upgrade-warning/ Ma ho anche voluto che non consente agli utenti IE7 di utilizzare i principali sito web quando è connesso (possono visualizzare pagine pubbliche). La ragione principale è che l'applicazione Web principale ha molti effetti JavaScript che funzionano solo al 100% nella modalità di rendering IE8 (o qualsiasi altro browser oltre a IE.)

Il problema con la modifica dell'avviso di aggiornamento ie6 per essere ie7 è che sembrava che IE8 avesse visualizzato la mia pagina web in una modalità di rendering IE7 e "bugie" sull'essere ie7 e attiva il codice del foglio di stile IE7.

Quindi, come posso forzare IE8 a rendere sempre la mia pagina in modalità IE8?

+9

davvero si vuole escludere circa il 40-50% degli utenti di tutto il mondo? Sul serio? – cletus

+0

Non hai specificato con quale linguaggio di programmazione vorresti farlo. –

+2

FYI: quota di mercato attuale del browser - http://www.w3schools.com/browsers/browsers_stats.asp – STW

risposta

24

Usare questo tag:

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

Sì, questo imporrà correttamente IE8 a rendere il suo sito in modalità IE8 e farà in modo che JavaScript e i commenti condizionali riportino IE8. Sul lato server, è valido anche il controllo di "Trident 4.0" nell'intestazione user-agent. Spesso suggeriamo che la gente usi "IE = EmulateIE8" solo per assicurarsi che le pagine in modalità Quirks non vengano forzatamente forzate in modalità Standard, ma questo poster sembra un drogato di standard e non è probabile che utilizzi le pagine in modalità Quirks . – EricLaw

0

È possibile utilizzare i commenti condizionali CSS

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

E fai cosa, usa i CSS per nascondere tutti gli elementi sulla pagina? I CSS non possono limitare l'accesso. –

+0

@AdamSane - Questi sono solo commenti condizionali - non è necessario il bit "CSS". @Chad - Non dovrebbe essere necessario limitare l'accesso: basta rendere visibile un avviso e nascondere qualsiasi cosa possa confondere l'utente. Se l'utente può rompere qualcosa non avendo JavaScript funzionante/funzionante correttamente, allora c'è un problema con l'applicazione. – Tom

1

dipende da come hai codificato il tuo (X) HTML, ma IE8 dovrebbe usare la modalità standard (non in modalità IE7) se si dispone di un DOCTYPE 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 file HTML.

XHTML 1.0 Specs - Strictly Conforming Documents

Ecco un buon post su come i diversi doctype/etc influenzano la modalità di rendering di IE8: Understanding Compatibility Modes in Internet Explorer 8

+0

Non esattamente. Chiunque può attivare la modalità di compatibilità di IE8 in qualsiasi momento facendo clic sull'icona della stupida pagina spezzata. – NotMe

13

Correzione all'esempio di AdamSane:

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

+1

Questo non funzionerà se la pagina è in modalità Visualizzazione Compatibilità.In questa modalità, IE8 utilizza le informazioni sulla versione IE7 per i commenti condizionali. – EricLaw

-2

L'idea stessa che stai "vietando" IE 6 e 7 utenti dal tuo sito web è ridicolo . Molte persone non possono aggiornare il loro browser o installarne un altro a causa di restrizioni sul lavoro o perché non sanno come. Escludere queste persone dall'usare il tuo sito ti costerà solo a lungo termine.

O risolvere il problema con JavaScript, aggirare i problemi o degradare con grazia in modo che il sito funzioni correttamente anche se è spento.

EDIT: ho postato qualche informazione in più in un commento qui sotto, che in realtà dovrebbe essere in questo post:

E 'spesso possibile individuare IE e il lavoro intorno ad esso. Al diavolo, puoi anche usare i commenti condizionali per caricare una versione diversa di JavaScript. L'utilizzo di un framework JS estrae le differenze tra i browser a un livello di cui non devi preoccuparti. O prendi semplicemente IE7.js e attaccalo sul sito - Ho sentito che le cose funzionano come non crederesti.

+3

È difficile correggere il tuo JavaScript quando devi disporre di funzionalità neutre o di conformità agli standard - IE ama avere una propria interpretazione del codice standard, che spesso ti lascia supportare IE o il resto. – STW

+3

Inoltre, sono abbastanza sicuro che non li escluda dal sito, ma dirò loro che se usano IE6/7 potrebbero anche non provarci. Avviso ai tuoi utenti che il loro client incompatibile non è supportato è una buona codifica difensiva. – STW

+0

Spesso è possibile rilevare IE e aggirarlo. Al diavolo, puoi anche usare i commenti condizionali per caricare una versione diversa di JavaScript. L'utilizzo di un framework JS estrae le differenze tra i browser a un livello di cui non devi preoccuparti. O prendi semplicemente IE7.js (http://code.google.com/p/ie7-js/) e rimani sul sito - ho sentito che le cose funzionano come non crederesti. –

0

Utilizzo di javascript si può chiedere quale browser hanno 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> 
+0

Questo non funzionerà se la pagina è in modalità Visualizzazione Compatibilità . In questa modalità, IE8 utilizza le informazioni sulla versione di IE7 per i commenti condizionali e lo user-agent di JavaScript. – EricLaw

1

Probabilmente il modo migliore sarebbe quello di rilevare il browser User-Agent stringa dell'utente e li reindirizza ad una pagina che chiede loro di aggiornare (o scaricare un browser diverso come firefox o chrome) se utilizzano una versione precedente di IE. È possibile visualizzare esempi degli agenti utente di IE 7 e 8 su questo IE developer blog entry. Le versioni precedenti di IE seguono un modello simile.

Una cosa che non dovresti fare, tuttavia, è che ogni stringa di user agent che non segue un determinato pattern non è valida. Basta controllare MSIE ([0-9]) e vedere se è nel raggio d'azione; se manca completamente, supponiamo che il browser sia supportato. Se si tratta di MSIE 7, controllare ulteriormente il marker Trident che indica la modalità di compatibilità (e, suppongo, chiedere all'utente di spegnerlo). Ciò consentirà per altri futuri browser, upstart per avere una possibilità di combattere a rendere la vostra pagina senza la allontanano alla porta :)

1

Come è stato detto io suggerirei il modo migliore per raggiungere questo obiettivo è quello di utilizzare i commenti condizionali per includere un foglio di stile specifico per tutte le versioni di IE prima di 8:

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

il CSS incluso potrebbe impostare un allarme per essere visibile o forse abilitare una sovrapposizione sulla pagina quale "blocca" gli utenti. Potrebbe essere una buona idea includere alcune regole che nascondono elementi importanti nella pagina che potrebbero altrimenti confondere l'utente se non funzionano come previsto.

L'altra opzione è quella di reindirizzare l'utente a un'altra pagina: non sono un grande fan dei reindirizzamenti, ma se usato con cautela può essere una soluzione adeguata.

Hai considerato perché stai bloccando una grande quantità di utenti dal tuo sito? Forse dovresti prendere il tempo per capire come degradare con garbo il tuo JavaScript, o viceversa; 'migliorare progressivamente' con JavaScript.

D'altra parte, potresti avere il controllo sui sistemi utilizzati dall'organizzazione utilizzando il tuo sito, nel qual caso probabilmente stai bloccando le persone per l'utilizzo di sistemi non standard.

4

Personalmente mi sento di raccomandare agli utenti di aggiornare IE per motivi di sicurezza. Vorrei utilizzare un commento condizionale per indirizzare i browser al di sotto di 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 deve essere discreto ma aggraziato. Dovresti inoltre rendere il sito web utilizzabile per coloro che non possono aggiornare i loro browser.

4

Anziché 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 (indipendentemente dal valore, sebbene DEVE essere 7 con questo codice) significa che siamo in modalità compatibilità e non dovrebbe mostrare l'avviso:

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

Questa festa è finita? > <

Lo è, ma penso che le informazioni qui possano essere aggiornate un po '.

Per gli standard odierni, "oggi" essere 29 ottobre del 2013, è possibile utilizzare questo meta tag per innescare le più recenti modalità del browser e del documento IE e innescare l'installazione di Google Chrome Frame in IE anziani:

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

Ciò consente al server specifici stili IE6/7. Tieni presente che sto dicendo "stili" e non "fogli di stile", ovvero: useresti solo un singolo file CSS e in esso ci sono tutti gli stili IE6 e IE7. Questo per minimizzare le richieste HTTP ... ma è una conversazione completamente diversa.

In ogni caso, con lo snippet sopra riportato non è necessario scrivere script o commenti condizionali.

Nota: Google Chrome Frame verrà ritirato a gennaio 2014 - more info here.

3

Ecco questo script fresco 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, che non apparirà ancora per qualche tempo.

più può essere trovato: here

Problemi correlati