<script>
tag solo incendio load
e error
eventi; non sparano gli eventi progress
. Tuttavia, nei browser moderni, Ajax requests do support progress
events. È possibile caricare il contenuto dello script e monitorare i progressi attraverso l'Ajax, e quindi posizionare il contenuto dello script in un nuovo elemento <script>
quando il carico completa:
var req = new XMLHttpRequest();
// report progress events
req.addEventListener("progress", function(event) {
if (event.lengthComputable) {
var percentComplete = event.loaded/event.total;
// ...
} else {
// Unable to compute progress information since the total size is unknown
}
}, false);
// load responseText into a new script element
req.addEventListener("load", function(event) {
var e = event.target;
var s = document.createElement("script");
s.innerHTML = e.responseText;
// or: s[s.innerText!=undefined?"innerText":"textContent"] = e.responseText
document.documentElement.appendChild(s);
s.addEventListener("load", function() {
// this runs after the new script has been executed...
});
}, false);
req.open("GET", "foo.js");
req.send();
Per i vecchi browser che non supportano Ajax progress
, si può costruire il interfaccia utente di reporting progressivo per mostrare una barra di caricamento solo dopo il primo evento progress
(o in caso contrario, mostrare uno spinner generico se nessun evento progress
viene attivato).
Strettamente correlato: [requirejs load script progress] (http://stackoverflow.com/questions/15581563/requirejs-load-script -progress) ("* RequrieJs carica il modulo creando un nuovo tag script nel DOM e ascolta l'evento load. Non ci sono eventi di aggiornamento tra caricamento iniziale e finale. * ") – apsillers
Questa è una cosa del browser, non sotto il nostro controllo come programmatori. Solo quando il browser finisce di caricare e "compilare" il file JS, è possibile accedervi in modo che l'unico modo che vedo sia l'utilizzo di diversi file più piccoli e la suddivisione della logica tra di essi. –