首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >浏览器收到文件下载时进行检测?

浏览器收到文件下载时进行检测?

提问于 2017-12-20 16:34:04
回答 2关注 0查看 861

我有一个页面,允许用户下载一个动态生成的文件。生成需要很长时间,所以我想显示一个“等待”指标。问题是,我不知道如何检测浏览器何时收到文件,所以我可以隐藏指标。

我以隐藏的形式发出请求,发送到服务器,并针对其隐藏的iframe的结果。这是所以我不会取代整个浏览器窗口的结果。我在iframe上侦听一个“加载”事件,希望在下载完成时触发。

我用文件返回一个“Content-Disposition:attachment”标题,导致浏览器显示“Save”对话框。但浏览器不会触发iframe中的“加载”事件。

我尝试的一种方法是使用多部分响应。所以它会发送一个空的HTML文件,以及附加的可下载文件。例如:

代码语言:txt
复制
Content-type: multipart/x-mixed-replace;boundary="abcde"
代码语言:txt
复制
代码语言:txt
复制
--abcde
代码语言:txt
复制
Content-type: text/html
代码语言:txt
复制
代码语言:txt
复制
--abcde
代码语言:txt
复制
Content-type: application/vnd.fdf
代码语言:txt
复制
Content-Disposition: attachment; filename=foo.fdf
代码语言:txt
复制
代码语言:txt
复制
file-content
代码语言:txt
复制
--abcde

这适用于Firefox; 它接收到空的HTML文件,触发“加载”事件,然后显示可下载文件的“保存”对话框。但是在IE和Safari上却失败了; IE浏览器会触发“加载”事件,但不会下载文件,Safari下载文件(名称和内容类型错误),并且不会触发“加载”事件。

一个不同的方法可能是打电话来启动文件创建,然后轮询服务器,直到它准备好,然后下载已经创建的文件。但我宁愿避免在服务器上创建临时文件。

有没有人有更好的主意?

相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档