Как ограничить функцию javascript запуском макс. 1 раз в сутки - PullRequest
0 голосов
/ 12 июля 2020

Когда кто-то посещает мой сайт, должна быть вызвана определенная функция javascript. Но когда они обновляют sh страницу или go на другую страницу, эта функция НЕ должна выполняться снова в течение как минимум 24 часов.

Даже когда веб-браузер закрыт и снова открыт, функция должна не будет выполняться, пока не пройдет 24 часа.

Итак, я подумал о функции Javascript или jQuery, которая записывает повар ie со значением метки времени при выполнении функции.

Но перед выполнением функции она должна проверить, есть ли повар. ie.

  • Если его НЕТ, выполнить функцию.
  • Если он есть , проверьте значение времени в повар ie и сравните его с текущим временем.
  • Разница во времени составляет 24 часа или больше, затем выполните функцию. (и перезаписать значение времени готовки ie на следующие 24 часа)
  • Разница во времени меньше 24 часов, НЕ выполняйте функцию.

Будет ли это правильный подход к достижению цели? Или есть встроенная функция, которая это делает? И не мог бы кто-нибудь помочь мне создать код javascript или jQuery для достижения этого?

Спасибо.

EDIT: Я нашел здесь следующий код: Выполнить код один раз в день :

<script type='text/javascript'>
function hasOneDayPassed() {
    var date = new Date().toLocaleDateString();
    if( localStorage.yourapp_date == date ) return false;
    localStorage.yourapp_date = date;
    return true;
}

function runOncePerDay() {
    if( !hasOneDayPassed() ) return false;
    alert("blabla");
}

runOncePerDay();

</script>

Пробовал. Значение даты хранится в локальном хранилище. Но каким-то образом функция (предупреждение для целей тестирования) все еще выполняется при закрытии и повторном открытии веб-браузера (пока значение локального хранилища все еще существует)

Ответы [ 2 ]

2 голосов
/ 12 июля 2020

с использованием файлов cookie или локального хранилища будет работать, но кто-то может легко очистить свои файлы cookie / локальное хранилище или отредактировать код на стороне клиента. Так что, если действительно важно, что они не могут повторно запустить функцию, вы можете захотеть сохранить эту информацию на сервере

1 голос
/ 12 июля 2020

Вы можете сделать что-то вроде:

function oncePerDay(func){
  let dt = new Date, tm = dt.getTime();
  if(localStorage.timestamp){
    if(tm-localStorage.timestamp > 86399999){
      localStorage.timestamp = tm; func(tm);
    }
  }
  else{
    localStorage.timestamp = tm; func(tm);
  }
}
addEventListener('load', ()=>{
  oncePerDay(tm=>{
    console.log(tm);
  });
});

Конечно, если Клиент работает в браузере более 24 часов, это не будет работать без интервала для проверки изменения времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...