Uso la carga dinámica de scripts para reducir la duración de la carga de la página inicial. Para garantizar que las funciones y objetos definidos por un script sean accesibles, necesito asegurarme de que el script se haya cargado por completo.¿Se puede confiar en script.readyState para detectar el final de la carga del script dinámico?
He desarrollado my own Javascript library para este fin, y así investigué bastante sobre el tema, estudiando cómo se hace en diferentes bibliotecas. Durante una discusión en relación con este tema, Kyle Simpson, el autor de LABjs, declaró que:
LABjs (y muchos otros cargadores) Conjunto tanto "onload" y "onreadystatechange" en todos los elementos del guión, sabiendo que algunos navegadores se disparará una, y algunos dispararán la otra ...
puede encontrar un ejemplo de esto en the current version of jQuery as of this writing, v1.3.2:
// Attach handlers for all browsers
script.onload = script.onreadystatechange = function(){
if (!done && (!this.readyState ||
this.readyState == "loaded" || this.readyState == "complete")) {
done = true;
success();
complete();
// Handle memory leak in IE
script.onload = script.onreadystatechange = null;
head.removeChild(script);
}
};
Ese es el estado de la técnica, pero durante el análisis de un comportamiento extraño en Opera 9.64, llegué a la conclusión de que, utilizando esta técnica, la devolución de llamada de carga se activó demasiado pronto.
Voy a publicar mis propios resultados en respuesta a esta pregunta, y me gustaría recabar más pruebas y comentarios de la comunidad.
Cualquiera encuentra el código actual en la rama jQuery 1.x-master? Parece que dejaron de usar '.onreadystatechange' y' .onload' y los reemplazaron con promesas? [Clicky] (https://github.com/jquery/jquery/blob/1.x-master/src/ajax.js) – Campbeln