在我的手机上检测互联网连接类型

时间:2012-12-24 12:47:20

标签: javascript jquery mobile

我需要在他们的手机上向我的客户发送视频,但每个客户端以不同的方式连接到互联网,连接速度慢,而且速度快,我有两个版本的视频,所以我可以发送小的一个慢速连接和大到快。

setInterval(function(){
    if(navigator.onLine){
        $("body").html("Connected.");
    }else{
        $("body").html("Not connected.");
    }
},1000);

以上代码如果已连接则返回。

现在的问题是:

有没有办法在我的手机上检测互联网连接类型?如3G,WIFI ......等。

4 个答案:

答案 0 :(得分:4)

如果平台公开了某些特定的API,那么你只能这样做,但它不是暴露给JavaScript的常规浏览器API的一部分。所以简短的回答是:没有。

另一种方法是向已知大小的文件发出请求并查看传输所需的时间,从中可以推断出连接的速度,但这意味着额外的流量,所以一定要选择文件很好(它应该很小,以免产生过多的移动流量,但不能太小,以至于你没有从下载中获得任何有用的信息)。

不幸的是,这可能不会告诉你太多,因为在移动时,客户端可能会在任何时候从一个连接切换到完全不同的连接。更重要的是,在完全相同的连接上,从服务器接收数据所花费的时间可能会从一秒钟到下一秒钟完全不同,具体取决于影响移动客户端的许多因素。因此,如果这是一个视频应用程序,这实际上应该由服务器控制,如果服务器发现发送的数据包太少,服务器应该决定降低视频的质量。有媒体服务器就是这样做的,例如Red5WowzaAdobe Media Server

答案 1 :(得分:4)

您可以编写与this类似的代码。

var imageAddr = "http://www.tranquilmusic.ca/images/cats/Cat2.JPG" + "?n=" + Math.random();
    var startTime, endTime;
    var downloadSize = 5616998;
    var download = new Image();
    download.onload = function () {
        endTime = (new Date()).getTime();
        showResults();
    }
    startTime = (new Date()).getTime();
    download.src = imageAddr;

    function showResults() {
        var duration = (endTime - startTime) / 1000; //Math.round()
        var bitsLoaded = downloadSize * 8;
        var speedBps = (bitsLoaded / duration).toFixed(2);
        var speedKbps = (speedBps / 1024).toFixed(2);
        var speedMbps = (speedKbps / 1024).toFixed(2);
        alert("Your connection speed is: \n" + 
               speedBps + " bps\n"   + 
               speedKbps + " kbps\n" + 
               speedMbps + " Mbps\n" );
    }​

您可以使用此代码检测客户端的互联网速度。你无法检测连接类型。一个256+ kb的文件足以检测速度。

答案 2 :(得分:3)

一种方法是请求文件并查看下载所需的时间。有关示例,请参阅this

如果您的客户位于移动设备上,则您网站下载的每个额外字节都可能需要付费。此外,有许多因素会影响下载文件的时间,而“连接类型”只是其中之一。

但是,这种方法应该给你一个很好的近似值。

答案 3 :(得分:0)

原始问题并不区分(A)下载和(B)上传的连接速度(是的,他需要向最终用户发送视频,但也许它是用户刚才的视频)上传)。接受的答案对于测量下载速度很有用。

对于上传速度,您可以考虑在隐藏表单字段中嵌入base64编码的图像以隐藏表单。还可以创建一个隐藏的iframe,并将隐藏的表单定位到隐藏的iframe中。通过javascript提交隐藏的表单,将当前时间存储在JS变量中。在结果页面上,当onload触发时,通过iframe与其父窗口之间的javascript进行通信,发送onload事件触发时的时间。将开始时间与结束时间进行比较,然后除以传输的字节数。

您需要让iframe中的文档与包含iframe的窗口中的文档位于同一个域中,以便遵守浏览器的同源政策。