Раз и навсегда, что делает navigator.onLine?

Я видел тысячу сообщений, где кто-то спрашивает, как обнаружить интернет-соединение в javascript, и всегда есть один человек, который говорит, что использует navigator.onLine, а другой, который говорит, что он ненадежный и только говорит вам, доступно ли соединение, а не если вы подключены.

В нижней строке, будет ли navigator.onLine сказать, не может ли пользователь связаться с сервером из-за плохого покрытия, даже если 3G/4G и WiFi включены, а они не в режиме полета или что-то еще? Только ваша средняя мертвая зона.

Ответ 1

Из статьи MDN о navigator.onLine:

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

В Chrome и Safari, если браузер не может подключиться к локальной сети (LAN) или маршрутизатору, он отключен; все остальные условия верны. Поэтому, когда вы можете предположить, что браузер отключен, когда он возвращает ложное значение, вы не можете предположить, что истинное значение обязательно означает, что браузер может получить доступ к Интернету. Вы можете получать ложные срабатывания, например, в тех случаях, когда на компьютере работает программное обеспечение для виртуализации с виртуальными адаптерами Ethernet, которые всегда "подключены". Поэтому, если вы действительно хотите определить онлайн-статус браузера, вы должны разработать дополнительные средства для проверки. Чтобы узнать больше, см. Статью "HTML5 Rocks", Работа с сеткой.

В Firefox и Internet Explorer переключение браузера в автономный режим отправляет ложное значение. Все остальные условия возвращают истинное значение

Ответ 2

В соответствии с MDN, это зависит от браузера для реализации.

https://developer.mozilla.org/en-US/docs/DOM/window.navigator.onLine

Я бы предположил, что с браузерами WebKit это не является надежным способом узнать, что браузер имеет доступ к Интернету, а только некоторую форму доступа к сети.