如何使用 HTML5/JavaScript 检查连接类型(WiFi/LAN/WWAN)?

IT技术 javascript html wwan
2021-02-11 20:34:59

如果客户端通过 WWAN(计量)连接或其他方式连接,我希望将特定网站定制为低带宽版本。

连接类型对于站点了解它是否应该提供丰富的体验或带宽高效的体验很重要。我的桌面在按流量计费的连接上运行,将来,更多的台式机将通过按流量计费的蜂窝网络(包括 Windows 8 平板电脑)连接,高效的网络应用程序应该尊重用户可能不需要按次付费的高细节资产。字节连接。

如何使用 HTML5/JavaScript 检查客户端是否通过 WiFi/LAN/WWAN 连接?

注意:我不希望明确检查浏览器标头(对于可以通过多种方法连接到互联网的桌面浏览器来说,这并不是真正的解决方案)。

4个回答

navigator.connection(前缀)。此 API 公开有关客户端带宽的信息。

这在 Chrome 76 上对我有用。但它在 iOS Safari 上不起作用的事实使它几乎没有用,如果你试图为你的客户节省一些移动数据的钱。再说一次,如果客户无论如何都在使用 iPhone,他们可能对省钱不感兴趣。
2021-03-21 20:34:59
@PaulD.Waite w3c.github.io/netinfo是规范的活动版本,并且仍在积极维护。至少在 Chrome 中,API 似乎仅限于移动平台您可以在状态仪表板(并非特定于 Chrome)中找到更多信息:chromestatus.com/features/6338383617982464
2021-03-23 20:34:59
不适用于最新的 chrome 和 firefox 浏览器(2013 年 10 月)
2021-03-24 20:34:59
@Raul:我认为它不再适用于任何浏览器。规范的工作被放弃 ( w3.org/TR/netinfo-api ),至少在我的 Mac 上的 Chrome 4 中,navigator.connection不存在。
2021-04-07 20:34:59
它确实说它是实验性的,在 IE 或 Safari 中不受支持:/
2021-04-12 20:34:59

你不能。有关客户端如何连接到服务器的信息(即,它使用哪些技术,是按字节付费还是按固定收费)是不公开的。如果这对您有帮助,您可能能够获得跟踪路由(包含与跟踪相关的所有问题),但该信息将无法通过 JavaScript 访问。

JS 可以做的是简单的带宽测试。通过 XHR 下载已知大小的文件,并测量所需的时间。

连接的付费模式是绝对私有数据。它既不会被发送到互联网上的服务器,也不会被加载的网站使用。如果您需要此信息来为客户提供自定义应用程序,直接询问用户如果他愿意,他会告诉你的。


然而,等等。可以设置最新的 Chrome 和 Firefox(用户偏好)以提供有关实验navigator.connection对象的数据

此外,对于开发 Metro 应用程序,Windows 提供了有关Windows.Networking.ConnectivityAPI 的此类信息,请参阅本教程

如果这是真的,我没有理由相信它不是 - 鉴于您的声誉,那么这不是规范中的漏洞吗?Linux/Windows/OSX/Android/Windows Phone 7+/iOS 都支持连接类型查询,这是有充分理由的;它可以省钱。如果这个答案是正确的,那么 HTML5 是唯一不支持连接类型查询的现代平台。
2021-03-16 20:34:59
HTML5 不是平台,浏览器向服务器发送什么信息与 HTML 无关。
2021-03-21 20:34:59
好吧,我问过谷歌更具体一点,结果发现实际上有这样的 API。
2021-03-21 20:34:59
+Bergi 跟进您的第二段:通过 JavaScript 进行带宽测试以确定连接类型并不能真正满足所需的意图。许多 WWAN 连接比宽带连接或较差的 WiFi 连接点更快。此外,测试带宽只会占用更多配额。如果没有人可以提供解决方案(我认为不会),我明天会将其标记为已接受的答案。
2021-03-27 20:34:59
2020 年:我想不再那么私密了 navigator.connection
2021-04-02 20:34:59

也许你以错误的方式接近它。看看 Gmail 模型。他们有一个富客户端,如果页面需要很长时间加载,用户可以选择退出。标准客户端要轻得多,并使用更“传统”的网页设计。
试图自动检测不该出现的东西会让你陷入一个非常深的兔子洞。

正如最初的问题中所述,不再可能从浏览器类型标头中假设特定的连接类型。我的手机有一半时间是使用不限流量的 wifi 连接的,但我的 Windows 7 机器总是通过 3G 连接。在不久的将来,Windows 8 和未来版本的 Chrome 将允许用户查询哪些 Web 应用程序占用了计量带宽。客户的工作不是不断考虑他们的连接类型。我认为代表用户/客户高效是应用程序的工作。
2021-03-19 20:34:59
恕我直言,我理解你的观点,但我不同意。移动平台检查连接类型并根据连接类型定制他们的体验。随着具有 3G 连接的 WWAN 加密狗和超极本的普及,应用程序将无法消耗带宽,就好像它是无限的一样。GMail 模型也有点坏,它首先尝试消耗带宽,然后如果速度慢,它会提供更优化的东西。我的 WWAN 连接是 21Mbits。不慢 - 如果我超过我的配额就会很贵。
2021-04-05 20:34:59
好,这很酷。因此,为了适应您可以允许用户选择较低的带宽并坚持下去,这样他们就不会产生额外的费用。另一种方法可能是基于浏览器类型、移动设备、平板电脑、桌面设备等做出一些假设。通常他们说它不测试用户代理,但在这种情况下你不会追求特定功能
2021-04-12 20:34:59

老问题,但在寻找我自己的目的时,我发现了这个 - 我还没有尝试过,因此 YMMV:https : //github.com/ashanbh/detectClientSpeed

测量下载资产的时间以获得带宽信息的基本概念是主观的,不一定一致,但缺乏适用于 iOS/Android 的原生平台 API,这不是一个坏选择。更轻松的替代方法可能是测量 google.com 之类的 ping 时间。

ashanbh 自己的例子对我不起作用(ashanbh.github.io/detectClientSpeed/example1.html)。你有好运吗?
2021-03-19 20:34:59
嘿,伙计,为什么你认为 ping 会给你任何关于网络类型的指示?如果您暗示蜂窝数据的响应时间比 WiFi 短,那绝对是错误的。
2021-04-05 20:34:59