trigger register personalizados mdn eventos event escuchar escuchador create añadir javascript javascript-events cross-browser prototypejs

register - ¿Cuándo debo observar los eventos de javascript en la ventana frente a documento frente a document.body?



mdn events javascript (2)

Estoy usando prototype.js para mi aplicación web, y tengo todo funcionando en chrome, safari y firefox. Ahora estoy trabajando en la compatibilidad con IE8.

Como he estado depurando en IE, he notado que hay eventos de javascript para los que previamente he configurado un observador en la ventana, por ejemplo

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

(donde eventType puede ser "dom:loaded" , "keypress" , etc.) y funciona 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 otra cosa que no sea la window , por ejemplo, document (en el caso de "dom:loaded" ) o document.body (en el caso de "keypress" de "keypress" ) . Sin embargo, esto es todo prueba y error.

¿Hay alguna forma más sistemática de determinar dónde ubicar a estos observadores para que los resultados sean compatibles con todos los navegadores?

¡Gracias!


(Esta no es una respuesta muy completa, pero parece funcionar de manera empírica, así que espero que estas reglas empíricas sean útiles para otros).

  • En general, registrar eventos en document , no en window . Los navegadores webkit y mozilla parecen estar contentos con cualquiera de los dos, pero IE no responde a la mayoría de los eventos registrados en la ventana, por lo que necesita usar el document para trabajar con IE

  • Excepción: el resize y los eventos relacionados con la carga, descarga y apertura / cierre deben configurarse en la ventana.

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

  • Otra excepción: cuando detecte pulsaciones en Mozilla con la función de búsqueda de tipo habilitada, configure sus observadores de eventos clave en la window , no en el document . Si hace esto último, el tipo de búsqueda a medida que se bloquea bloquea el evento.


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