Определение онлайн-статуса браузера в JavaScript - PullRequest
1 голос
/ 26 января 2020

Я протестировал следующий код на мобильных устройствах и Linux, и он сообщил, что онлайн-статус корректно меняется.

<script>
    function updateOnlineStatus(event) {      
      onlineStatusIndicator.innerHTML = navigator.onLine ? 'online' : 'offline';
    }
    window.addEventListener('online', updateOnlineStatus);
    window.addEventListener('offline', updateOnlineStatus);
    document.addEventListener('DOMContentLoaded', () => {      
      var onlineStatusIndicator = document.querySelector(
        '#onlineStatusIndicator'
      );
      updateOnlineStatus();
    });
</script>

, когда я использую его на Windows 10 со следующими адаптерами, поворачивая Wi-Fi Адаптер выключен в одиночку, не сообщил о статусе офлайн Мне также пришлось отключить vEthe rnet (переключатель по умолчанию) и vEthe rnet (Docker / NAT), чтобы получить ожидаемое поведение.

enter image description here

Таким образом, если Hyper-V включен, мы не можем полагаться на изменения соединения Wi-Fi для обнаружения состояния онлайн / офлайн, если мы не выполним То же соединение меняется и на адаптерах vEthe rnet. Это правильно?

1 Ответ

0 голосов
/ 28 января 2020

Свойство Navigator.onLine отправляет обновления всякий раз, когда изменяется способность браузера подключаться к сети. Обновление происходит, когда пользователь переходит по ссылкам или когда скрипт запрашивает удаленную страницу. Например, свойство должно возвращать значение false, если пользователи нажимают на ссылки вскоре после того, как теряют соединение inte rnet.

Браузеры реализуют это свойство по-разному.

В Chrome и Safari, если браузер не может подключиться к локальной сети (LAN) или маршрутизатору, он отключен; все остальные условия возвращают истину. Таким образом, хотя вы можете предполагать, что браузер находится в автономном режиме, когда он возвращает ложное значение, вы не можете предполагать, что истинное значение обязательно означает, что браузер может получить доступ к inte rnet. Вы можете получить ложные срабатывания, например, в тех случаях, когда на компьютере запущено программное обеспечение для виртуализации с виртуальными адаптерами rnet, которые всегда «подключены». Поэтому, если вы действительно хотите определить онлайн-статус браузера, вам следует разработать дополнительные средства для проверки.

В Firefox и Inte rnet Explorer, переключение браузера в автономный режим отправляет ложное значение. До Firefox 41 все остальные условия возвращают истинное значение; проверка фактического поведения на Nightly 68 на Windows показывает, что он ищет только подключение к локальной сети, например Chrome и Safari, выдающие ложные срабатывания.

Ссылка:

Navigator.onLine

...