gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 04:43:07 24 4
gpt4 key购买 nike

我需要针对以下用例的跨浏览器解决方案:用户单击我们其中一个页面上的“导出”按钮,这会打开一个带有表单的弹出窗口。在提交表单时,用户应该收到一个二进制文件下载(例如 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 and Content-Disposition", "attachment;文件名=文件名.csv"。

最佳答案

您是否尝试过,在 iframe 解决方案中,实际调用父窗口内的方法,这反过来会设置 iframe 的位置?我问是因为它在我的测试中有效:

父窗口

<html>
<head>
<script type="text/javascript">
var w;

var download = function() {
document.frames[0].location = "test.php";
w.close();
};

var o = function() {
w = window.open("test2.html", "window_name");
return false;
};
</script>
</head>
<body>

<a href="#" onclick="return o();">open</a>

<iframe></iframe>

</body>
</html>

弹窗

<html>
<head>
<script type="text/javascript">
var download = function() {
window.opener.download();
return false;
};
</script>
</head>
<body>

<a href="#" onclick="return download();">download</a>

</body>
</html>

test.php 只是一个强制下载文件的页面,请注意上面的代码是特定于 IE 的,因为我正在使用 document.frames 对象,但它可以很容易地跨浏览器。

关于javascript - 如何在关闭的弹出窗口中提供(在 IE 和 Firefox 中)二进制文件下载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/834677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com