我有一个显示广告的网页。例如,基于用户输入(例如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);
}
答案 0 :(得分:1)
您的刷新功能应如下所示:
function timedRefresh(timeoutPeriod) {
function refreshIfOnline() {
if (navigator.onLine)
location.reload(true);
else
setTimeout(refreshIfOnline, timeoutPeriod);
}
setTimeout(refreshIfOnline, timeoutPeriod);
}
这将添加“onLine”标志的检查。如果浏览器处于脱机状态,它将在另一个超时时间内休眠并再次检查。
现在,请注意“onLine”标志并不完美。检测设备是否具有Internet连接最终是一个棘手的问题。您可以真正知道的是,您是否可以在一段时间内从远程网络服务获得响应。 (显然电话知道他们何时处于“飞行模式”或其他什么,但这应该是浏览器应该能够确定地处理的事情。)
答案 1 :(得分:0)
您可以使用广告向服务器发出AJAX远程请求,如果此请求成功,则浏览器处于联机状态。