我有一个Meteor应用程序,我使用预先签名的URL从S3下载文件(需要通过API调用生成)。
我遇到了弹出窗口阻止程序的问题,导致无法使用AWS-SDK生成的网址打开新标签,因此我将代码更改为以下内容:
downloadDocument(document, event) {
// open tab immediately to prevent popup blocker
const myNewTab = window.open();
// call method to generate url
Meteor.call('Events.Methods.Document.Download', { key: document.key, eventId: event._id }, (error, res) => {
if (error) { ... } // removed handle error code
// if url generated, set tab location to url
if (res) myNewTab.location.href = res;
// auto close the tab after 1 second
myNewTab.setTimeout(() => { myNewTab.close(); }, 1000);
});
}
此代码大部分都在工作,但感觉不是很干净。此外,如果API调用需要超过1秒(慢速互联网),则选项卡将在下载开始之前关闭
如何在关闭标签之前更改此设置以便我可以等待下载?或者一个类似的解决方案,这将导致我确保下载始终没有弹出窗口阻止程序成为一个问题?
由于
答案 0 :(得分:2)
如果你打开一个新窗口,你总是会遇到弹出窗口阻止程序。
您应该做的是生成<a href="my-custom-server-generated-url" download>
属性的download
链接,这将强制下载而无需新窗口。
然后你也不需要在计时器上关闭窗口(这首先不是一个好方法)