Próbuję dokładnie wykryć, kiedy przeglądarka przechodzi w tryb offline, korzystając ze zdarzeń online i offline HTML5.
Oto mój kod:
<script>
// FIREFOX
$(window).bind("online", applicationBackOnline);
$(window).bind("offline", applicationOffline);
//IE
window.onload = function() {
document.body.ononline = IeConnectionEvent;
document.body.onoffline = IeConnectionEvent;
}
</script>
Działa dobrze, gdy po prostu kliknę „Pracuj offline” w przeglądarce Firefox lub IE, ale działa to trochę przypadkowo, gdy faktycznie odłączam przewód.
Jaki jest najlepszy sposób na wykrycie tej zmiany? Chciałbym uniknąć powtarzania wywołań ajax z limitami czasu.
javascript
jquery
offline
jquery-events
network-connection
Pierre Duplouy
źródło
źródło
Odpowiedzi:
Dostawcy przeglądarek nie mogą uzgodnić sposobu definiowania trybu offline. Niektóre przeglądarki mają funkcję Pracuj w trybie offline, którą uważają za odrębną od braku dostępu do sieci, co również różni się od dostępu do Internetu. Cała sprawa to bałagan. Niektórzy dostawcy przeglądarek aktualizują flagę navigator.onLine w przypadku utraty rzeczywistego dostępu do sieci, inni nie.
Ze specyfikacji:
Na koniec specyfikacja zauważa:
źródło
Główni dostawcy przeglądarek różnią się co do tego, co oznacza „offline”.
Chrome i Safari automatycznie wykryją przejście do trybu „offline”, co oznacza, że zdarzenia i właściwości „online” będą uruchamiane automatycznie po odłączeniu kabla sieciowego.
Firefox (Mozilla), Opera i IE mają inne podejście i traktują Cię jako „online”, chyba że wyraźnie wybierzesz „Tryb offline” w przeglądarce - nawet jeśli nie masz działającego połączenia sieciowego.
Istnieją ważne argumenty przemawiające za zachowaniem Firefoksa / Mozilli, które zostały przedstawione w komentarzach do tego zgłoszenia błędu:
https://bugzilla.mozilla.org/show_bug.cgi?id=654579
Ale odpowiadając na pytanie - nie można polegać na zdarzeniach / właściwościach online / offline, aby wykryć, czy rzeczywiście istnieje łączność sieciowa.
Zamiast tego musisz użyć alternatywnych podejść.
Sekcja „Uwagi” tego artykułu Mozilla Developer zawiera łącza do dwóch alternatywnych metod:
https://developer.mozilla.org/en/Online_and_offline_events
„Jeśli interfejs API nie jest zaimplementowany w przeglądarce, możesz użyć innych sygnałów, aby wykryć, czy jesteś w trybie offline, w tym nasłuchiwanie zdarzeń błędów AppCache i odpowiedzi z XMLHttpRequest”
To łącze do przykładu podejścia „nasłuchiwanie zdarzeń błędów AppCache”:
http://www.html5rocks.com/en/mobile/workingoffthegrid/#toc-appcache
... i przykład podejścia „nasłuchiwania błędów XMLHttpRequest”:
http://www.html5rocks.com/en/mobile/workingoffthegrid/#toc-xml-http-request
HTH, - Czad
źródło
updates this property when the OS reports a change in network connectivity on Windows, Linux, and OS X.
(zgodnie z wymienionymi dokumentami). Więc to nie tylko offline, jeśli przeglądasz w "trybie offline" przeglądarkiObecnie istnieje biblioteka JavaScript typu open source, która wykonuje tę pracę: nazywa się
Offline.js
.https://github.com/HubSpot/offline
Koniecznie sprawdź pełne README . Zawiera zdarzenia, do których możesz się podłączyć.
Oto strona testowa . Nawiasem mówiąc, jest piękny / ma ładny interfejs zwrotny! :)
źródło
Najlepszym sposobem, który działa teraz we wszystkich głównych przeglądarkach, jest następujący skrypt:
Źródło: http://robertnyman.com/html5/offline/online-offline-events.html
źródło
Od niedawna
navigator.onLine
pokazuje to samo we wszystkich głównych przeglądarkach, a zatem jest użyteczne.Najstarsze wersje obsługujące to we właściwy sposób to: Firefox 41 , IE 9, Chrome 14 i Safari 5.
Obecnie będzie to reprezentowało prawie całe spektrum użytkowników, ale zawsze powinieneś sprawdzić jakie możliwości mają użytkownicy Twojej strony.
Przed FF 41 pokazywał się tylko
false
wtedy, gdy użytkownik ręcznie przestawił przeglądarkę w tryb offline. W IE 8 właściwość znajdowała się nabody
, zamiastwindow
.źródło: caniuse
źródło
window.navigator.onLine
Atrybut i związane z nim wydarzenia są obecnie niepewne na niektórych przeglądarek internetowych ( zwłaszcza stacjonarnych Firefox ) jako @Junto wymienione, więc napisałem trochę funkcji (przy użyciu jQuery), które okresowo sprawdzać stan połączeń sieciowych i podnieść odpowiednioffline
ionline
wydarzenia:Możesz go używać w ten sposób:
Aby słuchać wydarzeń offline i online (z pomocą jQuery):
źródło
navigator.onLine to bałagan
Stoję przed tym, gdy próbuję wykonać połączenie AJAX do serwera.
Istnieje kilka możliwych sytuacji, gdy klient jest offline:
Rozwiązaniem, którego używam, jest samodzielne kontrolowanie statusu za pomocą javascript. Ustawiam warunek udanego połączenia, w każdym innym przypadku zakładam, że klient jest offline. Coś takiego:
źródło
W HTML5 możesz użyć
navigator.onLine
właściwości. Popatrz tutaj:http://www.w3.org/TR/offline-webapps/#related
Prawdopodobnie twoje obecne zachowanie jest losowe, ponieważ javascript przygotowuje tylko zmienną "browser", a następnie wie, czy jesteś offline i online, ale tak naprawdę nie sprawdza połączenia sieciowego.
Daj nam znać, jeśli tego szukasz.
Z poważaniem,
źródło
Proszę znaleźć moduł require.js, który napisałem dla trybu offline.
Przeczytaj ten wpis na blogu i daj mi znać, co myślisz. http://zen-and-art-of-programming.blogspot.com/2014/04/html-5-offline-application-development.html Zawiera przykładowy kod wykorzystujący offline.js do wykrywania, kiedy klient jest w trybie offline.
źródło
możesz łatwo wykryć offline między przeglądarkami, jak poniżej
możesz zamienić yoururl.com na
document.location.pathname
.Sedno rozwiązania polega na tym, że spróbuj połączyć się z nazwą domeny, jeśli nie możesz się połączyć - jesteś offline. działa w różnych przeglądarkach.
źródło
Korzystam z opcji FALLBACK w manifeście pamięci podręcznej HTML5, aby sprawdzić, czy moja aplikacja html5 jest online, czy offline:
Na stronie html używam javascript do czytania zawartości pliku txt online / offline:
W trybie offline skrypt odczyta zawartość offline.txt. Na podstawie tekstu w plikach możesz wykryć, czy strona internetowa jest w trybie online lub offline.
źródło
Oto moje rozwiązanie.
Przetestowano w IE, Opera, Chrome, FireFox, Safari, jako Phonegap WebApp na IOS 8 i jako Phonegap WebApp na Android 4.4.2
To rozwiązanie nie działa z programem FireFox na hoście lokalnym.
==================================================== ===============================
onlineCheck.js (ścieżka pliku: „root / js / onlineCheck.js):
==================================================== ===============================
index.html (ścieżka pliku: "root / index.html"):
==================================================== ===============================
checkOnline.php (ścieżka_pliku: "root"):
źródło
Cóż, możesz wypróbować wtyczkę javascript, która może monitorować połączenie przeglądarki w czasie rzeczywistym i powiadamiać użytkownika, jeśli połączenie internetowe lub przeglądarki z Internetem uległo awarii.
Wtyczka Wiremonkey Javascript i demo można znaleźć tutaj
źródło
Korzystanie z treści dokumentu:
Korzystanie ze zdarzenia JavaScript:
Odniesienie : Treść
dokumentu: Zdarzenie on
- line Zdarzenie JavaScript: Zdarzenie online i offline
Dodatkowe przemyślenia:
Wysyłanie wiadomości „połączenie sieciowe to nie to samo, co połączenie internetowe”. Problem z powyższych metod: Możesz sprawdzić połączenie internetowe raz za pomocą Ajax podczas uruchamiania aplikacji i skonfigurować tryb online / offline. Utwórz przycisk ponownego łączenia, aby użytkownik mógł przejść do trybu online. I dodaj do każdego nieudanego żądania Ajax funkcję, która przeniesie użytkownika z powrotem do trybu offline.
źródło
window.addEventListener('online', updateOnlineStatus(event) );
ponieważ natychmiast wywołujesz funkcję updateOnlineStatus (). Powinno byćwindow.addEventListener('online', updateOnlineStatus );