我特别询问移动网页上的javascript,而不是Objective-c应用程序。有没有类似于Apple Reachability的javascript,所以我可以告诉Edge,3G或Wifi连接何时建立或更改?
答案 0 :(得分:17)
除非浏览器开始通过DOM提供此信息,目前他们没有。有一个navigator
个javascript对象可以包含许多内容,但不包含您要查找的内容。我最近还在新闻中看到,一些移动运营商正在为手机上的HTTP请求添加cookie。他们被发现将客户ID添加到cookie中(巨大的安全漏洞!!)。
Mobile Safari会添加一些新的DOM additions,但不会添加您要求的内容。
缺少这些选项,你不能。互联网协议的各层旨在封装和隐藏底层的细节。您无法检测到Edge,3G或Wifi,也无法检测到有线,DSL或更精细的光学器件。
最后,即使您获取此信息,除非您在TCP连接中有每个节点的详细信息,否则它对您没有任何帮助。例如,我可以进行以下设置:
iPad ---WiFi----> iPhone's Hotspot ---3G---> Carrier ---unknown--->>>
在2012 - 2013年,W3C充实了The Network Information API,其目的是提供“Web应用程序的界面以访问设备的基础连接信息” 。 At the time,API规定浏览器的“估计”带宽可通过navigator.connection.bandwidth
获得。 截至2014年4月,该工作已停止!!
更新:截至2015年10月20日,此API仍在继续。您可以在W3C的github页面上找到最新的Editor's drafts for the Network Information API。
答案 1 :(得分:3)
虽然您无法使用浏览器中的数据来检测用户是在Wifi还是蜂窝连接上 - 捕获用户的IP可能是区分Wifi和蜂窝连接的一种方法。
在这篇关于细胞如何影响您的IP地址(http://classroom.synonym.com/wifi-change-ip-17586.html)的文章中,它指出了以下内容:
在Wi-Fi上,您设备的公共IP将与网络上的所有其他计算机匹配,并且您的路由器会分配本地IP。使用蜂窝连接时,您的手机运营商会分配公共IP。连接到蜂窝互联网不使用路由器,因此您的设备不会拥有本地IP。
如果ip = localIp,则connect = wifiConnection
如果ip = publicIp,则connect = cellularConnection
这是我在移动电话时的IP屏幕截图:
这是Wifi上我的IP(关闭手机后)的屏幕截图:
如果没有浏览器的帮助,这可能是问题的一个答案。
答案 2 :(得分:0)
目前,此限制已得到改善,但是在不同的浏览器(是否使用移动设备)https://caniuse.com/#search=network
中,Network Information API仍然存在一些限制。如果这对您有所帮助,那么在我们的案例中,由于我们特定的移动应用程序是混合的,并且是使用Ionic开发的,因此我们已经能够使用此Cordova插件在https://github.com/apache/cordova-plugin-network-information上的iOs或Android上完成此工作: