Uso il caricamento dinamico degli script per ridurre la durata del caricamento iniziale della pagina. Per garantire che le funzioni e gli oggetti definiti da uno script siano accessibili, devo assicurarmi che lo script sia stato completamente caricato.È possibile utilizzare trusted.readyState per rilevare la fine del caricamento dinamico degli script?
Ho sviluppato my own Javascript library a tal fine, e quindi ho fatto un bel po 'di ricerche sull'argomento, studiando come è fatto in diverse librerie. Durante una discussione relativa a questo problema, Kyle Simpson, autore di LABjs, ha dichiarato che:
LABjs (e molti altri caricatori) Impostare sia "onload" e "onreadystatechange" su tutti gli elementi di script, sapendo che alcuni browser fuoco uno, e alcuni spareranno l'altra ...
È possibile trovare un esempio di questo in 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);
}
};
Questo è lo stato dell'arte, ma durante l'analisi di uno strano comportamento in Opera 9.64, sono giunto alla conclusione che, utilizzando questa tecnica, il callback onload è stato licenziato troppo presto.
Pubblicherò le mie scoperte in risposta a questa domanda e vorrei raccogliere ulteriori prove e feedback dalla comunità.
Qualcuno trova il codice corrente nel ramo jQuery 1.x-master? Sembra che abbiano smesso di usare '.onreadystatechange' e' .onload' e li hanno sostituiti con le promesse? [Clicky] (https://github.com/jquery/jquery/blob/1.x-master/src/ajax.js) – Campbeln