在线时发送提醒

时间:2013-06-27 13:12:13

标签: javascript

我想了解navigator.onLine的工作原理。为此,我输入了一个小片段,如果浏览器在线则应该每3秒检查一次,如果是,则弹出警报:

function check_connection() {
var online = navigator.onLine;
return online;
}

function timed_alert() {

var perfectTiming = setInterval(check_connection,3000);

if (online) {
alert("ONLINE!");
clearInterval(perfectTiming);
}

timed_alert();

由于某种原因,这件事不起作用。我做错了什么?我应该在片段中更改哪些内容才能使其正常工作?

4 个答案:

答案 0 :(得分:3)

你的警报和检查需要在同一个函数中,并且计时器id(perfectTiming)是全局的。

var perfectTiming = null;
function check_connection() {
     var online = navigator.onLine;
     if (online) {
          alert("ONLINE!");
          clearInterval(perfectTiming);
     }
}

function timed_alert() {
    perfectTiming = setInterval(check_connection,3000);
}

timed_alert();

如果您正在尝试测试用户是否具有更难的活动互联网连接,因为浏览器没有真正的方法来检查这一点。但是,你可以测试几个不同的ip / url以查看它们是否可以访问

var testUrlIndex = 0;
var testurls = [
    "http://www.google.com",
    "http://www.cnn.com"
];
function testURL(url)
{
    var xmlhttp;
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==0)
        {
                testUrlIndex++;
            if( testUrlIndex<testurls.length ) {
                testUrl(testurls[testUrlIndex]);
            } else {
                weAppearToBeOffline();
            }
        }
    }
    xmlhttp.open("GET",url,true);
    xmlhttp.send();
}

function weAppearToBeOffline() {
     //DO whatever you need to do if we are offline.
}
testUrl(testurls[0]); //start the check

此代码将检查2个网址(如果您想要查看更多内容,只需向testurls添加更多网址),如果它全部通过并且无法访问它们,则会调用weAppearToBeOffline函数< / p>

现在这只有几个方面的错误,主要是因为有一种情况可能是用户在线,但无法访问任何这些网址,但可以联系到其他人。

答案 1 :(得分:2)

进行以下更改:

var perfectTiming = setInterval(check_connection,3000);

function check_connection() {    
  if(navigator.onLine){
      alert("ONLINE!");
      clearInterval(perfectTiming);
  }
}

答案 2 :(得分:2)

您需要使用setTimeout而不是check_connection调用timed_alert。

function check_connection() {
    var online = navigator.onLine;
    return online;
}

function timed_alert() {
    var online  =check_connection();


    if (online) {
       alert("ONLINE!");

    }
    else{

       setTimeout(timed_alert,3000);
    }
}
timed_alert();

答案 3 :(得分:2)

您每隔3秒检查一次连接,但是您没有做任何事情。改为每隔3秒调用timed_alert并在该函数中使用check_connection

var perfectTiming = setInterval(timed_alert,3000);

function check_connection() {
    var online = navigator.onLine;
    return online;
}

function timed_alert() {
    if (check_connection()) {
        alert("ONLINE!");
        clearInterval(perfectTiming);
    }
}

如果您计划在脚本中的其他地方check_connection,这是要采取的路线。