Задать вопрос

JS fetch(): как отличить ошибку CORS от других?

Нужно отловить исключение CORS и прицепить к нему уникальный обработчик в UI.
Пока не нашел способ сам, ошибки, летящие в catch, крайне несодержательны: TypeError: Failed to fetch независимо от причины. Однако, консоль каким-то образом ошибки различает и выводит уведомление has been blocked by CORS policy или This content should also be served over HTTPS. Значит, способ есть?
P.S. да, хотелось бы так же уникальное уведомление выводить для попытки получить небезопасный контент с безопасного ресурса.
  • Вопрос задан
  • 803 просмотра
Подписаться 5 Средний 2 комментария
Решения вопроса 1
@MikUrrey Автор вопроса
Как выяснилось, из соображений безопасности браузеры не делятся с веб-разработчиками причинами блокировок запросов, но с низкой точностью и по косвенным признакам причину ошибки все же можно определить:
const url = 'some url';
try {
      const response = await fetch(url);
      //.....
} catch {
      if (url.startsWith('http:')) {
        console.log(`It's may be a mixed content error`);
      } else {
        try {
          await fetch(url, {'mode':'no-cors'}); //если ресурс доступен, то ошибки не будет
          console.log(`It's may be a CORS error`);
        } catch {
          console.log('Other error');
        }
      }
}

Применяя это решение где-либо, имейте в виду, что этот способ не дает 100% точный ответ, является ли ошибка CORS или нет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы