2014-12-09 3 views
1

У меня есть следующий фрагмент кода с моей веб-страницы, который проверяет подключение к Интернету.Перезагрузка веб-страницы только при наличии Интернета

Когда Интернет доступен, он должен перезагрузить страницу через 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); 
    } 
} 

Функция вызывается из:

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

Проблема в том, что, хотя он успешно перезагружает страницу, когда Интернет доступен, он не отображается предупреждающее сообщение для без подключения, показывая вместо msgstr "невозможно загрузить страницу".

ответ

6

Подумайте об этом, если есть подключение к интернету, он устанавливает, что страница перезагружается через 10 секунд?

так, давайте предположим, что он прошел тест на подключение к Интернету и начался обратный отсчет 10 секунд. теперь неожиданно соединение теряется, обратный отсчет достигает нуля и обновляет страницу (пытается получить новую копию с сайта), но поскольку нет подключения к интернету, он просто терпит неудачу и говорит, что эта страница недоступна.

возможное решение: (есть больше, это один)

Dont установить тайм-аут, если Интернет доступен, перезарядить сразу и начать новый тайм-аут на чеке подключения:

изменение "приурочено обновление" к "приуроченная проверки" логика:

<body onload="JavaScript:setTimeout(timedCheck,10000);"> 

и сценарий:

function timedCheck(timeoutPeriod) { 
    if(checkJSNetConnection()==false){ 
     alert("Internet Connection doesnot Exist"); 
}else{ 
     location.reload(true); 
} 
} 

Таким образом, при первой загрузке страницы он начнет обратный отсчет 10 секунд, в конце которого будет выполнен тест. если есть доступное соединение, оно будет перезагружаться немедленно, и начнется новый обратный отсчет. если соединение отсутствует, оно отобразит предупреждение.

+2

В принципе, он в настоящее время подтверждает подключение к Интернету в начале обратного отсчета, а не конец, как следует. – philtune

+2

проблема не в тесте подключения, проблема в том, что в логике есть недостаток, который позволяет перезагружать страницу, даже если соединение отсутствует. он должен перезагрузить сразу, а не устанавливать тайм-аут на обновление – Banana

+0

Спасибо, ребята за хорошее решение и объяснение –

Смежные вопросы