javascript - 文件下载后 iframe onload 不执行?

标签 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 事件执行吗? 如果没有,那么有没有办法检测文件是否已返回?

最佳答案

我这样做的方式,摘自 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 响应已从服务器返回。

就像魅力一样。

关于javascript - 文件下载后 iframe onload 不执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16301711/

相关文章:

两次引用 Jquery 时,JQuery 'Object' 未定义

javascript - 是否有可能强制在移动设备上的 IFrame 内播放视频(例如 Youtube)?

javascript - ANDROID:网站加载不正确,某些链接在 webview 中不起作用

javascript - 用于验证日期时间格式的正则表达式 (MM/DD/YYYY)

javascript - javascript中for循环所花费的时间随着迭代次数的增加呈指数增长

javascript - 在网络 worker 内部,如何从字符串中找到 html 属性?

javascript - 包含 <p></p> 标记的字符串呈现为 HTML 内容而不是 DOM 查询中的字符串

JavaScript/HTML5 - 获取 Canvas 对象文本?

javascript - 获取具有特定类的每个 "rect"的 x Position 属性

ios - 旋转后以编程方式更改 UIkeyboard 的框架