我有一个允许用户下载动态生成文件的页面。它需要很长时间来生成,所以我想显示一个“等待”;指标。问题是,我不知道如何检测浏览器何时接收到文件,以便我可以隐藏指示器。
我向服务器请求一个隐藏的表单(的帖子),并以一个隐藏的iframe为目标获取其结果。这样我就不会用结果替换整个浏览器窗口。我听着“load”;事件,希望它将在下载完成时触发。
我返回一个"Content-Disposition: attachment
"头文件,这将导致浏览器显示“保存”;对话框。但是浏览器不会触发“加载”;事件。
我尝试的一种方法是使用multi-part
响应。所以它会发送一个空的HTML文件,以及附加的可下载文件。
例如:
Content-type: multipart/x-mixed-replace;boundary="abcde"
--abcde
Content-type: text/html
--abcde
Content-type: application/vnd.fdf
Content-Disposition: attachment; filename=foo.fdf
file-content
--abcde
这在Firefox中是有效的;它接收空HTML文件,触发“load"事件,然后显示可下载文件的“Save"对话框。但它失败在Internet Explorer和Safari;Internet Explorer会触发“加载”;事件,但它不下载文件,并Safari浏览器下载文件(有错误的名称和内容类型),并且不触发“load"事件。
另一种方法可能是调用启动文件创建,轮询服务器直到准备就绪,然后下载已经创建的文件。但我宁愿避免在服务器上创建临时文件。
我该怎么办?