文件下载后iframe onload没有执行?

时间:2013-04-30 13:55:34

标签: javascript dom iframe

我显示一个等待对话框然后我用文件的url创建一个iframe并将其附加到文档中。

 Neptune.ShowWaitingDialog();
     iFrame.src = "ExportReportAllMediaDetailsCsv/?" + $.param(object);
     iFrame.style.display = "none";
     iFrame.onload = function () {
        parent.Neptune.CloseWaitingDialog();
    };
    document.body.appendChild(iFrame);

如果服务器端出现错误,iFrame.onload函数会相应地执行并且等待对话框关闭,但是如果返回一个文件,onload函数就不会被执行而等待对话框保持打开状态。

我的问题是,如果返回一个文件,iframe是否会刷新,从而导致onload事件执行? 如果没有,那么有没有办法检测文件是否已被返回?

1 个答案:

答案 0 :(得分:4)

我这样做的方式,取自T.J.克劳德对this old question of mine的回答是:

  1. 添加一个名为“nonce”的隐藏表单字段或GET参数(或任何你想要的)。在页面创建时或使用JavaScript填充唯一编号或随机字符串。

  2. 在服务器上,查找“nonce”参数并添加名为“FILE_READY”(或任何您想要的)的cookie,并将其值设置为nonce值。像往常一样返回文件。

  3. 在客户端上,当设置表单帖子或iframe“src”时 - 换句话说,当您启动文件下载时 - 启动JavaScript间隔计时器以检查“FILE_READY”的当前值曲奇饼。检查每100毫秒左右;它不一定非常频繁。

  4. 只要“FILE_READY”cookie具有“nonce”参数中发送的值,您就会知道HTTP响应已从服务器返回。

  5. 像魅力一样。