如何捕捉不稳定的互联网连接

How to catch flaky Internet connections

本文关键字:互联网 连接 不稳定 何捕捉      更新时间:2023-09-26

我遇到一种情况,用户有Wi-Fi连接,但Wi-Fi没有连接到互联网。

所以navigator.onLine生成了一个true,但实际上用户并不在线。除了进行实际的ajax调用之外,还有其他指标可以判断我们是否在线吗?

我似乎记得PhoneGap有一个额外的指示器。

这样的东西应该能在中工作

var req = new XMLHttpRequest();
req.open('GET', 'http://www.google.com', false);
req.send(null);
if(req.status == 200)
   alert(req.responseText);

真正可靠的方法是尝试去做一些事情。它可以通过点击你自己网站的一些文件来完成。

i_am_online = true;
function connectivity_test()
{
    if (navigator.onLine) // have network, test if can actually reach the server
    {
        $.ajax('/some_static_file.html', { type: 'HEAD', cache: false })
        .done(function() { setTimeout(connectivity_test, 2000); i_am_online = true; })
        .fail(function() { setTimeout(connectivity_test, 2000); i_am_online = false; });
    }
    else // without network I'm offline, no need to ping
    {
        setTimeout(connectivity_test, 2000);
        i_am_online = false;
    }
}
connectivity_test();

这应该每2秒测试一次对等连接,并相应地用truefalse更新变量i_am_online

对一些静态文件进行测试,以确保不会触发服务器端脚本。方法HEAD将只发送标头,因此无论文件大小如何,此"ping"都将生成最小的网络流量。

window.addEventListener("online", NowOnline, false);
window.addEventListener("offline", NowOffline, false);