Cordova PhoneGap脱机事件触发太慢

Cordova PhoneGap脱机事件触发太慢,cordova,events,offline,Cordova,Events,Offline,在我的PhoneGap应用程序中,我首先检查设备是否连接到互联网,然后再运行代码和调用API等 if (window.navigator.onLine == false) { //error handling } else { //do stuff & call API } 这非常有效,但是如果设备失去连接,并且页面在我断开连接后的5秒内重新加载,代码仍然会触发,API也会被调用,尽管设备不再连接。如果在大约5秒钟后重新加载页面,则会按预期触发错误处理 因此,在连接断开

在我的PhoneGap应用程序中,我首先检查设备是否连接到互联网,然后再运行代码和调用API等

if (window.navigator.onLine == false) {
    //error handling
} else {
    //do stuff & call API
}
这非常有效,但是如果设备失去连接,并且页面在我断开连接后的5秒内重新加载,代码仍然会触发,API也会被调用,尽管设备不再连接。如果在大约5秒钟后重新加载页面,则会按预期触发错误处理

因此,在连接断开后,似乎需要大约5秒钟才能切换到“脱机”。我用离线事件再次检查了这一点,它只在那5秒钟后被触发

document.addEventListener("offline", onOffline, false);

function onOffline() {
    alert("now offline");
}

那么,有没有一种方法可以在连接丢失或被停用时立即进行检查?

如果问题是在页面加载时直接检查在线状态,请使用网络信息插件,并在页面加载完成后直接调用函数:

function checkConnection() {
    var networkState = navigator.network.connection.type;
    var states = {};
    states[Connection.UNKNOWN]  = false;
    states[Connection.ETHERNET] = true;
    states[Connection.WIFI]     = true;
    states[Connection.CELL_2G]  = true;
    states[Connection.CELL_3G]  = true;
    states[Connection.CELL_4G]  = true;
    states[Connection.NONE]     = false;
    return states[networkState];
}

离线
在线
事件在应用程序使用后特别有效。网络信息插件可以在触发
deviceready
事件后立即返回连接状态。

奇怪-我从未见过如此长的延迟,但从理论上讲,您仍然应该为网络调用使用错误处理程序,并在那里处理错误。这听起来真的是我特有的设备。是的,我已经做到了。只是由于网络调用(超时)错误,用户可以选择重试,但由于没有实际连接,重试变得毫无意义。这样他们可以再试一次。。永远。在特定于设备的事情上:刚刚在iOS模拟器上测试,事件几乎立即触发,在iPad3和iPhone6上,在6秒钟后触发。尝试使用网络信息插件,并检查“navigator.network.connection.type==connection.NONE”。在断开连接之前还有5秒的时间间隔。使用iOS,您还需要检查
未知
。我试图找到解释这一点的文档,但不记得在哪里找到的。尝试了一下,仍然有5秒的间隔。因为iOS模拟器上没有间隙,所以猜测它是特定于设备的。