<script>
Tags nur Feuer load
und error
Ereignisse; sie feuern nicht progress
Ereignisse. In modernen Browsern jedoch Ajax requests do support progress
events. Sie können Ihr Skript Inhalt und Überwachung der Fortschritte durch Ajax, und legen Sie dann die Skriptinhalte in ein neues <script>
Element laden, wenn der Ladevorgang abgeschlossen ist:
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();
Für ältere Browser, die Ajax nicht unterstützen progress
, können Sie bauen Ihre Fortschrittsbericht-Benutzeroberfläche, um eine Ladeleiste erst nach dem ersten Ereignis progress
anzuzeigen (oder andernfalls einen generischen Spinner anzuzeigen, wenn keine progress
Ereignisse ausgelöst werden).
Eng verwandt: [requirjs laden Skriptfortschritt] (http://stackoverflow.com/questions/15581563/requirejs-load-script-progress) ("* RequrieJs lädt das Modul durch Erstellen eines neuen Skript-Tags im DOM und hört auf das load-Ereignis, es gibt keine update-Ereignisse zwischen dem Start und dem end-Laden. * ") – apsillers
Das ist eine Browser-Sache, die wir als Programmierer nicht kontrollieren können. Nur wenn der Browser das Laden und "Kompilieren" der JS-Datei beendet, kann man auf sie zugreifen, so dass ich nur mehrere kleinere Dateien sehen und die Logik unter ihnen aufteilen kann. –