Как обнаружить ошибку net::ERR_NAME_NOT_RESOLVED в JavaScript?

Привет, ребята! У меня возникла проблема с обработкой ошибок DNS в браузере. Я пытаюсь сделать так, чтобы пользователи могли проверять валидность списка эндпоинтов прямо в браузере. Но столкнулся с тем, что не могу поймать ошибку net::ERR_NAME_NOT_RESOLVED.

Пробовал использовать XMLHttpRequest:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://несуществующий-домен.рф');
xhr.onerror = function(e) {
  console.log('Ошибка:', e);
};
xhr.send();

Также пытался загружать изображение:

var img = new Image();
img.src = 'http://несуществующий-домен.рф/logo.png';
img.onerror = function(e) {
  console.log('Ошибка загрузки:', e);
};

Но в обоих случаях не получается получить доступ к конкретной ошибке DNS. Хотя в консоли браузера она отображается.

Может кто-нибудь подсказать, как все-таки можно отловить эту ошибку на уровне JavaScript? Или, может быть, есть какие-то альтернативные способы проверки валидности доменов на клиенте? Буду благодарен за любые идеи!

Да, с такой ошибкой действительно непросто. Я бы посоветовал обратить внимание на Promise-based API, типа fetch(). Он позволяет более гибко обрабатывать сетевые ошибки. Можно также рассмотреть использование библиотеки axios - она предоставляет расширенные возможности для работы с HTTP-запросами и обработки ошибок. А вообще, для проверки валидности доменов на клиенте лучше использовать специализированные сервисы через API. Так будет надежнее и безопаснее.

Слушай, с этой ошибкой реально гемор. Я тоже как-то пытался ее словить, но в итоге забил. Браузеры специально ограничивают доступ к таким ошибкам. Можно попробовать какой-нибудь хак типа setTimeout + Promise.race(), но это не гарантия. Честно говоря, проверка DNS на клиенте — так себе идея. Лучше делай это на сервере, там больше возможностей. А на фронте просто обрабатывай общую ошибку сети и показывай юзеру, что что-то пошло не так.