4

I have this code in a html file that checks for connectivity, but the problem here is that it takes about 10 seconds to throw the alert message box to indicate the connection is lost. I want to know if there's a much faster way to inform the user that the connection is lost without having to wait. Strictly JS thanks...

JS code:

<script language="JavaScript">
function SubmitButton()
{
    if(navigator.onLine)
    {
            document.getElementById('SubmitBtn').style.visibility='visible';
    }
    else
    {
        document.getElementById('SubmitBtn').style.visibility='hidden';
    }
}
function Online() 
{ 
    var status=false;
    status= navigator.onLine;
    if(status!= true)
    {
        alert('Network connectivity is lost, please try again later');
    }
}
</script>

Calling it in html file here:

<INPUT name="ccMCA1input" type="checkbox" onclick="ccMCA1.ccEvaluate(),Online()" value=False>
gaganHR
  • 337
  • 2
  • 7
  • 19

3 Answers3

7

You could periodically request a 1x1 gif image from a(ny) server, making sure you use the cache buster method to avoid caching. You could use the onload and onerror events.

var isOnline = (function isOnline(){
  // Create a closure to enclose some repeating data
  var state = false;
  var src = 'gif_url?t=' + Date.now();
  var function onLoad = function(){state = true;}
  var function onError = function(){state = false;}

  // Inside the closure, we create our monitor
  var timer = setInterval(function(){
    var img = new Image();
    img.onload = onLoad;
    img.onerror = onError;
    img.src = src;
  }, 10000);

  // Return a function that when called, returns the state in the closure
  return function(){return state;};
}());

//Use as
var amIOnline = isOnline();
Joseph
  • 117,725
  • 30
  • 181
  • 234
4

navigator.onLine is the only built-in property which can be checked (and not reliable btw).
You could create a XHR request to a reliable server, and check whether any response is being received.

Rob W
  • 341,306
  • 83
  • 791
  • 678
  • AFAIK, window.navigator.onLine will check whether the browser is set to browse the content online. It does not check about the internet connectivity in your PC. It will work only when you set your browser specifically to browse offline. – Ruchira Feb 25 '16 at 23:40
1

Consider checking out the following URLs:

  1. Online connectivity monitoring
  2. navigator.onLine testing
  3. on/offline event capture
Dhwanil Shah
  • 1,072
  • 1
  • 9
  • 25