Ответ 1
<script>
теги только стреляют load
и error
события; они не запускают события progress
. Однако в современных браузерах Ajax-запросы поддерживают progress
события. Вы можете загрузить контент script и отслеживать ход выполнения через Ajax, а затем поместить содержимое script в новый элемент <script>
при завершении загрузки:
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();
Для старых браузеров, которые не поддерживают Ajax progress
, вы можете создать свой пользовательский интерфейс выполнения отчетов, чтобы отображать панель загрузки только после первого события progress
(или иначе показать общий счетчик, если нет progress
события когда-либо срабатывают).