【发布时间】:2014-07-09 02:04:06
【问题描述】:
我在我的应用程序(带有 ExtJS 4.2 的单页应用程序)中使用 <iframe>(我知道,我知道,...)进行文件下载,因为它们包含大量数据并且可能需要一段时间才能下载生成 Excel 文件(根据参数,我们所说的时间从 20 秒到 20 分钟不等)。
目前的情况是:当用户单击下载按钮时,他被 Javascript (window.location.href = xxx) “重定向”到执行导出的页面,但由于它是在 PHP 中完成的,并且没有发送任何标题,浏览器不断加载页面,直到文件被下载。但它对用户不是很友好,因为没有任何东西可以告诉他它是仍在加载、完成(除了文件下载)还是失败(这会导致页面实际重定向,可能会让他失去他正在做的工作)。
因此,我创建了一个停靠在右下角的小型非模态窗口,其中包含 iframe 以及一条小消息以安抚用户。我需要的是能够检测到它何时加载并能够区分两种情况:
- 没有数据:OK => 关闭窗口
- 文本数据:错误消息 => 向用户显示消息 + 关闭窗口
但我尝试了所有 4 个事件 (W3Schools doc),但没有一个曾经被触发。我至少可以理解,如果不是返回的 HTML 数据,它可能无法触发事件,但即使我强制错误返回文本数据,它也不会被触发。
如果有人知道这个问题的解决方案,或者可能适合这里的替代系统,我会全力以赴!谢谢!
编辑:添加 iframe 代码。我们的想法是获得比setTimeout 更好的关闭方法。
var url = 'http://mywebsite.com/my_export_route';
var ifr = $('<iframe class="dl-frame" src="'+url+'" width="0" height="0" frameborder="0"></iframe>');
ifr.appendTo($('body'));
setTimeout(function() {
$('.dl-frame').remove();
}, 3000);
【问题讨论】:
-
你可以使用jQuery.load()
-
请出示您的代码
-
编辑了我的帖子以添加一些代码
-
这是检测 iframe 负载所需的
iframe.on('load',callbackFunction) -
尝试将 onload = "myFunction()" 添加到您的 iframe 标记并定义该函数
标签: javascript iframe