Как перехватить ошибку XMLHttpRequest
Сторонняя js-библиотека делает запрос с помощью XMLHttpRequest, доступа к ее коду нет. Как перехватить ошибку запроса (4xx, 5xx, ...)?
window.onerror не перехватывает, хотя в консоли ошибка видна |
Цитата:
Вы можете отслеживать при помощи события fetch все исходящие запросы, выбирать из них те, которые связаны с той сторонней js-библиотекой, и если с таким запросом что-то пойдёт не так, например сервер возвратит статус 400, то составить свой запрос со статусом 200 и возвратить его! Вот пример, файл service-worker.js addEventListener("fetch", function (event) { if(new URL(event.request.url).host === "picsum.photos") { var promise = fetch(event.request).then(function(response) { if(response.status >= 400 && response.status < 599) { throw new Error("Not found"); } console.log(response); return response; }).catch(function(error) { var response = new Response(error.message); response.headers.set("Content-Type", "text/plain;charset=UTF-8"); return response; }); event.respondWith(promise); } });Скрипт работает так: когда в случае запроса на picsum.photos, сервер отвечает со статусом 400-599, то ответ сервера заменяется на ответ, составленный вручную (текст Not found) Скрипт можно подключить так... navigator.serviceWorker.register("service-worker.js", { scope: "." }); |
Да, я как раз и сделал, переопределив XMLHttpRequest, что костыль, конечно. Про fetch не думал, проверю этот способ тоже. СпасибО!
|
Часовой пояс GMT +3, время: 19:55. |