Я ищу хороший способ загрузки и сохранения нескольких файлов с помощью JavaScript, аналогично тому, как работает нативная загрузка.
Есть ли такой способ? (способы, которые я пробовал, см. Ниже)
Вот путешествие, которое я прошел, от общего к эзотерическим решениям:
window.location
отлично работает для одного файла, не работает для нескольких файлов.
window.open
вызывает блокировку всплывающих окон. Даже если действие вызывается в ответ на действие пользователя (нажатие клавиши). Я не уверен, как настроить его так, чтобы он не вызывал блокиратор. Или что это вообще возможно сделать.
FileSaver.js
работает в общем *, однако этот метод опирается на ajax-запрос для извлечения данных и преобразования ответа в загружаемую клиентскую часть. Это медленный и интенсивный процессор.
* Но не здесь **, см. 5.
** Технически это может быть сделано для работы здесь (я думаю, не проверял), так как у меня есть доступ к GM_xmlhttpRequest
, см. 4.
- GM_download:
Так как это пользовательский скрипт, у меня есть доступ к GM_download
. Здесь есть одна большая проблема. Эта функция требует имени. У меня нет этого имени. URL на самом деле является перенаправлением. У меня была идея увидеть, куда идет перенаправление - например, fetch(url, {redirects: 'manual'})
- это приводит к некоторому ответу opaqueredirect
, который не несет абсолютно никакой полезной информации.
fetch
ing with method = HEAD
, поэтому я получаю имя файла в конце цепочки перенаправления. К сожалению, это не удается, потому что конечной точкой является HTTP, а выборка запускается из HTTPS, и браузер блокирует запрос.