2010-04-16 28 views
21

Estoy usando prototype.js para mi aplicación web, y tengo todo funcionando en chrome, safari y firefox. Ahora estoy trabajando en la compatibilidad de IE8.¿Cuándo debo observar los eventos de javascript en la ventana frente a documento frente a document.body?

Como he estado depurando en IE, me he dado cuenta de que hay eventos de JavaScript para los que he configurado previamente un observador en la ventana, p.

Event.observe(window, eventType, function() {...}); 

(donde eventType podría ser "dom:loaded", "keypress", etc.) y funciona muy bien en Chrome/Safari/Firefox. Sin embargo, en IE el observador nunca dispara.

En al menos algunos casos podría hacer que esto funcione en IE colocando al observador en otro lugar que no sea window, p. Ej. document (en el caso de "dom:loaded") o document.body (en el caso de "keypress"). Sin embargo, esto es todo prueba y error.

¿Existe alguna forma más sistemática de determinar dónde colocar estos observadores de manera que los resultados sean compatibles con varios navegadores?

Gracias!

Respuesta

1

La documentación del objeto de varios navegadores (por ejemplo, window en MSDN, document en MDC) define qué eventos son compatibles con el objeto. Podrías comenzar allí.

+4

Los documentos no hacen un trabajo particularmente bueno de explicar esto. –

+0

Esto parece ser un buen lugar para buscar, pero por lo que puedo decir, el MSDN no es completo. Por ejemplo, uno puede registrar un evento 'onresize' en la' ventana', pero realmente no lo veo allí. – brahn

+0

Eso es porque 'onresize' está expuesto por' window.prototype' en IE. Está en el documento. – Alsciende

25

(Esto no es una respuesta súper amplia, pero parece que funciona de manera empírica. - así que espero que estas reglas generales serán de utilidad para otros)

  • En general, el registro de eventos en document , no window. WebKit y Mozilla navegadores parecen ser feliz con cualquiera, pero IE no responde a la mayoría de los eventos registrados en la ventana, por lo que es necesario utilizar document trabajar con IE

  • Excepción: resize, y eventos relacionados con la carga, la descarga y la apertura/cierre deberían establecerse en la ventana.

  • Excepción a la primera excepción: dom:loaded debe configurarse en document en IE.

  • Otra excepción: Al detectar pulsaciones de teclas en Mozilla con el modo Buscar-como-estar habilitado, configure sus observadores de eventos clave en el window, no en el document. Si haces esto último, parece que el tipo de buscar-como-bloquear el evento.

+0

¿Hay alguna actualización sobre esta pregunta por casualidad? –

Cuestiones relacionadas