Javascript 避免在浏览器脱机时自动刷新浏览器

Javascript 避免在浏览器脱机时自动刷新浏览器,javascript,offline-browsing,Javascript,Offline Browsing,我有一个显示广告的网页。该网页会根据用户的输入刷新,比如说60分钟。因此,如果在一小时后有新的广告要显示,页面将使用JavaScript刷新自己并显示新的广告 <body oncontextmenu="return false;" onload="JavaScript:timedRefresh(<?php echo $tvout_refresh; ?>);"> 及 现在,无论浏览器是脱机还是联机,只有当我的刷新脚本计时器用完并刷新页面时,浏览器才会检测到它处于脱机状态。

我有一个显示广告的网页。该网页会根据用户的输入刷新,比如说60分钟。因此,如果在一小时后有新的广告要显示,页面将使用JavaScript刷新自己并显示新的广告

<body oncontextmenu="return false;" onload="JavaScript:timedRefresh(<?php echo $tvout_refresh; ?>);">

现在,无论浏览器是脱机还是联机,只有当我的刷新脚本计时器用完并刷新页面时,浏览器才会检测到它处于脱机状态。有没有办法插入一个脚本来确定浏览器处于脱机状态、跳过刷新、重置计时器并在60分钟后重试,从而避免浏览器脱机页面

timedRefresh的定义如下:

function timedRefresh(timeoutPeriod) {
    setTimeout("location.reload(true);", timeoutPeriod);
}

您可以使用ads向服务器发出AJAX远程请求,如果请求成功,则浏览器处于联机状态。

您的刷新功能应如下所示:

function timedRefresh(timeoutPeriod) {
    function refreshIfOnline() {
      if (navigator.onLine)
        location.reload(true);
      else
        setTimeout(refreshIfOnline, timeoutPeriod);
    }

    setTimeout(refreshIfOnline, timeoutPeriod);
}
这将添加对onLine标志的检查。如果浏览器处于脱机状态,它将休眠另一个超时时间并再次检查


现在,请注意,在线标志并不完美。检测设备是否具有互联网连接最终是一个棘手的问题。您真正能知道的是,您是否能够在一段时间内从远程网络服务获得响应。显然,手机知道什么时候处于飞行模式,但这应该是浏览器应该能够决定性地处理的事情。

如果可能的话,寻找我如何实现这一点的实际答案或正确方向的一点。为什么不在刷新脚本中检查navigator.onLine?你能给我举个例子吗,javascript不是我的强项,我正在慢慢地学习。你的刷新脚本中有代码来刷新页面,对吗?把它放在if语句中。timedRefresh在哪里定义?
function timedRefresh(timeoutPeriod) {
    setTimeout("location.reload(true);", timeoutPeriod);
}
function timedRefresh(timeoutPeriod) {
    function refreshIfOnline() {
      if (navigator.onLine)
        location.reload(true);
      else
        setTimeout(refreshIfOnline, timeoutPeriod);
    }

    setTimeout(refreshIfOnline, timeoutPeriod);
}