2010-11-19 12 views
11

La condición if a continuación creo que dice - si el navegador es IE y la versión del navegador IE es más nueva que 9, pero no tengo IE 9 para probarlo, así que es difícil saber la salida correcta, también esto no es el 100% de lo que quiero. Esta secuencia de comandos debe ejecutarse también en otros navegadores como Chrome, Firefox, etc. - ¿es posible configurarlo en el si la condición?si condición: si el navegador es IE y la versión del navegador IE es anterior a 9

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

La razón por la que quiero usar si la condición es que el guión parece tener error en el IE 7 y, por supuesto, lo mejor es fijar el guión, pero no puedo decir qué parte del guión que IE doesn No lo acepto (¡todos los demás navegadores funcionan perfectamente bien!). ¿Conoces alguna herramienta que pueda usar para depurar el script para IE 6, 7, 8, etc.? Estoy usando notepad ++ para escribir mi jquery, etc., así que no proporciona nada de depuración ...

Por lo tanto, mi próxima mejor solución es no ejecutar este script si se trata de un navegador IE que es anterior a 9.

Por cierto, esta es la pantalla del mensaje de error en el navegador IE7 pero nunca lo puedo entender!

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

bloody IE!

gracias.

+1

Bloody IE? ¿Porque no sabes cómo depurar tu código? ¿Qué encuentras en la línea 910 de la página-1? – GolezTrol

+1

@GolezTrol La depuración en IE es posible. La depuración en IE es molesta. Bloody IE! –

+0

Para su información, es mejor detectar características y detectar navegadores específicos. http://blogs.msdn.com/b/ie/archive/2010/04/14/same-markup-writing-cross-browser-code.aspx –

Respuesta

11

En primer lugar, se puede obtener IE9 vista previa descargándolo de Sitio de Microsoft: http://ie.microsoft.com/testdrive/

En segundo lugar, parseInt($.browser.version) > 9 presumiblemente comprobaría que la versión es mayor que 9, que por supuesto no será hasta que se libere v10. (tal vez tu intención era >= ('mayor o igual que')?

Normalmente le pido a las personas que eviten la detección del navegador o el código específico del navegador. Hay momentos en que es necesario, pero son bastante raros. cuando el desarrollador sería mejor servido por saber lo que estaba fallando y trabajar alrededor de ella (herramientas como Modernizr realmente ayuda para este tipo de cosas).

Sin embargo, hay veces en que uno simplemente tiene que hacer la detección del navegador.

En su caso, si realmente necesita detectar IE, no lo haga de la forma en que lo hace (es decir, verificar la versión 9); sería mejor buscar versiones anteriores, y yo sugeriría t que un comentario condicional sería la mejor manera de hacerlo.

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

Luego, su if() comunicado más adelante simplemente puede tener este aspecto:

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

gracias. IE9 preview/testdrive no aceptará mi computadora portátil ya que estoy en la primera versión de Windows Vista. – laukok

+1

[Comentarios condicionales] (http://msdn.microsoft.com/en-us/library/ms537512.aspx) en una secuencia de comandos provocará un error de sintaxis. Pero [Compilación condicional] (http://msdn.microsoft.com/en-us/library/121hztk3%28v=vs.94%29.aspx) podría utilizarse en su lugar. – Oriol

13

Su código se ve bien, pero se olvidó de establecer el parámetro radix en 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..."); 

} 

Esto no puede causar ningún error

+0

Además, ¿dónde encontrarán una versión de IE * mayor * que 9? – hobbs

+0

lo tengo! ¡Muchas gracias por esto! :) – laukok

+0

oh ¿qué pasará con otros navegadores entonces? ¿se ejecutará el script dentro del paréntesis en otros navegadores? – laukok

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

Hay un método aún más fácil.

Como se trata de un comentario, será ignorado por todos los demás navegadores excepto IE.

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

Luego solo use esto en su script para detectar todas las versiones de IE.

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

O partido contra cualquier versión de esta manera:

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

Aquí está la fuente de donde me encontré con este tipo de condicionales: http://www.javascriptkit.com/javatutors/conditionalcompile.shtml

+0

Si está votando algo, al menos diga por qué ... –

9

Aquí está la versión Javascript para comprobar si el navegador está 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> 

Este método i s útil en caso de que esté utilizando módulos específicos de HTML5 y desee implementar algunas funciones de respaldo en caso de que el navegador no admita esas funciones, por ej. <canvas>

+0

gracias por el código, estimov. – laukok

+0

Ídem, gracias esimov, esto resultó muy útil :) – Ethereal

3

Encontré la conexión en cascada que funciona muy bien para la detección de múltiples usuarios. Este código se utiliza para cambiar un fundido para mostrar/ocultar en el 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

En lugar de poner en un montón de JavaScript en línea usted podría agregar un div vacío para la versión de decir que se dirigen , a fin de poner lo siguiente en la parte superior de su html, justo dentro del cuerpo de la etiqueta:

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

para que pueda realizar una sentencia if en su jQuery para comprobar si ese bloque.

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 usted podría hacer esto

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