2010-11-19 17 views
11

La condizione if riportata di seguito, se il browser è IE e la versione del browser IE è più recente di 9, ma non ho IE 9 per testarlo quindi è difficile conoscere l'output corretto, inoltre questo non è il 100% di ciò che voglio che questo script venga eseguito anche su altri browser per impostazione predefinita come Chrome, Firefox, ecc. - è possibile impostarlo nel se la condizione?se condizione: se il browser è IE e la versione del browser IE è precedente a 9

if ($.browser.msie && parseInt($.browser.version) > 9) 
{ 
    // run this code 
} 

Il motivo per cui voglio usare se la condizione è che lo script sembra avere errore su IE 7 e, naturalmente, la cosa migliore è quello di fissare lo script ma non posso dire quale parte dello script che IE doesn accettalo (tutti gli altri browser funzionano perfettamente!). Conosci uno strumento che posso usare per eseguire il debug dello script per IE 6, 7, 8, ecc.? Sto usando notepad ++ per scrivere il mio jquery, ecc, quindi non fornisce alcun debug roba ...

Quindi, la mia prossima soluzione migliore è di non eseguire questo script se si tratta di browser IE che è più vecchio di 9.

A proposito, questo è il messaggio di errore visualizzato sul browser IE7 ma non riesco mai a capirlo!

Line:910 //which line? 
Char:4 // what the hell is this? 
Error: Object doesn't support this property or method //what? 
Code: 0 // 0 of what? 
URL: http://localhost/mysite/page-1 // so which file is causing the error then? the .js or .html or something else?? 

maledetto IE!

grazie.

+1

sanguinosa IE? Perché non sai come eseguire il debug del tuo codice? Cosa trovi sulla riga 910 di pagina-1? – GolezTrol

+1

@GolezTrol È possibile eseguire il debug in IE. Debugging in IE è fastidioso. Bloody IE! –

+0

FYI è meglio rilevare funzionalità e di rilevare specifici browser. http://blogs.msdn.com/b/ie/archive/2010/04/14/same-markup-writing-cross-browser-code.aspx –

risposta

11

In primo luogo, è possibile ottenere IE9 anteprima scaricandolo dal Sito di Microsoft: http://ie.microsoft.com/testdrive/

In secondo luogo, parseInt($.browser.version) > 9 presumibilmente controllare che la versione sia maggiore di 9, che ovviamente non avverrà fino a quando non verrà rilasciato v10. (forse intendevi >= ('maggiore o uguale a')?

Di solito dico alle persone di evitare il rilevamento del browser o il codice specifico del browser. Ci sono momenti in cui è necessario, ma sono piuttosto rari. il tempo lo sviluppatore sarebbe meglio servita da sapere ciò che stava venendo a mancare e di lavoro intorno ad esso (strumenti come Modernizr di grande aiuto per questo genere di cose).

Tuttavia ci sono momenti in cui uno deve semplicemente fare il rilevamento del browser.

Nel tuo caso, se hai davvero bisogno di rilevare IE, non farlo nel modo in cui stai facendo (cioè verificando la versione 9), sarebbe meglio controllare le versioni precedenti, e io suggerirei t che un commento condizionale sarebbe il modo migliore per farlo.

<script> 
var i_am_old_ie = false; 
<!--[if LT IE 9]> 
i_am_old_ie = true; 
<![endif]--> 
</script> 

Poi la sua dichiarazione if() più tardi può solo guardare in questo modo:

if(i_am_old_ie) { 
    //do stuff for IE6/7/8 
} else { 
    //do stuff for all other browsers (including IE9) 
} 
+0

grazie. IE9 anteprima/testdrive non accetterà il mio portatile come sono su Windows Vista prima versione! – laukok

+1

[Commenti condizionali] (http://msdn.microsoft.com/en-us/library/ms537512.aspx) in uno script causerà un errore di sintassi. È possibile invece utilizzare [Conditional Compilation] (http://msdn.microsoft.com/en-us/library/121hztk3%28v=vs.94%29.aspx). – Oriol

13

Il codice guarda bene, ma si è dimenticato di impostare il parametro radix in parseInt:

if ($.browser.msie && parseInt($.browser.version, 10) > 9){ 

    // you need to wait a couple years to test if it works... 
    alert("I'm IE10 or 11..."); 

} 

Questo non può causare errori

+0

Inoltre, dove hai intenzione di trovare una versione di IE * maggiore * di 9? – hobbs

+0

capito! Grazie mille per questo! :) – laukok

+0

oh che succederà agli altri browser, quindi? lo script all'interno della parentesi può essere eseguito su altri browser? – laukok

2
<!--[if (IE 9)|!(IE)]><!--> Script here <!--<![endif]--> 
9

C'è un metodo ancora più semplice.

Poiché si tratta di un commento, verrà ignorato da tutti gli altri browser tranne IE.

var IE; 
//@cc_on IE = navigator.appVersion; 

Quindi basta utilizzare questo script in you'r per rilevare tutte le versioni di IE.

if (IE) { 
//This is IE. 
} 
else { 
//This is NOT IE. 
} 

O match contro qualsiasi versione di simile:

if (IE <= 6) {}, if (IE < 9) }, if (IE == 7) {} etc etc... 

