Избегайте автоматического обновления браузера, если браузер отключен
У меня есть веб-страница, которая отображает рекламу. Страница обновляется на основе пользовательского ввода, скажем, 60 минут, например. Таким образом, если по истечении часа появятся новые объявления, страница обновится сама (с использованием JavaScript) и покажет новые объявления.
<body oncontextmenu="return false;" onload="JavaScript:timedRefresh(<?php echo $tvout_refresh; ?>);">
$tvout_refresh
60 минут.
Теперь у меня возникла небольшая проблема: если веб-страница переходит в автономный режим, страница перенаправляется на автономную страницу браузера (страницу, которая говорит, что не может получить доступ к веб-сайту) после того, как таймер истекает (60 минут, обновляется). страница).
После небольшого поиска я видел этот фрагмент кода, позволяющий мне определить, подключен ли браузер к сети или нет.
if (navigator.onLine) {
alert('online')
} else {
alert('offline');
}
а также
window.addEventListener("offline", function(e) {
alert("offline");
}, false);
window.addEventListener("online", function(e) {
alert("online");
}, false);
Теперь, независимо от того, находится ли браузер в автономном режиме или онлайн, браузер обнаружит, что он отключен, только когда мой таймер сценария обновления закончится и обновит страницу. Есть ли способ вставить скрипт, который определяет, что браузер отключен, пропускает обновление, сбрасывает таймер и пытается снова через 60 минут, избегая страницы браузера в автономном режиме?
timedRefresh
определяется следующим образом:
function timedRefresh(timeoutPeriod) {
setTimeout("location.reload(true);", timeoutPeriod);
}
2 ответа
Ваша функция обновления должна выглядеть так:
function timedRefresh(timeoutPeriod) {
function refreshIfOnline() {
if (navigator.onLine)
location.reload(true);
else
setTimeout(refreshIfOnline, timeoutPeriod);
}
setTimeout(refreshIfOnline, timeoutPeriod);
}
Это добавит проверку флага "onLine". Если браузер не подключен к Интернету, он будет находиться в режиме ожидания в течение еще одного периода ожидания и проверить снова.
Теперь обратите внимание, что флаг onLine не идеален. Определить, есть ли у устройства подключение к Интернету, - непростая задача. Все, что вы действительно можете сказать, это то, можете ли вы получить ответ от удаленной сетевой службы в течение некоторого периода времени. (Очевидно, что телефоны знают, когда они находятся в "Режиме полета" или что-то в этом роде, но это должно быть то, с чем браузер должен иметь возможность иметь дело с детерминистически.)
Вы можете сделать удаленный запрос AJAX на сервер с рекламой, и если этот запрос будет успешным, браузер будет в сети.