我想了解navigator.onLine
的工作原理。为此,我输入了一个小片段,如果浏览器在线则应该每3秒检查一次,如果是,则弹出警报:
function check_connection() {
var online = navigator.onLine;
return online;
}
function timed_alert() {
var perfectTiming = setInterval(check_connection,3000);
if (online) {
alert("ONLINE!");
clearInterval(perfectTiming);
}
timed_alert();
由于某种原因,这件事不起作用。我做错了什么?我应该在片段中更改哪些内容才能使其正常工作?
答案 0 :(得分:3)
你的警报和检查需要在同一个函数中,并且计时器id(perfectTiming)是全局的。
var perfectTiming = null;
function check_connection() {
var online = navigator.onLine;
if (online) {
alert("ONLINE!");
clearInterval(perfectTiming);
}
}
function timed_alert() {
perfectTiming = setInterval(check_connection,3000);
}
timed_alert();
如果您正在尝试测试用户是否具有更难的活动互联网连接,因为浏览器没有真正的方法来检查这一点。但是,你可以测试几个不同的ip / url以查看它们是否可以访问
var testUrlIndex = 0;
var testurls = [
"http://www.google.com",
"http://www.cnn.com"
];
function testURL(url)
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==0)
{
testUrlIndex++;
if( testUrlIndex<testurls.length ) {
testUrl(testurls[testUrlIndex]);
} else {
weAppearToBeOffline();
}
}
}
xmlhttp.open("GET",url,true);
xmlhttp.send();
}
function weAppearToBeOffline() {
//DO whatever you need to do if we are offline.
}
testUrl(testurls[0]); //start the check
此代码将检查2个网址(如果您想要查看更多内容,只需向testurls
添加更多网址),如果它全部通过并且无法访问它们,则会调用weAppearToBeOffline
函数< / p>
现在这只有几个方面的错误,主要是因为有一种情况可能是用户在线,但无法访问任何这些网址,但可以联系到其他人。
答案 1 :(得分:2)
进行以下更改:
var perfectTiming = setInterval(check_connection,3000);
function check_connection() {
if(navigator.onLine){
alert("ONLINE!");
clearInterval(perfectTiming);
}
}
答案 2 :(得分:2)
您需要使用setTimeout而不是check_connection调用timed_alert。
function check_connection() {
var online = navigator.onLine;
return online;
}
function timed_alert() {
var online =check_connection();
if (online) {
alert("ONLINE!");
}
else{
setTimeout(timed_alert,3000);
}
}
timed_alert();
答案 3 :(得分:2)
您每隔3秒检查一次连接,但是您没有做任何事情。改为每隔3秒调用timed_alert
并在该函数中使用check_connection
:
var perfectTiming = setInterval(timed_alert,3000);
function check_connection() {
var online = navigator.onLine;
return online;
}
function timed_alert() {
if (check_connection()) {
alert("ONLINE!");
clearInterval(perfectTiming);
}
}
如果您计划在脚本中的其他地方check_connection
,这是要采取的路线。