У меня есть приложение Meteor, где я загружаю файлы с S3, используя предварительно подписанные URL (необходимо создать с помощью вызова API).
У меня возникла проблема с блокировщиками всплывающих окон, препятствуя открытию новой вкладки с URL-адресом, созданным 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 секунды (медленный интернет), то вкладка закрывается до начала загрузки
Как я могу изменить это, чтобы дождаться загрузки, прежде чем закрыть вкладку? Или аналогичное решение, которое привело бы к тому, что загрузка всегда проходила без блокировщиков всплывающих окон?
Спасибо
Если вы откроете новое окно, вы всегда будете сталкиваться с блокировками всплывающих окон.
Что вам нужно сделать, это создать ссылку <a href="my-custom-server-generated-url" download>
с download
, которая заставит загружать без необходимости нового окна.
Тогда вам также не нужно закрывать окно на таймере (что было не очень хорошим подходом в первую очередь)
download
в hrefs, это круто!