Firefox расширение dev: как исправить неправильный "Referer" в XMLHttpRequest - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь запрограммировать простое расширение Firefox (66.0 Quantum), предназначенное для загрузки полных видеопотоков HLS. Основной подход c состоит в том, чтобы начать воспроизведение видео, используя обычную функциональность пользовательского интерфейса страницы, и перехватить загрузку соответствующих файлов HLS .m3u8-playlist из background-скрипта расширения (т. Е. Используя «browser.webRequest.onBeforeRequest»). Расширение также перехватывает первый запрос «video-chunk», инициируемый списком воспроизведения (используя «browser.webRequest.onSendHeaders»), поэтому он знает, как должны выглядеть правильные заголовки http для соответствующих запросов «video-chunk» .

с точки зрения разрешений В настоящее время я использую их:

  "permissions": [
    "downloads", "activeTab", "webRequest", "webRequestBlocking", "<all_urls>"
  ],

Исходя из собранной выше информации, в идеале расширение должно иметь возможность создавать правильные запросы XMLHttpRequest для все "mov ie -chucks", найденные в плейлисте и в конечном итоге загрузить все эти файлы. Очевидно, что соответствующая длительная задача «загрузки» должна быть выполнена в фоновом скрипте, и после того, как вышеупомянутая информация будет собрана, не нужно будет по-прежнему оставлять исходную вкладку браузера открытой.

Проблема: Некоторые из серверы, которые обслуживают фрагменты mov ie, по-видимому, полагаются на заголовок «Referer» (и, возможно, «Origin») для какого-либо контроля доступа, а экземпляры XMLHttpRequest, созданные из фонового скрипта, НЕ позволяют создавать соответствующие правильный заголовок (так как это ограниченное поле, его нельзя вручную установить на правильное значение).

Единственный найденный мной обходной путь оставляет желать лучшего: content.XMLHttpRequest, созданный внутри content- Скрипт использует правильные заголовки, и мой background-script может делегировать (через обмен сообщениями) соответствующую загрузку файла в content-script (что довольно глупо и означает, что процесс background-script завершится неудачно, если исходная вкладка браузера будет закрыта во время загрузки) .

* 10 13 * Есть ли способ, позволяющий правильно выполнить / завершить все логи загрузки c на стороне фонового скрипта (даже после закрытия исходной вкладки браузера)?
...