I was working on an online\offline application, wherein I wanted to display a set of records stored in the local database to the user when he goes offline. The only way to determine the network status is to send a XHR request to the server at particular time intervals (polling). If the server responds back with some data it is understood that the user is online. However, I came across two event listeners 'ononline' and 'onoffline' which are triggered when the network status changes.
Sample Code:
These event listeners are not supported in every browser, I have tested this on Chrome 11 and it works great. Here is the code snippet that I have used in my application:
As seen in the above code, the navigator object has an attribute onLine which is used to determine network status. It is set to true if the user is online and false otherwise. To test this, unplug the network cable and see that the offline event gets triggered. On connecting the network cable the online event would be triggered.
function showOnlineStatus() {
var status = document.getElementById('userStatus');
if(navigator.onLine)
status.innerHTML = status.className = 'online';
else
status.innerHTML = status.className = 'offline';
}
window.onload = window.ononline = window.onoffline = showOnlineStatus;
As seen in the above code, the navigator object has an attribute onLine which is used to determine network status. It is set to true if the user is online and false otherwise. To test this, unplug the network cable and see that the offline event gets triggered. On connecting the network cable the online event would be triggered.
Hi Sagar,
ReplyDeletesadly it's badly and differently supported by the browsers so I would not rely on it. Also if your router lose the internet connection, it won't be detected as the computer is still connected to the router.
I think the point though is that it could be helpful. You could warn a user about them being offline - or use local storage to temporarily store stuff until they get back online.
ReplyDelete@Cyril,
ReplyDeleteYou're correct. This is not supported across the browsers (I have mentioned this in my post). However, once other browsers implement this feature we would not be facing this problem.