因此,在我的应用程序中,用户可以将他们的工作导出为excel。
它的工作原理是打开一个弹出窗口(window.open(...)
),父窗户然后将数据写入表单,然后将表单发回服务器。
服务器生成文件,然后将其流回到弹出窗口,出现下载对话框。它还会使用令牌写一个cookie。
此令牌对于每个下载弹出窗口都是唯一的,当窗口看到该cookie时(定期检查),当用户收到文件下载提示时,它会以window.close()
关闭。
这在IE7和IE8中非常有用
然而,因为IE9决定摆脱对话并用信息栏替换它,窗口关闭然后用户可以采取行动下载,如果他们点击它,他们永远不知道什么时候完成无需手动打开下载对话框。
作为临时解决方案,弹出窗口不再关闭。
但是,我希望能够为用户关闭它,因为一旦下载开始,它就完全没用了。
如何关闭此窗口并仍能在IE9中提醒用户下载已完成且可以打开?
答案 0 :(得分:3)
使用iframe - 它们的效果更好,您可以更好地控制。只需设置display: none;
答案 1 :(得分:2)
我刚刚做了类似的事情。我的解决方案是摆脱window.open
,而是使用Content-Disposition
强制浏览器下载文档而不是打开文档。
更改服务器代码以在生成Excel文档之前插入此HTTP标头,然后将所有下载按钮/链接更改为普通链接,例如<a href="server/document">Download the report as Excel</a>
Content-Disposition: attachment; filename=someFilename.xls
编辑:对不起,我错过了五分钟渲染时间的部分。
您只需使用一些Javascript即可使用Content-Disposition。生成文档时让服务器报告回来。然后关闭window.open
打开的窗口,让主窗口加载包含Content-Disposition标题的文档。
答案 2 :(得分:-1)
您可以执行HTML注释,使关闭弹出窗口的行仅影响非IE9的浏览器... http://www.unintentionallyblank.co.uk/2006/09/19/if-internet-explorer-then-do-something-else-a-how-to/
<!--[If lt IE 9]>
<script>
//your code here
</script>
<![endif]-->
应该有效。这个如果使9之前的所有版本的IE做你将放在其中的脚本。这必须是HTML部分。