Я создаю iframe на лету и устанавливаю в качестве URL-страницы страницу, загружающую двоичный файл (xls, doc...). Пока файлы загружаются, я показываю анимацию. Когда этого не происходит, я скрываю это.
Проблема заключается в том, что Chrome не знает, когда файлы будут полностью загружены, то есть когда полностью загружен iframe. Я использую свойство iframe readyState
для проверки состояния iframe:
var iframe = document.createElement("iframe");
iframe.style.visibility = "hidden";
// I start a progress animation
window.setTimeout(showProgressAnimation, 1000);
// I start the file download
iframe.src ='GetFile.aspx?file=' + fileName;
document.body.appendChild(iframe);
function showProgressAnimation() {
if (iframe.readyState == "complete" || iframe.readyState == "interactive") {
// I stop the animation and show the page
animation.style.display = 'none';
progressBar.hide();
$('#page').show();
}
else {
// Chrome is always getting into this line
window.setTimeout(showProgressAnimation, 1000);
}
}
Таким образом, результат представляет собой бесконечный цикл.
Я пробовал следующее и работает в Firefox и Chrome , но не, когда содержимое является двоичным файлом:
if ($.browser.mozilla || $.browser.webkit ) {
iframe.onload = function showProgressAnimation() {
animation.style.display = 'none';
progressBar.hide();
$('#page').show();
}
}
// IE
else{
window.setTimeout(showProgressAnimation, 1000);
}