Javascript 从预先签名的URL下载S3文件,无需弹出阻止程序

Javascript 从预先签名的URL下载S3文件,无需弹出阻止程序,javascript,node.js,meteor,Javascript,Node.js,Meteor,我有一个Meteor应用程序,我使用预先签名的URL(需要通过API调用生成)从S3下载文件 我遇到弹出窗口拦截器的问题,无法使用AWS-SDK生成的url打开新选项卡,因此我将代码更改为: downloadDocument(document, event) { // open tab immediately to prevent popup blocker const myNewTab = window.open(); // call method to genera

我有一个Meteor应用程序,我使用预先签名的URL(需要通过API调用生成)从S3下载文件

我遇到弹出窗口拦截器的问题,无法使用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);
    });
}
这段代码大部分是有效的,但感觉不是很干净。此外,如果API调用的时间超过1秒(互联网速度较慢),则该选项卡将在下载开始前关闭

如何更改此设置,以便在关闭选项卡之前等待下载?或者是一个类似的解决方案,让我确保下载总是顺利进行,而不会出现弹出窗口拦截器的问题


谢谢

如果你打开一个新窗口,你总是会遇到弹出窗口拦截器

您应该做的是使用
download
属性生成一个
链接,该链接将强制下载而不需要新窗口


然后,您也不需要关闭计时器上的窗口(这在一开始不是一个好方法)

我甚至不知道hrefs中的
下载
属性,这很酷!是的,我最近才发现。一个很好的特点。如果已经解决了您的问题,请将答案标记为正确答案答案答案为“否”,问题是正在生成的URL作为安全预防措施仅在10秒钟内有效。。。但是我也不知道下载的属性,所以谢谢!当我们使用此websocket时,通信将断开。