<html>
<head>Harshal</head>
<script>
var limit = "5:0"
var doctitle = document.title
var parselimit=limit.split(":")
parselimit=parselimit[0]*60+parselimit[1]*1
function beginrefresh(){
if (parselimit==1)
window.location.reload()
else{
parselimit-=1
curmin=Math.floor(parselimit/60)
cursec=parselimit%60
if (curmin!=0)
curtime=curmin+" minutes and "+cursec+" seconds left until page refresh!"
else
curtime=cursec+" seconds left until page refresh!"
document.title = doctitle + ' (' + curtime +')'
setTimeout("beginrefresh()",1000)
}
}
if (window.addEventListener)
window.addEventListener("load", beginrefresh, false)
else if (window.attachEvent)
window.attachEvent("load", beginrefresh)
</script>
</html>Это мой демонстрационный код. Я обновляю страницу каждые 5 минут, когда кто-то нажимает на ссылку, а заголовок вкладки отсчитывает 5 пятерок. Однако я не могу понять, как я могу запустить обновление в 8:01, а затем снова в 8:06, а затем снова в 8:11, и просто продолжать и не зависит от того, когда кто-то нажимает на него.
Любая помощь?
Код работает, но вы хотите, чтобы он запускался только в 8:01? Объясните, пожалуйста, вариант использования. Что должно произойти, если, скажем, кто-то откроет страницу в 8:00 или 8:02?
@David Под кликом я имел в виду, когда кто-то нажимает на ссылку, чтобы перейти на эту страницу. Проблема в том, что я хочу обновить страницу в 8:01, а затем в 8:06. Я хочу, чтобы страница действительно обновлялась по мировому времени каждые 5 минут, а не через 5 минут после того, как кто-то щелкнул по ней. Надеюсь, это объясняет.
@Greg Да, когда кто-то нажимает на него в 8:02, он обновляется в 8:07. Я хочу, чтобы страница обновлялась в 8:06 независимо от того, когда кто-то нажимает на нее. Последнее обновление должно быть в 8:01.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


использовать установленный интервал.
setInterval(function() {
window.location.reload();
}, 300000);
setinterval в мс (5 мин = 300 к мс)
Как бы это началось в 8:01?
Новая страница (после обновления) не знает о состоянии предыдущей страницы. Итак, вам нужен способ передать это состояние вперед через параметр запроса или что-то в этом роде.
Мой подход заключался бы в том, чтобы просто перезагрузить страницу, когда они щелкнули по ссылке, и настроить новую страницу на обновление через 5 минут (сохраняя тот же URL-адрес, поэтому мы загружаем страницу с кодом обновления).
if (window.location.search.includes('refresh')){
setTimeout(function(){//we're in "refresh mode" so just wait 5 minutes and do it again
location.href = location.href;
}, 1000 * 60 * 5);
}<a href = "?refresh">refresh every five minutes</a>пример, похоже, не работает из-за навигации. но теоретически это должно работать
Для запуска в указанное время используйте следующую функцию "ожидания"
var startHour = 8;
var startMinute = 5;
function wait() {
var startTime = currentTime = new Date();
startTime.setHours(startHour);
startTime.setMinutes(startMinute);
if (startTime < currentTime) {
setTimeout(wait, 1000);
} else {
// run refresh function here
}
}
Для достижения ожидаемого результата используйте SetInterval
setInterval(function(){
var currTimeHr = new Date().getHours();
var currTimeMin = new Date().getMinutes();
if (currTimeHr >= 8){ //start at 8 or at any point after 8am
if (currTimeMin%5 === 0){ // check every 5 mins
window.location.reload(true); //refresh page
}
}
}, 1000*60)пример кода - https://codepen.io/nagasai/pen/MXVWxb?editors=1010
удалил свой ответ, потому что это лучший ответ.
измените условие if на if (currTimeHr> = 7 && currTimeMin> = 59)
может быть, если выполняется условие и перенаправление и загрузка страницы .. все вместе происходит за 30 секунд
любое изменение времени обновления ??
Я попытался добавить следующее, но он все еще не обновляется. var currTimeSec = новая дата (). getSeconds (); если (currTimeHr> = 8 && currTimeMin> = 0 && currTimeSec == 30) if (currTimeMin% 5 === 0) {window.location.reload (true); }}}, 1000 * 60)
вместо того, чтобы запускать каждую минуту, сделайте setInterval запускаться каждую секунду, то есть 1000 вместо 1000 * 60, чтобы он был точным и начинался с 8 точно
Я совершенно забыл об интервале. Теперь он работает отлично! Большое спасибо!
@Harshal Рад, что это сработало для вас :) .. пожалуйста, отметьте мой пост как ответ, если он сработал для вас
Какая ссылка? Эта страница выглядит так, как будто она начинает цикл обновления, как только она загружается. И ваше описание звучит так, будто оно успешно обновляется с 5-минутными интервалами. Я не вижу здесь ничего, связанного с какими-либо событиями "щелчки". Мне непонятно, в чем проблема.