我有一个不寻常的问题。我正在使用以下脚本来检查使用navigator.onLine
的互联网连接。如果有互联网连接,页面将每15秒刷新一次。如果没有任何互联网连接,该页面将使用innerHTML
显示消息。
<script type="text/javascript">
setInterval(function () {
if (navigator.onLine) {
var myInterval = setInterval(function(){window.location.href = "Tracker.html";},15000);
} else {
clearInterval(myInterval);
var changeMe = document.getElementById("change");
change.innerHTML = "<big><font face='Arial' color='#ffffff' size='2'><center>OFFLINE</big><br>No internet connection</font></center>";
}
}, 250);
</script>
我的问题是,一旦没有互联网连接,将显示该消息,但页面最后仍会刷新。我试图通过在代码的clearInterval(myInterval);
部分中使用else
来避免这种情况,但它无效。
有什么建议吗?
答案 0 :(得分:2)
每当执行外部区间回调时,都会创建一个新的myInterval
变量,前一个变量将丢失(因为回调终止,它会超出范围)。
您必须通过在函数外声明它来在函数调用之间保留变量的值。如果一个人已经在运行,你还必须确保没有创建另一个超时。
var timeout = null;
setInterval(function () {
if (navigator.onLine) {
if (timeout === null) {
timeout = setInterval(function(){window.location.href = "Tracker.html";},15000);
}
} else {
clearTimeout(timeout);
timeout = null;
// ...
}
}, 250);
答案 1 :(得分:2)
要以15秒的间隔刷新页面(假设存在连接),请使用:
function refresh() {
if(navigator.onLine)
window.location.href = "Tracker.html";
else{
var changeMe = document.getElementById("change");
change.innerHTML = "<big><font face='Arial' color='#ffffff' size='2'><center>OFFLINE</big><br>No internet connection</font></center>";
setTimeout(refresh, 250);
}
}
setTimeout(refresh, 15000);
在15秒结束时,检查是否存在连接。如果有,它会刷新页面。如果没有,则每隔250毫秒继续检查,直到用户重新连接,此时刷新页面。
最终结果是脚本在经过至少15秒后尽快刷新页面。
答案 2 :(得分:1)
您需要在if语句之外声明myInterval
。您也应该只需要一次刷新代码。像这样:
var myInterval = setTimeout(function(){window.location.href = "Tracker.html";},15000);
setInterval(function () {
if (!navigator.onLine) {
clearTimeout(myInterval);
var changeMe = document.getElementById("change");
changeMe.innerHTML = "<big><font face='Arial' color='#ffffff' size='2'><center>OFFLINE</big><br>No internet connection</font></center>";
}
}, 250);
在此设置刷新间隔并不断检查浏览器是否处于脱机状态,如果是,则删除计时器并执行清理代码。我还更改了刷新代码以使用setTimeout而不是interval,因为它只发生一次。
另一个问题是您创建了changeMe
,但随后尝试使用change
。 change
不存在。我也在我的例子中解决了这个问题。
注意:一旦重新获得连接,这将不恢复。见Felix Kling的回答。