【发布时间】:2013-03-21 22:15:49
【问题描述】:
我正在为工作构建一个网页信息亭。当计算机启动时,它会立即加载信息亭,但连接到网络大约需要一分钟。用户看到的第一件事是连接错误,因为信息亭尝试访问实时页面,但还没有互联网。自助服务终端浏览器使用 Chrome。
为了防止最初的错误,我正在尝试创建一个本地托管的网页来检查互联网连接并等待建立。然后它重定向到实时页面。
这是最初的离线本地托管页面。它应该从这里重定向到实时页面。显然,在 Chrome 中,navigator.onLine 仅检查 Chrome 是否设置为“在线模式”,但实际上并不测试实时连接。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Kiosk Splash</title>
<link rel=stylesheet type="text/css" href="jquery/css/ui-lightness/jquery-ui-1.10.2.custom.css">
<script src="jquery/js/jquery-1.9.1.js"></script>
<script src="jquery/js/jquery-ui-1.10.2.custom.js"></script>
</head>
<body>
<div id="dialog" style="text-align:center;">
<p>
<font font face="verdana" size="5">The Kiosk is establishing a connection to the network...</font>
</p>
<div id="progressbar" style="width: 50%; margin: 0 auto;"></div>
</div>
<script>
$( "#dialog" ).dialog({ minWidth: 1000 });
$(".ui-dialog-titlebar-close", this.parentNode).hide();
$( "#progressbar" ).width(800);
$( "#progressbar" ).progressbar({
value: false
});
while(true){
if(navigator.onLine){
window.location.replace("http://stackoverflow.com");
break;
}
}
</script>
</body>
</html>
【问题讨论】:
-
对于初学者,请将您的
while(true)更改为interval,因为目前这将阻止 UI 响应。 -
您在docs on MDN 中发现的内容令人惊叹。
window.addEventListener("online", function(e) {alert("online");})并非所有浏览器都完全支持。而且我认为 Firefox 存在一个问题,即您始终在线。 ;) -
@epascarello 我应该提到我也尝试过并且得到了相同的结果:它立即触发在线,甚至在连接之前。我想知道“在线”是否只是检测浏览器是否设置为“在线”模式。
-
取决于浏览器,你用的是什么?
标签: javascript jquery html