我有一个页面,允许用户下载一个动态生成的文件。生成需要很长时间,所以我想显示一个“等待”指标。问题是,我不知道如何检测浏览器何时收到文件,所以我可以隐藏指标。
我以隐藏的形式发出请求,发送到服务器,并针对其隐藏的iframe的结果。这是所以我不会取代整个浏览器窗口的结果。我在iframe上侦听一个“加载”事件,希望在下载完成时触发。
我用文件返回一个“Content-Disposition:attachment”标题,导致浏览器显示“Save”对话框。但浏览器不会触发iframe中的“加载”事件。
我尝试的一种方法是使用多部分响应。所以它会发送一个空的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文件,触发“加载”事件,然后显示可下载文件的“保存”对话框。但是在IE和Safari上却失败了; IE浏览器会触发“加载”事件,但不会下载文件,Safari下载文件(名称和内容类型错误),并且不会触发“加载”事件。
一个不同的方法可能是打电话来启动文件创建,然后轮询服务器,直到它准备好,然后下载已经创建的文件。但我宁愿避免在服务器上创建临时文件。
有没有人有更好的主意?
相似问题