Tengo un guión con un evento DOMContentLoaded
handler-¿Scripts cargados con Async con DOMContentLoaded o load event handlers que no se llaman?
document.addEventListener('DOMContentLoaded', function() {
console.log('Hi');
});
Qué estoy cargando asynchronously-
<script async src=script.js></script>
Sin embargo, el controlador de eventos nunca es llamado. Si lo cargo sincrónicamente-
<script src=script.js></script>
Funciona bien.
(Incluso si cambio el evento DOMContentLoaded
a un evento load
, nunca llama.)
Lo que da? El controlador de eventos debe registrarse independientemente de cómo el navegador cargue el script, ¿no?
Editar: No funciona en Chrome 18.0.1025.11 beta, pero, con DOMContentLoaded
, se hace en Firefox 11 beta (pero con load
no lo hace). Imagínate.
OH GRANDES SEÑORES DE JAVASCRIPT Y EL DOM, OREN MOSTRAR EL ERROR DE MIS MANERAS!
Al cargar el guión asynchrounously, le está diciendo al navegador que puede cargar ese guión independientemente de las otras partes de la página. Eso significa que la página puede terminar de cargarse y puede desencadenar DOMContentLoaded ANTES de que se cargue el script y antes de que se registre para el evento. Si eso sucede, te perderás el evento (ya ha sucedido cuando te registras). – jfriend00
Oh, interedasting. Así que realmente debería probar para el evento que ya se haya disparado - (** edit **: en realidad, dado que confío en que el evento se active * después * del script, no debería ser asíncrono en absoluto). Guay. Escríbalo como respuesta y puedes tener un voto positivo :) – user1203233