Estoy tratando de detectar con precisión cuándo el navegador se desconecta, utilizando los eventos en línea y fuera de línea de HTML5.
Aquí está mi código:
<script>
// FIREFOX
$(window).bind("online", applicationBackOnline);
$(window).bind("offline", applicationOffline);
//IE
window.onload = function() {
document.body.ononline = IeConnectionEvent;
document.body.onoffline = IeConnectionEvent;
}
</script>
Funciona bien cuando presiono "Trabajar sin conexión" en Firefox o IE, pero funciona de forma aleatoria cuando desconecto el cable.
¿Cuál es la mejor forma de detectar este cambio? Me gustaría evitar repetir llamadas ajax con tiempos de espera.
javascript
jquery
offline
jquery-events
network-connection
Pierre Duplouy
fuente
fuente
Respuestas:
Los proveedores de navegadores no pueden ponerse de acuerdo sobre cómo definir sin conexión. Algunos navegadores tienen una función de trabajo sin conexión, que consideran separada de la falta de acceso a la red, que nuevamente es diferente al acceso a Internet. Todo es un desastre. Algunos proveedores de navegadores actualizan el indicador navigator.onLine cuando se pierde el acceso real a la red, otros no.
De la especificación:
Finalmente, las notas de la especificación:
fuente
Los principales proveedores de navegadores difieren en lo que significa "sin conexión".
Chrome y Safari detectarán cuando te desconectes automáticamente, lo que significa que los eventos y propiedades "online" se activarán automáticamente cuando desconectes el cable de red.
Firefox (Mozilla), Opera e IE adoptan un enfoque diferente y lo consideran "en línea" a menos que elija explícitamente "Modo sin conexión" en el navegador, incluso si no tiene una conexión de red que funcione.
Hay argumentos válidos para el comportamiento de Firefox / Mozilla, que se describen en los comentarios de este informe de error:
https://bugzilla.mozilla.org/show_bug.cgi?id=654579
Pero, para responder a la pregunta, no puede confiar en los eventos / propiedades en línea / fuera de línea para detectar si realmente hay conectividad de red.
En su lugar, debe utilizar enfoques alternativos.
La sección "Notas" de este artículo para desarrolladores de Mozilla proporciona enlaces a dos métodos alternativos:
https://developer.mozilla.org/en/Online_and_offline_events
"Si la API no está implementada en el navegador, puede utilizar otras señales para detectar si está desconectado, incluida la escucha de los eventos de error de AppCache y las respuestas de XMLHttpRequest"
Esto enlaza con un ejemplo del enfoque "escuchar eventos de error de AppCache":
http://www.html5rocks.com/en/mobile/workingoffthegrid/#toc-appcache
... y un ejemplo del enfoque de "escucha de fallas XMLHttpRequest":
http://www.html5rocks.com/en/mobile/workingoffthegrid/#toc-xml-http-request
HTH, - Chad
fuente
updates this property when the OS reports a change in network connectivity on Windows, Linux, and OS X.
(de acuerdo con los documentos que ha mencionado). Por lo tanto, no solo está fuera de línea si está navegando con el navegador "Modo sin conexión"Hoy en día existe una biblioteca JavaScript de código abierto que hace este trabajo: se llama
Offline.js
.https://github.com/HubSpot/offline
Asegúrese de consultar el archivo README completo . Contiene eventos a los que puede conectarse.
Aquí tienes una página de prueba . ¡Es hermoso / tiene una interfaz de usuario de comentarios agradable por cierto! :)
fuente
La mejor forma que funciona ahora en todos los navegadores principales es el siguiente script:
Fuente: http://robertnyman.com/html5/offline/online-offline-events.html
fuente
Desde hace poco,
navigator.onLine
muestra lo mismo en todos los navegadores principales y, por lo tanto, es utilizable.Las versiones más antiguas que lo soportan correctamente son: Firefox 41 , IE 9, Chrome 14 y Safari 5.
Actualmente esto representará casi todo el espectro de usuarios, pero siempre debes comprobar qué capacidades tienen los usuarios de tu página.
Antes de FF 41, solo se mostraba
false
si el usuario colocaba el navegador manualmente en modo fuera de línea. En IE 8, la propiedad estaba enbody
, en lugar dewindow
.fuente: caniuse
fuente
El
window.navigator.onLine
atributo y sus eventos asociados son actualmente poco fiable en algunos navegadores web ( especialmente de escritorio de Firefox ) cuando dicha @Junto, así que escribí un poco de función (usando jQuery) que comprobar periódicamente el estado de conectividad de la red y elevar la adecuadaoffline
yonline
eventos:Puedes usarlo así:
Para escuchar los eventos en línea y fuera de línea (con la ayuda de jQuery):
fuente
navigator.onLine es un desastre
Me enfrento a esto cuando trato de hacer una llamada ajax al servidor.
Hay varias situaciones posibles cuando el cliente está desconectado:
La solución que estoy usando es controlar el estado yo mismo con javascript. Establezco la condición de una llamada exitosa; en cualquier otro caso, asumo que el cliente está desconectado. Algo como esto:
fuente
En HTML5 puede utilizar la
navigator.onLine
propiedad. Mira aquí:http://www.w3.org/TR/offline-webapps/#related
Probablemente su comportamiento actual sea aleatorio ya que el javascript solo prepara la variable "navegador" y luego sabe si está desconectado y conectado, pero en realidad no comprueba la conexión de red.
Háganos saber si esto es lo que está buscando.
Saludos cordiales,
fuente
Busque el módulo require.js que escribí para Offline.
Por favor, lea esta publicación de blog y déjeme saber lo que piensa. http://zen-and-art-of-programming.blogspot.com/2014/04/html-5-offline-application-development.html Contiene una muestra de código que utiliza offline.js para detectar cuando el cliente está desconectado.
fuente
puede detectar fácilmente en varios navegadores sin conexión, como a continuación
puede reemplazar yoururl.com por
document.location.pathname
.El quid de la solución es intentar conectarse a su nombre de dominio, si no puede conectarse, está desconectado. funciona en varios navegadores.
fuente
Utilizo la opción FALLBACK en el manifiesto de caché HTML5 para verificar si mi aplicación html5 está en línea o fuera de línea mediante:
En la página html utilizo javascript para leer el contenido del archivo txt online / offline:
Cuando esté fuera de línea, el script leerá el contenido del offline.txt. Según el texto de los archivos, puede detectar si la página web está en línea o fuera de línea.
fuente
Aquí está mi solución.
Probado con IE, Opera, Chrome, FireFox, Safari, como Phonegap WebApp en IOS 8 y como Phonegap WebApp en Android 4.4.2
Esta solución no funciona con FireFox en localhost.
================================================ ===============================
onlineCheck.js (ruta de archivo: "root / js / onlineCheck.js):
================================================ ===============================
index.html (ruta de archivo: "root / index.html"):
================================================ ===============================
checkOnline.php (ruta de archivo: "raíz"):
fuente
Bueno, puede probar el complemento javascript que puede monitorear la conexión del navegador en tiempo real y notifica al usuario si Internet o la conexión del navegador con Internet se cortó.
El complemento Wiremonkey Javascript y la demostración se pueden encontrar aquí
fuente
Usando el cuerpo del documento:
Usando el evento Javascript:
Referencia :
Cuerpo del documento: Evento en línea Evento
Javascript: Eventos en línea y fuera de línea
Pensamientos adicionales:
Para enviar la "conexión de red no es lo mismo que la conexión a Internet" Problema de los métodos anteriores: Puede verificar la conexión a Internet una vez con ajax en el inicio de la aplicación y configurar un modo en línea / fuera de línea. Cree un botón de reconexión para que el usuario se conecte. Y agregue en cada solicitud ajax fallida una función que devuelva al usuario al modo fuera de línea.
fuente
window.addEventListener('online', updateOnlineStatus(event) );
porque está llamando a la función updateOnlineStatus () inmediatamente. Debería serwindow.addEventListener('online', updateOnlineStatus );