如何在移动版Safari中检测3G和Wifi连接?

19
我特别询问的是关于移动网页上的JavaScript,而不是Objective-C应用程序。是否有像苹果可达性一样的JavaScript功能,以便我可以告诉何时进行或更改了Edge、3G或Wifi连接?
3个回答

19
除非浏览器通过DOM提供此信息,但目前它们没有。有一个JavaScript对象navigator保存了许多信息,但不包括您要查找的内容。最近我也在新闻中读到某些移动运营商正在HTTP请求中添加cookies。他们被发现将客户ID添加到cookie中(巨大的安全漏洞!)。
Mobile Safari确实添加了一些新的DOM additions,但不是您要求的内容。
除了这些选项,您无法获取此信息。互联网协议的层级结构旨在封装和隐藏底层细节。您不能检测到Edge、3G或Wifi,就像您无法检测到电缆、DSL或更高级别的光学设备一样。
最后,即使您能获取此信息,除非您有TCP连接中每个节点的详细信息,否则这对您毫无用处。例如,我可以拥有以下设置:
iPad  ---WiFi---->  iPhone的热点  ---3G---> 运营商 ---未知--->>>

附录

在2012-2013年间,W3C正在完善 The Network Information API,旨在提供一个接口,使得网页应用可以访问设备的底层连接信息。当时,该API规定可以通过navigator.connection.bandwidth获取浏览器的"估计"带宽。截至2014年4月,该工作已经停止!

更新1:截至2015年10月20日,该API的开发仍在继续。您可以在W3C的github页面上找到最新的Network Information API编辑草案

更新2: 2020年6月,由于隐私问题,苹果拒绝在Safari中实现网络信息API


这绝对是有用的,特别是用于下载资源。如果我知道他们在wifi连接上,我很乐意将我的产品截图发送到移动设备上。 - Jason
@Jason,了解下载速度以便发送正确大小的资源是很有用的!但是,终端上的“Wi-Fi连接”并不意味着您的连接中没有较慢的节点。例如,我的iPad连接到一个WiFi网络,我的手机热点...但我的手机只有3G连接到互联网。而这只是两个跳跃。您的服务器和用户代理之间有多少跳跃?! - user1040049
这很公平,我想。带宽速率是理想的,但在没有这种情况下,连接类型将使我比现有的更好地猜测。 "4G"始终比"3G"快,而大多数时候"WiFi"比这两者都要快。它不总是正确的,但话说回来,GPS也不总是正确的,我们仍然依赖它,对吧?;) - Jason
@Jason,我想一个人可以通过异步JavaScript调用下载已知大小的资源并测量传输所需的时间来获取当前连接的实际指标。这将获得当前连接的实际指标。我不太喜欢假设某个特定连接保证了某个带宽速度...但我理解背后的原因。 :) - user1040049
我理解人们对隐私问题的担忧。但在我的情况下,我只想知道用户是否使用蜂窝数据,这并不是因为速度,而是因为在美国至少,蜂窝数据通常按使用量收费,而WiFi通常是固定费用。我只是想帮助用户省钱! - V. Rubinetti

3
尽管您无法使用浏览器数据来检测用户是在Wifi上还是蜂窝网络连接上 - 捕获用户的IP可能是区分Wifi和蜂窝连接之间的一种方式。
在这篇关于蜂窝如何影响IP地址的文章中 (http://classroom.synonym.com/wifi-change-ip-17586.html),它指出了以下内容:
当您在Wi-Fi上时,您设备的公共IP将与您网络上的所有其他计算机相匹配,并且您的路由器分配一个本地IP。而在使用蜂窝连接时,您的手机运营商会分配一个公共IP。连接到蜂窝互联网不使用路由器,因此您的设备将没有本地IP。
如果IP = 本地IP,则连接= wifi连接
如果IP = 公共IP,则连接= 蜂窝连接
这是我在使用蜂窝连接时的IP截图: enter image description here 这是我关闭蜂窝并连接Wifi后的IP截图: enter image description here 这可能是解决问题的一个办法,而无需浏览器帮助。

1
对你来说,我刚刚学到了一些非常有价值的信息。 - user5317457
6
我想这是因为你从电话提供商那里得到了一个IPv6地址。IPv6不使用路由器。当我使用4G时,我得到一个IPv4地址,没有区别可见。 - Jos

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接