在我的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];
}
offline
和 online
事件专门在应用程序使用后起作用。网络信息插件可以在触发deviceready
事件后立即返回连接状态。