0

我有一个显示广告的网页。页面根据用户输入刷新,例如 60 分钟。因此,如果在一小时结束后要显示新广告,页面将自行刷新(使用 JavaScript)并显示新广告。

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

$tvout_refresh是 60 分钟。

现在,我遇到了一个小问题,如果网页离线,页面将在计时器用完(60分钟,刷新)后重定向到浏览器的离线页面(表示无法访问网站的页面)这页纸)。

经过一番搜索,我看到了这段代码,让我能够检测浏览器是在线还是离线。

if (navigator.onLine) {
    alert('online')
} else {
    alert('offline');
}

window.addEventListener("offline", function(e) {
    alert("offline");
}, false);

window.addEventListener("online", function(e) {
    alert("online");
}, false);

现在,无论浏览器是离线还是在线,浏览器只会在我的刷新脚本计时器用完并刷新页面时检测到它是否离线。有没有办法插入一个脚本来确定浏览器离线,跳过刷新,重置计时器并在 60 多分钟后重试,避免浏览器离线页面?

timedRefresh定义如下:

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

2 回答 2

0

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

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

    setTimeout(refreshIfOnline, timeoutPeriod);
}

这将添加对“onLine”标志的检查。如果浏览器离线,它将休眠另一个超时时间并再次检查。

现在,请注意“onLine”标志并不完美。检测设备是否具有 Internet 连接性最终是一个棘手的问题。您真正能知道的是您是否可以在一段时间内从远程网络服务获得响应。(显然,手机知道它们何时处于“飞行模式”或其他状态,但这应该是浏览器应该能够确定地处理的那种事情。)

于 2014-04-14T18:41:55.147 回答
-1

您可以通过广告向服务器发出 AJAX 远程请求,如果此请求成功,则浏览器在线。

于 2014-04-14T18:26:25.777 回答