dr.Brain

doctor Brain

мир глазами веб-разработчика

JavaScript: онлайн или офлайн

выводим сообщение о наличии подключения к Интернету с помощью JavaScript

dr.Brain

время чтения 2 мин.

Photo by Raphael Nogueira on Unsplash

Порой пользователю веб-сервиса необходимо знать о потере подключения к Интернету. Например, он может работать с кэшированной информацией, думая, что сайт не обновляется администраторами, в то время как основной причиной такой ситуации является отсутствие подключения к Интернету.

Хорошей практикой в таких случаях является уведомление пользователя о наличии соединения с Интернетом.

Определение статуса соединения

Для определения статуса соединения можно использовать navigator.onLineAPI. Это позволит получить логическое значение, указывающее на работающее подключение к сети.

Следует помнить, что для различных браузеров такая возможность реализована по-разному, поэтому результаты могут различаться.

При загрузке страницы можно узнать о наличии сети:

window.addEventListener('load', () => {
  const status = navigator.onLine;
});

но так невозможно отследить меняющееся состояние подключения к Интернету уже после загрузки контента. Поэтому лучше отслеживать офлайн и онлайн события:

window.addEventListener('offline', (e) => {
  console.log('offline');
});

window.addEventListener('online', (e) => {
  console.log('online');
});

Рассмотрим пример с базовым текстовым элементом в центре экрана, информирующими пользователя о статусе его подключения к сети. При этом будем считать, что во время загрузки страницы подключение к Интернету есть:

<div class="status">
  <div class="offline-msg">You're offline 😢</div>
  <div class="online-msg">You're connected 🔗</div>
</div>

Для стилизации элементов используется SCSS:

.status {
  background: #efefef;
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
  div {
    padding: 1rem 2rem;
    font-size: 3rem;
    border-radius: 1rem;
    color: white;
    font-family: Roboto, 'Helvetica Neue', Arial, sans-serif;
  }
  .online-msg {
    background: green;
    display: block;
  }
  .offline-msg {
    background: red;
    display: none;
  }
}

Теперь нужно добавить класс, который позволит переключаться между онлайн и офлайн состояниями:

.status {
  &.offline {
    .online-msg {
      display: none;
    }
    .offline-msg {
      display: block;
    }
  }
}

Теперь, если к родительскому div добавить класс offline появится сообщение об отсутствии Интернета offline-msg.

Осталось создать скрипт для переключения между состояниями онлайн и офлайн:

const status = document.querySelector('.status');

window.addEventListener('load', () => {
  const handleNetworkChange = () => {
    if (navigator.onLine) {
      status.classList.remove('offline');
    } else {
      status.classList.add('offline');
    }
  };

  window.addEventListener('online', handleNetworkChange);
  window.addEventListener('offline', handleNetworkChange);
});

Вот и все решение. Проверка статуса подключения инициируется при первоначальной загрузке страницы, после чего скрипт отслеживает изменения, добавляя или удаляя для родительского div статус offline.


Спасибо за внимание.


Перевод статьи Chris Bongers “Detecting if the user is online with JavaScript”.

Новые публикации

Далее

Категории

О нас

Frontend & Backend. Статьи, обзоры, заметки, код, уроки.