使用Javascript! IE文件就绪状态

时间:2011-07-18 07:47:05

标签: javascript window onload

我不是大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>';

1 个答案:

答案 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 } ?>