#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 с исправлениями для обезьян, которые будут вызываться любыми скриптами.