Есть ли способ перехватывать все сетевые запросы, сделанные JavaScript в веб-браузере?

#javascript #xmlhttprequest #fetch #monkeypatching

#javascript #xmlhttprequest #выборка #monkeypatching

Вопрос:

Например, может быть, я могу обезьянить патч fetch и XMLHttpRequest чтобы я мог изменить запрос. Но что, если используется какой-то код window.location ? Могу ли я как-то исправить это? Какие еще способы?

Комментарии:

1. Какие взаимодействия window.location вы хотите перехватить?

2. Расширение Google Chrome, вероятно, может это сделать. Или вы пытаетесь придумать какую-то независимую от браузера инъекцию скрипта?

3. @CertainPerformance Я пытался приостанавливать каждый раз, когда скрипт хотел изменить URL-адрес окна, но я понятия не имею, в коде это делается для того, чтобы расставить точки останова, поэтому я подумал, что, возможно, можно исправить некоторые API-интерфейсы и поместить debugger s в патч monkey.

4. @DaveS ^ Я пытался это сделать.

5. window.location действительно странно. Он может действовать как установщик / получатель, поскольку присвоение ему приводит к изменению страницы, но получение его приводит к объекту Location . То же самое для window.location.href , и, к сожалению, оба свойства являются неконфигурируемыми , что означает, что изменение их (очевидных) простых значений на JS setters / getters (что позволило бы вам наблюдать изменения), я думаю, невозможно. Если бы это было что-то другое, это, вероятно window.location , было бы возможно. Может быть, прикрепить что-нибудь beforeunload , посмотреть, может ли это дать вам нужную информацию?

Ответ №1:

ДА. Вы можете использовать API Service Workers. Проверьте концепции Service worker и пример использования. Используя service workers, вы можете перехватывать любые запросы и ответы, отклонять их или передавать. Кроме того, сервисные работники доступны на разных страницах, поэтому страницы могут обмениваться данными.

Комментарии:

1. Спасибо! Я знал об этом, но я хотел приостановить выполнение скрипта, чтобы посмотреть, что делает код, выполняющий сетевые запросы, но я не знаю, что / где находится этот код, поэтому я подумал, что могу обезьянить patch, а затем вставить debugger s в API с исправлениями для обезьян, которые будут вызываться любыми скриптами.