Как видно из заголовка, я пытаюсь перехватить запросы скриптов со страницы пользователя, сделать 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'],
);
Теперь, когда у нас есть код, я попытался вставить его на страницу двумя способами.
- Я отправляю кодчерез порт к скрипту контента, который добавит его на страницу внутри тега
<script></script>
.Вместе с кодом я также отправляю индекс, чтобы убедиться, что сценарии вставлены обратно на страницу в правильном порядке.Это отлично работает для моего фиктивного веб-сайта, но не работает с большими приложениями, такими как youtube, где не удается загрузить изображение большинства видео.Любые советы о том, почему это происходит? Я возвращаю перенаправление на URL-адрес данных:
if (condition) return { cancel: false }
else return { redirectUrl: 'data:application/javascript; charset=utf-8,'.concat(alteredCode) };
Эта вторая опция нарушает форматирование кода, иногда удаляяпространство, иногда сокращая его.Я не уверен в причине такого поведения, это может быть связано со спецификацией URL-адреса данных.
Я застрял.Я исследовал почти все ответы на этом сайте и ничего не смог найти. Любая помощь или информация с благодарностью!
Спасибо за ваше время !!!