如何在关闭的弹出窗口中提供(在IE和Firefox中)二进制文件下载?

aro*_*biz 5 javascript firefox internet-explorer popup download

我需要一个针对以下用例的跨浏览器解决方案:用户单击其中一个页面上的"导出"按钮,这将打开一个带有表单的弹出窗口.在提交表单时,用户应该接收二进制文件下载(例如,CSV文件),并且弹出窗口应该关闭而不更改父窗口的可见内容.

我们不能使用超时来关闭弹出窗口,因为通常会有一个对话框询问用户在下载文件之前如何处理文件,并且无法知道用户处理此对话框需要多长时间.

我们最初在弹出窗口中有一个脚本,它将window.location设置为下载文件URL.这使弹出窗口不受限制.

因此,我尝试在父窗口中放置一个隐藏的iFrame,并在调用self.close()之前让弹出窗口将iFrame的src设置为下载URL.这在Firefox中完美运行,但IE完全破坏了安全限制.

有没有正确的方法来做到这一点?如何在IE上运行?


更新 - 问题解决了

这里提出的答案并不太远,但我的问题比仅仅是一个Javascript问题要复杂一些.我遇到了IE和Excel的错误(因为下载文件是CSV),弹出窗口正在进行表单发布.

如果不将表单数据附加到URL(对于GET而不是POST)我无法解决问题,并且我必须将站点设置为IE中的受信任(这是一个企业应用程序,因此这是一个合理的请求用户).

在单击表单按钮时,弹出窗口调用window.opener上的函数,传入表单及其操作URL.然后弹出窗口调用window.close().该函数将表单数据附加到URL并将window.location设置为新URL(iFrame构思在IE中从未运行良好,显然不是必需的).

在对表单URL的响应中,请求标头包括Content-Type:application/octetstream和Content-Disposition","附件; 文件名= filename.csv".

inf*_*yde 0

这可能是解决问题的一种方法。

1) 弹出表单 onsubmit 对第三个窗口执行 window.open,该窗口打开一个页面,该页面是一个空白页面,仅返回下载的文件。

2)在弹出表单上的javascript中,在执行window.open之后,立即调用关闭弹出提交表单的父窗口(第一个窗口)方法。

3)在第三页(即返回文件的页面)上,您将头文件中的内容配置为仅返回文件而不返回其他内容,因此该页面不会真正打开。

以下是您可能需要的有关标头的一些信息。该代码采用经典的史前 ASP 格式,但您应该能够看到您需要的内容。

http://classicasp.aspfaq.com/general/how-do-i-prompt-a-save-as-dialog-for-an-accepted-mime-type.html

希望有帮助。