2011-08-29 20 views
14

Devo rilevare se l'utente sta eseguendo una versione precedente di IE (IE9 va bene) da un plugin jQuery, quindi non avrò il controllo sull'HTML.Rileva versioni precedenti di IE

Siamo stati scoraggiati dall'analizzare la stringa user-agent e utilizzando $.browser.msie. Il metodo $.support non copre neanche il problema.

Quindi, ho capito che questo funziona, ma non sono sicuro se è "buona pratica".

$('body').append('<!--[if lte IE 8]><script>$("body").addClass("oldie");</script><![endif]-->'); 
var old_ie = $('body').is('.oldie'); 

Volete utilizzare questo metodo o bastone con parsing della stringa user-agent (Ho bisogno di capire se si tratta di IE e ottenere il numero di versione)?

risposta

16

È possibile eseguire questo

var ie = (function() { 
    var undef, v = 3, div = document.createElement('div'); 

    while (
     div.innerHTML = '<!--[if gt IE '+(++v)+']><i></i><![endif]-->', 
     div.getElementsByTagName('i')[0] 
    ); 

    return v > 4 ? v : undef; 
}()); 

per rilevare la versione di IE.

Fonte:http://ajaxian.com/archives/attack-of-the-ie-conditional-comment

E poi

if (ie < 9) { 
    // do your stuff, for instance: 
    window.location = 'http://getfirefox.com'; // :p 
} 
+0

LOL Avrei dovuto sapere che James Padolsey l'ha scoperto più di un anno fa :) grazie! – Mottie

+0

Mi ricordo di aver visto Rangy prima ... ma penso che non funzionasse con i textareas, forse ho bisogno di guardarlo di nuovo da quando è uscita una nuova versione questo mese. Grazie ancora! – Mottie

2

Lei non ha menzionato esplicitamente nella sua domanda il motivo per cui si ha un bisogno specifico per rilevare per IE9, quindi, in generale, il seguente consiglio vale:

Anziché rilevare per un browser/versione specifici, è necessario rilevare le funzioni specifiche. Modernizr è un buon punto di partenza per un aiuto in questo.

+0

A volte, ci sono cose che IE non supporta che non è possibile utilizzare JavaScript per verificare. Ti piace la roba CSS. –

+0

Il plugin su cui sto eseguendo il wortking ha bisogno di posizionare il cursore all'interno di una textarea ... IE9 sembra funzionare bene senza alcuna modifica del cursore, ma le versioni precedenti non si comportano bene. – Mottie

+0

@fudgey Considera [Rangy] (http://code.google.com/p/rangy/) –

1

ne dite di questo:

if (!($.browser.msie && $.browser.version < 9.0)) { 
    // Apply only to IE8 and lower 
} 

Nota che IE8 presenta come IE7

+0

Sto cercando di evitare lo sniffing del browser come menzionato nella mia domanda. – Mottie

+5

$ .browser è deprecato da 1.3 e rimosso da 1.9 –

+1

Voglio solo che i futuri lettori sappiano che la risposta che stanno guardando potrebbe non funzionare ora/in futuro. Non riesco a capire il tuo punto di frustrazione –

1

https://msdn.microsoft.com/en-us/library/ms537509%28v=vs.85%29.aspx Vedere il link qui sopra, questa potrebbe essere la risposta ufficiale :) In breve, il codice seguente nel tuo html pagina.

<!--[if gte IE 9]> 
<p>You're using a recent version of Internet Explorer.</p> 
<script type="text/javascript">//do something</script> 
<![endif]--> 

<!--[if lt IE 9]> 
<p>Hm. You should upgrade your copy of Internet Explorer.</p> 
<script type="text/javascript">//do something</script> 
<![endif]--> 

<![if !IE]> 
<p>You're not using Internet Explorer.</p> 
<script type="text/javascript">//do something</script> 
<![endif]> 
+0

Sì, ma stavo chiedendo come farlo a livello di codice con javascript ... gli autori di plugin non possono aspettarsi che ogni pagina abbia i commenti condizionali in posizione, quindi dobbiamo aggiungerli da soli. – Mottie

Problemi correlati