¿Cómo detectas la connection 3G vs. Wifi en Safari mobile?

Estoy preguntando específicamente sobre javascript en una página web mobile, no una aplicación objective-c. ¿Hay algo así como Apple Reachability para javascript para saber cuándo se realiza o cambia la connection Edge, 3G o Wifi?

No, a less que los browseres comiencen a dar esta información a través del DOM, lo que, en la actualidad, no es así. Hay un navigator javascript objects que contiene muchas cosas pero no lo que estás buscando. También he leído en las noticias recientemente que un operador celular estaba agregando cookies a las requestes HTTP realizadas en sus teléfonos. Se descubrió que estaban agregando ID de clientes a las cookies (¡gran violación de security!).

Mobile Safari agrega algunas nuevas adiciones DOM pero no lo que estás pidiendo.

Al margen de estas opciones, no puedes hacerlo. Las capas del Protocolo de Internet están destinadas a encapsular y ocultar los detalles de las capas inferiores. No puede detectar Edge, 3G o Wifi más de lo que puede detectar cable, DSL o óptica más fina.

Finalmente, incluso si pudiera get esta información, no le serviría de nada a less que tuviera detalles de cada nodo en su connection TCP. Por ejemplo, podría tener la siguiente configuration:

  iPad --- WiFi ----> Punto de acceso del iPhone --- 3G ---> Operador --- desconocido --- >>> 

Apéndice

En 2012-2013, el W3C estaba desarrollando la API de información de networking, cuyo objective era proporcionar "una interfaz para que las aplicaciones web accedan a la información de connection subyacente del dispositivo" . En ese momento , la API estipulaba que se podía get un ancho de banda "estimado" para el browser a través de navigator.connection.bandwidth . ¡A partir de abril de 2014, ese trabajo ha sido descontinuado desde entonces!

Actualización: a partir del 20 de octubre de 2015, el trabajo continúa en esta API. Puede encontrar los últimos borradores del Editor para la API de información de networking en las páginas de github del W3C.

Aunque no puede usar datos de un browser para detectar si el usuario está en Wi-Fi o una connection celular, capturar la IP del usuario puede ser una forma de diferenciar entre una connection Wifi y Celular.

En este artículo sobre cómo los celulares afectan su dirección IP ( http://classroom.synonym.com/wifi-change-ip-17586.html ) declara lo siguiente:

Mientras esté en Wi-Fi, la IP pública de su dispositivo coincidirá con todas las demás computadoras de su networking y su enrutador asignará una IP local. Mientras usa una connection celular, su operador celular asigna una IP pública. La connection a Internet celular no utiliza un enrutador, por lo que su dispositivo no tendrá una IP local.

IF ip = localIp, luego connection = wifiConnection

IF ip = publicIp, luego connection = cellularConnection

Aquí hay una captura de pantalla de mi IP cuando estoy en celular:

introduzca la descripción de la imagen aquí

Aquí hay una captura de pantalla de mi IP (justo después de apagar el celular) en Wifi:

introduzca la descripción de la imagen aquí

Esta podría ser una respuesta al problema sin ayuda del browser.