Недавно в модуль "Сеть" добавили экшены для замены запросов. Но бывают ситуации, когда тело запроса недостаточно менять просто по фильтрам. Например, содержимое закодировано в base64, в котором лежит json, часть значений которого генерируется сайтом (идентификаторы, таймстампы). Поэтому нужна возможность добавить функцию, типа: function(request){}, где request - объект запроса.
Я сейчас пытаюсь подменять через экшен "Выполнять при каждой загрузке страницы в браузере", типа такого:
(function() {
const TARGET_PATTERN = 'myurl';
const originalFetch = window.fetch;
window.fetch = function(input, init) {
const url = new URL(
typeof input === 'string' ? input : input.url,
location.href
);
if (url.pathname.endsWith(TARGET_PATTERN)) {
setFptImageParams(url.searchParams);
input = url.toString();
}
return originalFetch(input, init);
};
const originalOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(method, url) {
const parsedUrl = new URL(url, location.href);
if (parsedUrl.pathname.endsWith(TARGET_PATTERN)) {
makeReplace(parsedUrl.searchParams);
url = parsedUrl.toString();
}
originalOpen.call(this, method, url);
};
function makeReplace(params) {
// Моя бизнес логика
}
})();
Но после применения этого кода бас перестает видеть элементы на странице при поиске по селекторам.