2009-02-25 23 views
34

¿Alguien tiene alguna idea sobre cómo probar algo específico para IE6 (y no IE7) usando jquery.support?Detectando IE6 usando jQuery.support

Mi problema es que IE6 admite: hover psuedo-class solo para elementos de ancla e IE7 lo admite para todos los elementos (como FF, Chrome, etc.). Así que quiero hacer algo especial en caso de que el navegador no sea compatible: pase el mouse por todos los elementos ... por lo tanto, necesito una forma de probar esta función. (no quiero usar jQuery.browser). ¿Algunas ideas?

+0

ninguna de las respuestas a continuación en realidad responde a la pregunta! esto es absurdo. – vsync

Respuesta

55

Si bien es una buena práctica para comprobar la compatibilidad de características en lugar de agente de usuario, no hay manera sencilla para comprobar si hay algo así como el apoyo de una propiedad CSS usando JavaScript. Te recomiendo que sigas la sugerencia de los carteles anteriores de usar comentarios condicionales o que uses jQuery.browser. Una aplicación sencilla (no validado por el rendimiento o errores) podría tener este aspecto:

if ($.browser.msie && $.browser.version.substr(0,1)<7) { 
    // search for selectors you want to add hover behavior to 
    $('.jshover').hover(
    function() { 
     $(this).addClass('over'); 
    }, 
    function() { 
     $(this).removeClass('over'); 
    } 
} 

En su margen de beneficio, añada la clase .jshover a cualquier elemento que desea flotar efectos sobre css. En el CSS, añadir reglas de la siguiente manera:

ul li:hover, ul li.over { rules here } 
+0

Esto es con lo que terminé también. Solo quería saber si había una mejor manera de hacerlo. – Jaime

+5

Realmente no debería usar $ .browser, está en desuso. – Sampson

+0

@Jonathanl: Exactamente ... ¿qué debería usar para esto? – Jaime

21

Se puede utilizar un Microsoft Internet Explorer específica Conditional Comment aplicar específica codificar solo IE6.

<!--[if IE 6]> 
    Special instructions for IE 6 here... e.g. 
    <script>...hook hover event logic here...</script> 
<![endif]--> 
+0

Esta es probablemente la mejor opción, sólo me preguntaba si alguien tenía otra forma de hacerlo ...ya que el documento jquery dice "jQuery viene con una serie de propiedades incluidas, no dude en agregar la suya". Gracias de todos modos – Jaime

+0

Esto no funcionará si está cargando scripts dinámicamente o ejecutando código en elementos creados dinámicamente (modales, por ejemplo). – KyleFarris

+0

@KyleFarris depende ... puede verificar IE6 con el comentario condicional y, si cumple con esa condición, configure los manejadores de jQuery según sea necesario para todos los elementos DOM existentes y elementos futuros utilizando un controlador '.live()' (en jQuery up a v1.8) o el '.on()' preferido de jQuery 1.7+ http://api.jquery.com/on/ – scunliffe

2

Este es un ejemplo de dónde debemos dar un paso atrás y preguntar por qué lo estás haciendo.

Por lo general, es para crear un menú. Si es así, le sugiero que se ahorre algunos dolores de cabeza y use un complemento como superfish o una de las muchas alternativas.

Si no, le sugiero que utilice el detector de eventos jQuery hover(). Por ejemplo:

$("td").hover(function() { 
    $(this).addClass("hover"); 
}, function() { 
    $(this).removeClass("hover"); 
}); 

hará lo que quiera.

+0

Estoy haciendo una lista desplegable personalizada con potencialmente muchos elementos, así que quiero use el evento jquery.hover en caso de que sea Jaime

+0

¿La velocidad de: flotar es un problema? Para decirlo de otra manera: ¿vale la pena el costo de complejidad de apoyar una solución mixta? – cletus

+0

Una buena pregunta, probablemente no, simplemente se siente un poco lento usando el evento hover – Jaime

20

Thickbox utiliza

if(typeof document.body.style.maxHeight === "undefined") { 
    alert('ie6'); 
} else { 
    alert('other'); 
} 
+0

hasta ahora la mejor opción +1, relacionados: http://stackoverflow.com/questions/8931729/some-none-ie-browsers-are-showing-true-for-ie6-browser-detection –

-2
if ($.browser.msie && parseInt($.browser.version, 10) == 6) { 
    alert("I'm not dead yet!"); 
} 
+0

Te perdiste el sentido de la pregunta: '$ .browser' ya no existe en jQuery. – Synchro

1

Sólo por diversión (no usar jQuery.support):

$(document).ready(function(){ 
    if(/msie|MSIE 6/.test(navigator.userAgent)){ 
     alert('OMG im using IE6'); 
    } 
}); 

También puede hacerlo a través de php

<? 
if(preg_match('/\bmsie 6/i', $ua) && !preg_match('/\bopera/i', $ua)){ 
    echo 'OMG im using IE6'; 
} 
?>