检测浏览器何时收到文件下载我有一个允许用户下载动态生成文件的页面。这需要很长时间来生成,所以我想显示一个“等待”指示器。问题是,我不知道如何检测浏览器何时收到文件,所以我可以隐藏指示符。我以一种隐藏的形式发出请求,该请求发布到服务器,并针对隐藏的iframe获取其结果。这样我就不会用结果替换整个浏览器窗口了。我在iframe上听一个“Load”事件,希望它在下载完成后启动。我返回一个“内容处理:附件”头与文件,这导致浏览器显示“保存”对话框。但是浏览器不会在iframe中触发“Load”事件。我尝试过的一种方法是使用多部分响应。因此,它将发送一个空的HTML文件,以及附加的可下载文件。例如:Content-type: multipart/x-mixed-replace;boundary="abcde"--abcdeContent-type: text/html--abcdeContent-type:
application/vnd.fdfContent-Disposition: attachment; filename=foo.fdf
file-content--abcde这在Firefox中是可行的;它接收空的HTML文件,触发“Load”事件,然后显示可下载文件的“Save”对话框。但是它在IE和Safari上失败;IE触发“Load”事件,但不下载文件,Safari下载文件(名称和内容类型错误),并且不触发“Load”事件。另一种方法可能是调用启动文件创建,然后轮询服务器直到它准备就绪,然后下载已经创建的文件。但我宁愿避免在服务器上创建临时文件。有人有更好的主意吗?
4 回答
桃花长相依
TA贡献1860条经验 获得超8个赞
function download(blob){ var url = URL.createObjectURL(blob); console.log('create ' + url); window.addEventListener('focus', window_focus, false); function window_focus(){ window.removeEventListener('focus', window_focus, false); URL.revokeObjectURL(url); console.log('revoke ' + url); } location.href = url;}
慕标5832272
TA贡献1966条经验 获得超4个赞
window.onblur()
添加回答
举报
0/150
提交
取消