Изменение заголовков ответов в событии onHeadersReceived webRequest для запуска окна «Сохранить как» - PullRequest
0 голосов
/ 30 июня 2018

Я экспериментирую с веб-расширениями и пытаюсь изменить заголовки ответов, чтобы сделать результаты XMLHttpRequest () доступными для загрузки, установив Content-Disposition в качестве вложения.

Сейчас я просто пытаюсь заменить полученные заголовки ответа тремя наиболее простыми для начала загрузки, как описано в этом MDN Web Doc . И я думаю, что код соответствует этому очень короткому примеру , предоставленному в веб-документе webRequest, который изменяет заголовок запроса.

У меня есть разрешения webRequest и webRequestBLocking и разрешение хоста для all_urls в файле manifest.json.

После завершения этого кода, когда я записываю заголовки ответа, полученные запросом GET, он остается неизменным. Я уверен, что этот код выполняется, потому что я отправляю сообщения обратно в скрипт содержимого изнутри на каждом этапе; и событие onHeadersReceived завершается до события onreadystatechange запроса GET.

Существует множество вопросов о том, что измененные заголовки не могут быть просмотрены в инструментах разработки, но я пишу то, что получено запросом GET. Этот вопрос гласит, что onHeadersReceived использует заголовки прокси, и вы не можете их реально изменить, и сделать это в onResponseStarted; но это тоже не сработало.

Я хочу, чтобы заголовок ответа инициировал окно «Сохранить как» для загрузки данных, возвращенных из ответа GET, на клиентский диск.

Я, должно быть, упускаю что-то очень простое. Что я делаю не так или не делаю? Спасибо.

 browser.webRequest.onHeadersReceived.addListener(

  listener,

  { urls : ["<all_urls>"] }, 

  ["blocking", "responseHeaders"]

 );




 function listener( details) {

   details.responseHeaders = [ { 'Content-Type' : 'text/html; charset=utf-8' }, { 'Content-Disposition' : 'attachment; filename="fileName.html"' }, { 'Content-Length' : '22' } ];

   return { responseHeaders : details.responseHeaders };

 }

1 Ответ

0 голосов
/ 18 февраля 2019

Чтобы скачать ссылку с расширением Chrome, попробуйте это:

browser.downloads.download({
    url: details.url,
    filename: "suggested name"
});
...