Использование API webRequest для перехвата запросов сценариев, их редактирования и отправки обратно - PullRequest
1 голос
/ 16 марта 2019

Как видно из заголовка, я пытаюсь перехватить запросы скриптов со страницы пользователя, сделать GET-запрос к URL-адресу скрипта из фона, добавить немного функциональности и отправить его обратно пользователю.

Несколько предостережений:

  • Я не хочу делать это с каждым запросом сценария
  • Я все еще должен гарантировать, что теги сценария выполняются в исходном порядке

Пока у меня есть два решения, ни одно из которых не работает должным образом.Основной код:

chrome.webRequest.onBeforeRequest.addListener(
  function handleRequest(request) {
    // First I make the get request for the script myself SYNCHRONOUSLY,
    // because the webRequest API cannot handle async.
    const syncRequest = new XMLHttpRequest();
    syncRequest.open('GET', request.url, false);
    syncRequest.send(null);
    const code = syncRequest.responseText;
  },
  { urls: ['<all_urls>'] },
  ['blocking'],
);

Теперь, когда у нас есть код, я попытался вставить его на страницу двумя способами.

  1. Я отправляю кодчерез порт к скрипту контента, который добавит его на страницу внутри тега <script></script>.Вместе с кодом я также отправляю индекс, чтобы убедиться, что сценарии вставлены обратно на страницу в правильном порядке.Это отлично работает для моего фиктивного веб-сайта, но не работает с большими приложениями, такими как youtube, где не удается загрузить изображение большинства видео.Любые советы о том, почему это происходит?
  2. Я возвращаю перенаправление на URL-адрес данных:

    if (condition) return { cancel: false }
    else return { redirectUrl: 'data:application/javascript; charset=utf-8,'.concat(alteredCode) };
    

Эта вторая опция нарушает форматирование кода, иногда удаляяпространство, иногда сокращая его.Я не уверен в причине такого поведения, это может быть связано со спецификацией URL-адреса данных.

Я застрял.Я исследовал почти все ответы на этом сайте и ничего не смог найти. Любая помощь или информация с благодарностью!

Спасибо за ваше время !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...