Есть ли способ определить в Chrome, отвечает ли HTTP-сервер? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть скрипт, который загружает определенный адрес в дочернее окно и работает над этим.Если я не могу получить доступ к загруженному документу, я хотел бы знать, загрузил ли браузер страницу ошибки Chrome, потому что сеть или сервер недоступны, или я получил ошибку, потому что я не отключил безопасность и изоляцию сайта для фактического окна.Я получил одинаковые DOMException{stack: 'Error: Blocked a frame with origin "..." from accessing a cross-origin frame. в обоих сценариях.Я думал об использовании navigator.onLine и / или проверке с помощью XHR в качестве возможных решений, но я не уверен, возможно ли это.Я не хочу экспериментировать в течение нескольких дней, если в этом нет необходимости.Есть кто-нибудь, кто решил это?

заключение:

В итоге я использовал измененную версию принятого ответа с асинхронными функциями:

async function isAlive(url) {
  try {
    await fetch(url, {mode: 'no-cors'});
    return true;
  } catch(error){
    return false;
  }
}
    
(async function main(){
  const addresses = [
    'https://google.com',
    'https://reallyf4kewebsite.com',
    '/',
    'https://google.com/foo/bar/baz'
  ];
  const results = await Promise.all(addresses.map((address) => isAlive(address)));
  addresses.forEach((address, index) => console.log(address, results[index]));
})();

1 Ответ

0 голосов
/ 27 декабря 2018

Вы можете узнать, жив ли сервер, выполнив к нему запрос no-cors.

Но вы не сможете получить больше информации, чем эта, то есть перенаправление ошибок (404, 501 и т. Д.) Будет считаться живым.

Это потому, что, хотя этот режим позволяет нам отправлять запросы, как если бы не было ограничений CORS, полученный вами ответ на самом деле непрозрачен, и никакой другой информации, кроме ", URL-адрес сопоставлен с некоторымиответ " будет доступен для наших скриптов.

function isAlive(url) {
  return fetch(url, {mode: 'no-cors'})
    .then(r => true)
    .catch(r => false);
}

isAlive('https://google.com')
  .then(r => console.log('google', r));
  
isAlive('https://reallyf4kewebsite.com')
  .then(r => console.log('reallyf4kewebsite', r));
  
isAlive('/')
  .then(r => console.log('stacksnippets', r));

isAlive('https://google.com/foo/bar/baz')
  .then(r => console.log('404 redirect', r));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...