Избегайте автоматического обновления браузера, если браузер отключен

У меня есть веб-страница, которая отображает рекламу. Страница обновляется на основе пользовательского ввода, скажем, 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 на сервер с рекламой, и если этот запрос будет успешным, браузер будет в сети.

Другие вопросы по тегам