Я пытаюсь точно определить, когда браузер переходит в автономный режим, используя онлайн-и офлайн-события HTML5.
Вот мой код:
<script>
// FIREFOX
$(window).bind("online", applicationBackOnline);
$(window).bind("offline", applicationOffline);
//IE
window.onload = function() {
document.body.ononline = IeConnectionEvent;
document.body.onoffline = IeConnectionEvent;
}
</script>
Он отлично работает, когда я просто нажимаю «Работать в автономном режиме» в Firefox или IE, но он работает случайным образом, когда я фактически отсоединяю провод.
Как лучше всего обнаружить это изменение? Я бы хотел избежать повторения вызовов ajax с таймаутами.
javascript
jquery
offline
jquery-events
network-connection
Пьер Дюплуи
источник
источник
Ответы:
Производители браузеров не могут договориться о том, как определять офлайн. Некоторые браузеры имеют функцию автономной работы, которую они считают отдельной от отсутствия доступа к сети, что опять же отличается от доступа к Интернету. Все это беспорядок. Некоторые поставщики браузеров обновляют флаг navigator.onLine при потере реального доступа к сети, другие - нет.
Из спецификации:
Наконец, в спецификации отмечается:
источник
Основные поставщики браузеров расходятся во мнениях о том, что означает «офлайн».
Chrome и Safari автоматически обнаруживают, когда вы переходите в автономный режим - это означает, что «онлайн» события и свойства будут запускаться автоматически, когда вы отсоединяете сетевой кабель.
Firefox (Mozilla), Opera и IE используют другой подход и считают вас «в сети», если вы явно не выберете «Автономный режим» в браузере, даже если у вас нет рабочего сетевого подключения.
Есть веские аргументы в пользу поведения Firefox / Mozilla, которые изложены в комментариях к этому отчету об ошибке:
https://bugzilla.mozilla.org/show_bug.cgi?id=654579
Но, чтобы ответить на вопрос - вы не можете полагаться на онлайн / офлайн события / свойство, чтобы определить, действительно ли есть сетевое подключение.
Вместо этого вы должны использовать альтернативные подходы.
Раздел «Примечания» этой статьи для разработчиков Mozilla содержит ссылки на два альтернативных метода:
https://developer.mozilla.org/en/Online_and_offline_events
«Если API не реализован в браузере, вы можете использовать другие сигналы, чтобы определить, находитесь ли вы в автономном режиме, включая прослушивание событий ошибок AppCache и ответов от XMLHttpRequest»
Это ссылка на пример подхода «прослушивание событий ошибок AppCache»:
http://www.html5rocks.com/en/mobile/workingoffthegrid/#toc-appcache
... и пример подхода "прослушивание ошибок XMLHttpRequest":
http://www.html5rocks.com/en/mobile/workingoffthegrid/#toc-xml-http-request
HTH, - Чад
источник
updates this property when the OS reports a change in network connectivity on Windows, Linux, and OS X.
(согласно упомянутым вами документам). Так что это не только в автономном режиме, если вы просматриваете в браузере в «автономном режиме»,Сегодня существует библиотека JavaScript с открытым исходным кодом, которая выполняет эту работу: она называется
Offline.js
.https://github.com/HubSpot/offline
Обязательно проверьте полную версию README . Он содержит события, к которым вы можете подключиться.
Вот тестовая страница . Между прочим, это красиво / имеет приятный интерфейс обратной связи! :)
источник
Лучший способ, который сейчас работает во всех основных браузерах, - это следующий скрипт:
Источник: http://robertnyman.com/html5/offline/online-offline-events.html
источник
С недавнего времени
navigator.onLine
отображается одинаково во всех основных браузерах, поэтому его можно использовать.Самые старые версии, которые правильно поддерживают это: Firefox 41 , IE 9, Chrome 14 и Safari 5.
В настоящее время это будет представлять почти весь спектр пользователей, но вы всегда должны проверять, какие возможности есть у пользователей вашей страницы.
До FF 41 он отображался только в том
false
случае, если пользователь вручную переводил браузер в автономный режим. В IE 8 свойство былоbody
вместоwindow
.источник: caniuse
источник
window.navigator.onLine
Атрибут и связанное с ним событие в настоящий момент ненадежные на некоторых веб - браузерах ( особенно Firefox рабочего стола ) , как сказал @Junto, так что я написал небольшую функцию ( с помощью JQuery), периодически проверять состояние сетевого подключения и поднять соответствующийoffline
иonline
событие:Вы можете использовать это так:
Чтобы прослушивать оффлайн и онлайн события (с помощью jQuery):
источник
navigator.onLine - это беспорядок
Я сталкиваюсь с этим, когда пытаюсь выполнить ajax-вызов на сервер.
Когда клиент не в сети, возможны несколько ситуаций:
Решение, которое я использую, - это сам контролировать статус с помощью javascript. Я устанавливаю условие успешного звонка, в противном случае предполагаю, что клиент отключен. Что-то вроде этого:
источник
В HTML5 вы можете использовать
navigator.onLine
свойство. Смотри сюда:http://www.w3.org/TR/offline-webapps/#related
Вероятно, ваше текущее поведение является случайным, поскольку javascript только готовит переменную «браузер», а затем знает, находитесь ли вы в автономном режиме или в сети, но на самом деле он не проверяет сетевое соединение.
Сообщите нам, если это то, что вы ищете.
С уважением,
источник
Найдите модуль require.js, который я написал для автономного режима.
Пожалуйста, прочтите это сообщение в блоге и поделитесь со мной своими мыслями. http://zen-and-art-of-programming.blogspot.com/2014/04/html-5-offline-application-development.html Он содержит образец кода с использованием offline.js для определения, когда клиент находится в автономном режиме.
источник
вы можете легко обнаружить автономный кросс-браузерный способ, как показано ниже
вы можете заменить yoururl.com на
document.location.pathname
.Суть решения в том, что попробуйте подключиться к своему доменному имени, если вы не можете подключиться - вы не в сети. работает кросс-браузер.
источник
Я использую опцию FALLBACK в манифесте кеша HTML5, чтобы проверить, находится ли мое приложение html5 в сети или офлайн:
На странице html я использую javascript для чтения содержимого онлайн / автономного txt файла:
В автономном режиме скрипт прочитает содержимое offline.txt. По тексту в файлах вы можете определить, находится ли веб-страница онлайн или офлайн.
источник
Вот мое решение.
Протестировано с IE, Opera, Chrome, FireFox, Safari, как Phonegap WebApp на IOS 8 и как Phonegap WebApp на Android 4.4.2
Это решение не работает с FireFox на локальном хосте.
================================================== ===============================
onlineCheck.js (путь к файлу: "root / js / onlineCheck.js"):
================================================== ===============================
index.html (путь к файлу: "root / index.html"):
================================================== ===============================
checkOnline.php (путь к файлу: "корень"):
источник
Что ж, вы можете попробовать плагин javascript, который может отслеживать соединение браузера в режиме реального времени и уведомлять пользователя, если Интернет или соединение браузера с Интернетом прервалось.
Плагин Wiremonkey Javascript и демо вы можете найти здесь
источник
Использование тела документа:
Использование события Javascript:
Ссылка :
Document-Body : онлайн- событие
Javascript-Event: онлайн и офлайн-события
Дополнительные мысли:
для доставки «сетевое соединение - это не то же самое, что и подключение к Интернету». Проблема из вышеперечисленных методов: вы можете один раз проверить подключение к Интернету с помощью ajax при запуске приложения и настроить режим онлайн / офлайн. Создайте кнопку повторного подключения, чтобы пользователь мог выйти в Интернет. И добавьте к каждому неудавшемуся запросу ajax функцию, которая возвращает пользователя в автономный режим.
источник
window.addEventListener('online', updateOnlineStatus(event) );
потому что вы немедленно вызываете функцию updateOnlineStatus (). Так и должно бытьwindow.addEventListener('online', updateOnlineStatus );