你如何检测移动Safari上的3G与WiFi连接?

我特别要求在移动网页上使用JavaScript,而不是使用Objective-C应用程序。 有没有像JavaScript的苹果可达性,所以我可以告诉什么时候边缘,3G或无线连接是做出或更改?

除非浏览器开始通过DOM来传递这些信息,而目前他们没有。 有一个navigator JavaScript对象,它拥有许多东西,但不是你要找的东西。 最近我也读到了一些消息:一些蜂窝运营商在他们的手机上发送HTTP请求。 他们被发现将客户ID添加到cookie(巨大的安全漏洞!!)。

移动Safari添加了一些新的DOM添加,但不是你要求的。

没有这些选项,你不能。 互联网协议层意味着封装和隐藏底层的细节。 无法检测到Edge,3G或Wifi,无法检测到有线,DSL或更精细的光纤。

最后, 即使你能得到这些信息,除非你有关于TCP连接中每一个节点的细节,否则这些信息不会有任何好处。 例如,我可以有以下设置:

  iPad --- WiFi ----> iPhone's Hotspot --- 3G ---> Carrier --- unknown --- >>> 

附录

在2012 – 2013年, W3C充实了networking信息API ,旨在提供“一个Web应用程序接口访问设备的底层连接信息” 。 当时 ,API规定浏览器的“估计”带宽可以通过navigator.connection.bandwidth获得。 截至2014年4月,这项工作已经停止!

更新:截至2015年10月20日,这个API继续工作。 您可以在W3C的github页面上findNetwork Information API的最新编辑草案 。

虽然您不能使用浏览器的数据来检测用户是否在Wifi或蜂窝连接上,但捕获用户的IP可能是区分Wifi和蜂窝连接的一种方法。

在本文中,有关蜂窝networking如何影响您的IP地址( http://classroom.synonym.com/wifi-change-ip-17586.html ),它指出了以下内容:

在使用Wi-Fi时,设备的公用IP将与networking上的所有其他计算机相匹配,并且您的路由器将分配本地IP。 在使用蜂窝连接时,您的手机运营商会分配一个公共IP。 连接到蜂窝互联网不使用路由器,所以您的设备将不会有本地IP。

如果ip = localIp,那么connection = wifiConnection

IF ip = publicIp,那么connection = cellularConnection

下面是我在手机上的IP的屏幕截图:

在这里输入图像说明

以下是我的IP(closures手机后)的屏幕截图:

在这里输入图像说明

这可能是没有浏览器帮助的问题的一个答案。