Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法确定Javascript客户端是否在移动网络上使用手机而不是wifi?_Javascript_Mobile - Fatal编程技术网

有没有办法确定Javascript客户端是否在移动网络上使用手机而不是wifi?

有没有办法确定Javascript客户端是否在移动网络上使用手机而不是wifi?,javascript,mobile,Javascript,Mobile,我正试图让一个网站尽可能对手机用户做出响应,这意味着要删除几个需要带宽的功能。特别是,如果用户在wifi上,而不是在3g/4g上,我想加载一个外部字体 一个很好的代表就是“手机或平板电脑”,平板电脑通常是“良好连接”的截止点。这是可行的,但是有3g/4g平板电脑,还有wifi上的手机,所以它并不完美 我不认为这有可能得到任何更好的,但也许stackoverflow的集体智慧已经发现了一种方法。这是可检测的吗?JavaScript不提供任何网络级连接类型的挂钩。您所能做的最好的事情就是对已知测试文

我正试图让一个网站尽可能对手机用户做出响应,这意味着要删除几个需要带宽的功能。特别是,如果用户在wifi上,而不是在3g/4g上,我想加载一个外部字体

一个很好的代表就是“手机或平板电脑”,平板电脑通常是“良好连接”的截止点。这是可行的,但是有3g/4g平板电脑,还有wifi上的手机,所以它并不完美


我不认为这有可能得到任何更好的,但也许stackoverflow的集体智慧已经发现了一种方法。这是可检测的吗?

JavaScript不提供任何网络级连接类型的挂钩。您所能做的最好的事情就是对已知测试文件的下载进行计时,并根据该时间做出决定


如果失败,只需询问用户是否喜欢高/低带宽设置。

我所知道的唯一方法是在请求时(在web服务器上)反向查找请求的IP地址,看看它是否来自无线运营商。这有两个问题:;我不知道移动设备是否使用与有线网络不同的网络(无线版与Fios版),另一个问题是那些可能实际使用有线的公司的员工将显示为无线。

您可以尝试中建议的解决方案,即使用
navigator.connection.type
。然而,这绝对是非标准的,而且似乎仅限于Android设备。另外,请参阅,其中提到了同一
导航器.connection
对象上的
metered
属性-这可能也很有用


为了获得最佳覆盖率:
var connection=navigator.connection | | | navigator.mozConnection | | navigator.webkitConnection

与其关注移动设备,不如做一个带宽测试。唯一能真正确定的方法是测量将文件下载到设备上的时间


在此处尝试接受答案:

您可以尝试对非常常见的本地地址(只能通过Wifi访问)进行网络探测,例如
192.168.1.100
和朋友。以下是方法:

  • 使用
    onError
    处理程序创建
    img
    元素
  • src
    属性设置为要“ping”的地址
  • 如果您得到一个错误,那么您知道地址不存在
  • 没有错误意味着地址存在

我最初是在(一本好书)中读到这项技术的。

@Colin:不是真的。这些问题是针对本机代码的。这个问题与执行JavaScript的网页有关。似乎本地应用程序可能是简化这个问题的一个同样有效的方法……我想提出这个建议,但后来我想到了LTE。。仅仅因为你有一个极快的互联网连接并不意味着你有很多空闲的带宽。