Javascript 仅当internet可用时重新加载网页

Javascript 仅当internet可用时重新加载网页,javascript,html,Javascript,Html,我的网页中有以下代码,用于检查Internet连接 function checkJSNetConnection(){ var xhr = new XMLHttpRequest(); var file = "https://dl.dropboxusercontent.com/s/9d7ri25ku7xlj9u/WALL-E%20%281%29.jpg?dl=0"; var r = Math.round(Math.random() * 10000); xhr.open('HEAD', fi

我的网页中有以下代码,用于检查Internet连接

function checkJSNetConnection(){
 var xhr = new XMLHttpRequest();
 var file = "https://dl.dropboxusercontent.com/s/9d7ri25ku7xlj9u/WALL-E%20%281%29.jpg?dl=0";
 var r = Math.round(Math.random() * 10000);

 xhr.open('HEAD', file + "?subins=" + r, false);

 try {
  xhr.send();

  if (xhr.status >= 200 && xhr.status < 304) {
   return  true;
  } else {
   return false;
  }
 } catch (e) {
  return false;
 }
}

function timedRefresh(timeoutPeriod) {
  if(checkJSNetConnection()==false){
    alert("Internet Connection does not Exist");
  } else {
    setTimeout("location.reload(true);",timeoutPeriod);
  }
}
当互联网可用时,应在10秒后重新加载页面。否则,它将无限期地等待连接

function checkJSNetConnection(){
 var xhr = new XMLHttpRequest();
 var file = "https://dl.dropboxusercontent.com/s/9d7ri25ku7xlj9u/WALL-E%20%281%29.jpg?dl=0";
 var r = Math.round(Math.random() * 10000);

 xhr.open('HEAD', file + "?subins=" + r, false);

 try {
  xhr.send();

  if (xhr.status >= 200 && xhr.status < 304) {
   return  true;
  } else {
   return false;
  }
 } catch (e) {
  return false;
 }
}

function timedRefresh(timeoutPeriod) {
  if(checkJSNetConnection()==false){
    alert("Internet Connection does not Exist");
  } else {
    setTimeout("location.reload(true);",timeoutPeriod);
  }
}
函数checkJSNetConnection(){
var xhr=new XMLHttpRequest();
变量文件=”https://dl.dropboxusercontent.com/s/9d7ri25ku7xlj9u/WALL-E%20%281%29.jpg?dl=0";
var r=Math.round(Math.random()*10000);
xhr.open('HEAD',file+“?subins=“+r,false”);
试一试{
xhr.send();
如果(xhr.status>=200&&xhr.status<304){
返回true;
}否则{
返回false;
}
}捕获(e){
返回false;
}
}
函数timedRefresh(timeoutPeriod){
if(checkJSNetConnection()==false){
警报(“互联网连接不存在”);
}否则{
setTimeout(“location.reload(true);”,timeoutPeriod);
}
}
该函数从以下位置调用:

<body onload="JavaScript:timedRefresh(10000);">


问题是,尽管它在Internet可用时成功重新加载页面,但它不会显示无连接的警报消息,而是显示“无法加载页面”。

想想看,如果有Internet连接,它会将页面设置为10秒后重新加载,对吗

因此,假设它通过了互联网连接测试,10秒倒计时开始。现在连接突然中断,倒计时达到零并刷新页面(尝试从网站获取新的副本),但由于没有互联网连接,它只是失败并表示页面不可用

一个可能的解决方案:(还有更多,这是一个)

不要设置超时,如果internet可用,请立即重新加载并在连接检查上启动新的超时:

将“定时刷新”更改为“定时检查”逻辑:


这样,当页面第一次加载时,它将开始10秒的倒计时,最后将进行测试。如果有可用的连接,它将立即重新加载,并开始新的倒计时。如果没有连接,它将显示警报。

基本上,它当前正在确认倒计时开始时的internet连接,而不是应该的结束。问题不在连接测试中,问题在于逻辑中存在缺陷,即使没有可用连接,页面也可以重新加载。他应该立即重新加载,而不是在服务器上设置超时refresh@Banana,我想修改“timecheck”,如果条件为“警报”(“Internet连接不存在”);“”到“”,而(checkJSNetConnection()==false);位置。重新加载(true);“”“它工作正常,但问题是我屏幕上的幻灯片放映在第一张图像上停止,并且没有转换。有什么建议吗?谢谢为什么要使用while循环?它将永远卡在循环中,不会继续执行其余的代码……除了“连接丢失”警报之外,只需使用if语句(或者替代它)再次调用超时。
setTimeout(timedCheck,10000);
function timedCheck(timeoutPeriod) {
  if(checkJSNetConnection()==false){
      alert("Internet Connection doesnot Exist");
 }else{
      location.reload(true);
 }
}