我不是大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);
}
Anny建议?
好的heres脚本适用于IE和Firefox。 基本上我需要检查iframes就绪状态,它在Firefox中转为“NaN”,首先在IE中“加载”,在完成时转换为“交互式”(IE) 因此,我创建了带有值“loading”的startingState,以便在两个浏览器中使用它,因为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>';
答案 0 :(得分:0)
更新:
使用消息 - MSDN - MDN - 安全地将跨域/跨框架从服务器上的页面传送到另一台服务器上的另一个页面
这个怎么样
<?PHP if (isSet($_POST['download'])) { ?>
$url = "download.php?data=".htmlentities($_POST['download']);
<iframe id="frame" src ="<?PHP echo $url; ?>" width="0" height="0" frameborder="0" scrolling="no" onload="remove_elem('loader')"></iframe>
<div id="loader">;
<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>
</div>';
<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(elemId) {
var element = document.getElementById(elemId);
element.parentNode.removeChild(element);
}
startInterval();
</script>
<?PHP } ?>