Ecco la fonte dove ho trovato questi tipi di condizionali: http://www.javascriptkit.com/javatutors/conditionalcompile.shtml

+0

Se stai votando per difetto, almeno spiegami perché .. –

9

ecco la versione Javascript per verificare se il browser è IE:

<script> 

    function getIEVersion() { 
     var rv = -1; // Return value assumes failure. 
     if (navigator.appName == 'Microsoft Internet Explorer') { 
      var ua = navigator.userAgent; 
      var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})"); 
      if (re.test(ua) != null) 
       rv = parseFloat(RegExp.$1); 
     } 
     return rv; 
    } 


    function checkVersion() { 
     var ver = getIEVersion(); 

     if (ver != -1) { 
      if (ver <= 9.0) { 
       // do something 
      } 
     } 
    } 

    checkVersion(); 

</script> 

Questo metodo i È utile nel caso in cui si stiano utilizzando moduli specifici HTML5 e si desideri implementare alcune funzioni di fallback nel caso in cui il browser non supporti tali funzionalità, ad es. <canvas>

+0

grazie per il codice, estimov. – laukok

+0

Idem, grazie esimov, questo si è dimostrato molto utile :) – Ethereal

3

Ho trovato che funziona a cascata funziona alla grande per il rilevamento multibrowser. Questo codice è stato utilizzato per modificare una dissolvenza per mostrare/nascondere in IE 8 7 6.

$(document).ready(function(){ 
    if(jQuery.browser.msie && jQuery.browser.version.substring(0, 1) == 8.0) 
     { 
      $(".glow").hide(); 
      $('#shop').hover(function() { 
     $(".glow").show(); 
    }, function() { 
     $(".glow").hide(); 
    }); 
     } 
     else 
     { if(jQuery.browser.msie && jQuery.browser.version.substring(0, 1) == 7.0) 
     { 
      $(".glow").hide(); 
      $('#shop').hover(function() { 
     $(".glow").show(); 
    }, function() { 
     $(".glow").hide(); 
    }); 
     } 
     else 
     {if(jQuery.browser.msie && jQuery.browser.version.substring(0, 1) == 6.0) 
     { 
      $(".glow").hide(); 
      $('#shop').hover(function() { 
     $(".glow").show(); 
    }, function() { 
     $(".glow").hide(); 
    }); 
     } 
     else 
     { $('#shop').hover(function() { 
     $(".glow").stop(true).fadeTo("400ms", 1); 
    }, function() { 
     $(".glow").stop(true).fadeTo("400ms", 0.2);}); 
     } 
     } 
     } 
     }); 
4

Invece di mettere in un mucchio di JavaScript inline si può solo aggiungere un div vuoto per la versione di IE si prendono di mira , in modo da inserire il seguente nella parte superiore del tuo html, proprio all'interno del tag body:

<!--[if LT IE 9]> 
    <div id="iedetect" class="oldie"></div> 
<![endif]--> 

quindi è possibile inserire un'istruzione if in jQuery per verificare la presenza di quel blocco.

if ($("#iedetect").is(".oldie")) { 
    //Do something 
} else { 
    //Do Something else in all other browsers 
} 
2
<!--[if IE 8]> 
    <script type="text/javascript"> 
    // this is only executed for IE 8 
    </script> 
<![endif]--> 
3

o si potrebbe fare questo

<!--[if IE 9]> 
    <script type="text/javascript"> 
    // this is only executed for IE 9 
    </script> 
<![endif]--> 
Problemi correlati