[jQuery-es] detectar funcionalidades (o discriminar browsers :S)

Choan C. Gálvez choan.galvez en gmail.com
Mie Feb 21 04:57:09 PST 2007


Hola Carlos.

On 2/21/07, carlos campderrós <gilipollas.desconcertante en gmail.com> wrote:
> Buenas a todos,
>
> Mi primera experiencia con jquery ha ido muy bien. La primera experiencia de
> mi jefe con jquery no del todo (bueno, más que con jquery, con el js no
> intrusivo).
>
> Tengo esta página (es heredada, no puedo tocar casi nada, no me matéis):
> http://www.reformcampaign.net/. La parte del menú es lo que está hecho con
> jquery ( http://www.reformcampaign.net/js/jquery_commands.js ). Inicialmente
> mostraba el menú desplegado y luego con jquery lo ocultaba, le añadía las
> clases necesarias para el css y ya está, con $(document).ready(function() {
> ... });.
>
> Esto provocaba que el menú se viera inicialmente abierto y rápidamente se
> plegara, creando un efecto de pequeño parpadeo, que hay que eliminar.

Puedes usar un truquito bastante simpático que aprendí en algún bar y
publiqué en <http://blog.scriptia.net/articulos/2006/11/ocultar-elementos-por-css-si-y-solo-si-disponemos-de-javascript.html>.

> Entonces coloqué tras el menú (sin document.ready ni nada) directamente la
> orden de plegado.
>
> Y ahora el problema: cuando lo tenía todo puesto en el document.ready,
> konqueror (y he de suponer que safari también) pasaban olímpicamente del
> tema. Y por mi parte ningún problema, seguían pudiendo navegar
> tranquilamente, aunque sin el efecto tan chachi del plegado y desplegado de
> menús (es lo que tiene el js no obstrusivo, no?). Ahora que he añadido el
> $(".inner_menu").hide() a pelo ahí en el menú, konqueror sí que me hace
> caso. Es decir, si visito la página con konqueror, veo un bonito menú
> plegado imposible de desplegar.
>
> Y después de todo esto rollazo... que puedo hacer para que si algún
> navegador no entiende el $(document).ready(function() { ... });, no ejecute
> la línea que esconde el menú, sin tener que esperar lógicamente a que toda
> la página esté cargada para hacerlo, ya que volvería a causar el parpadeo en
> los demás navegadores.

Se me hace raro que `ready` no funcione correctamente. Ya hace unos
meses que jQuery usa window.onload como "fallback". Usia, si `ready`
no se ha disparado cuando se completa la carga "tradicional",
`window.onload` ejecuta las funciones que hayas asignado a `ready`
antes de hacer cualquier otra cosa.

¿Podrías comprobar que `ready` no se esté disparando _antes_ de tiempo?

Salud.
-- 
Choan
<http://choangalvez.nom.es/>


Más información sobre la lista de distribución jquery-es