Sea*_*ean 3 javascript node.js meteor
我有一个 Meteor 应用程序,我使用预签名 URL 从 S3 下载文件(需要通过 API 调用生成)。
我遇到了弹出窗口拦截器的问题,阻止使用 AWS-SDK 生成的 url 打开新选项卡,因此我将代码更改为以下内容:
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);
});
}
Run Code Online (Sandbox Code Playgroud)
这段代码大部分工作正常,但感觉不太干净。此外,如果 API 调用时间超过 1 秒(网速慢),则该选项卡将在下载开始之前关闭
如何更改此设置,以便在关闭选项卡之前等待下载发生?或者类似的解决方案可以让我确保下载始终顺利进行,而不会出现弹出窗口阻止程序的问题?
谢谢
如果您打开新窗口,您总是会遇到弹出窗口阻止程序。
您应该做的是生成一个<a href="my-custom-server-generated-url" download>与该download属性的链接,这将强制下载而不需要新窗口。
然后你也不需要关闭计时器上的窗口(这首先不是一个好方法)