Я не большой гуру javascript, поэтому я был бы рад, если бы кто-то мог помочь мне с этим.Итак, что я хочу сделать, это отобразить простой индикатор для загрузки файла, пока файлы будут подготовлены.Теперь все отлично работает в Firefox, но не в IE. Загрузчик будет создан php, а загрузка происходит через iframe.Теперь, как вы можете видеть из приведенного ниже кода, я проверил состояние готовности документа и по какой-то причине он остается интерактивным для IE и никогда не завершается, но в Firefox он завершается прекрасно.
if($_POST['download'])
{
echo '<iframe id="frame" src ="download.php?data='.$_POST['download'].'" width="0" height="0" frameborder="0" scrolling="no"></iframe>';
echo '<div id="loader">';
echo '<div id="loading-container"><p id="loading-content">Please wait while we prepare your files<img id="loading-graphic" width="220" height="19" src="images/indicator.gif" /></p></div>';
echo '</div>';
echo '<script type="text/javascript">
var wooIntervalId = 0;
var i = 0;
function startInterval()
{
wooIntervalId = setInterval(doSomething, 1000);
}
function doSomething()
{
document.getElementById("loading-content").innerHTML = document.readyState + i;
i++;
}
function remove_elem()
{
element = document.getElementById("loader");
element.parentNode.removeChild(element);
}
startInterval();
</script>';
}
Мне очень понравилось решение для удаления индикатора, напримерпо этой причине в Firefox он удаляет индикатор сразу после отображения диалогового окна сохранения файла, но в IE это не просто работает.
window.onload = function()
{
element = document.getElementById("loader");
element.parentNode.removeChild(element);
}
Любые предложения?
Хорошо, вот сценарий, который работает в IE ив Firefox.По сути, мне нужно проверить состояние готовности iframes, которое превращает «NaN» в Firefox и, во-первых, в «загрузку» в IE и «в интерактивном режиме» при завершении (IE). Поэтому я создаю initialState со значением «loading» для работы в обоих браузерах, так как IEизменяет свое состояние дважды, а Firefox - только один раз.В Chrome и Opera состояние готовности iframe превращается в «неопределенное» и будет делать это только один раз, поэтому, если у кого-то есть исправление, это также будет замечательно.
<script type="text/javascript">
var startingState = "loading";
var wooIntervalId = 0;
function startInterval()
{
wooIntervalId = setInterval(doSomething, 1000);
}
function doSomething()
{
var doc=document.getElementById("frame");
if(startingState != doc.readyState)
{
remove_elem();
clearInterval(wooIntervalId);
}
}
function remove_elem()
{
element = document.getElementById("loader");
element.parentNode.removeChild(element);
}
startInterval();
</script>';