Как обновлять страницу только один раз в день (после загрузки страницы) нажатием кнопки и распечатать время последнего обновления с помощью Javascript

#javascript #html #refresh #page-refresh

#javascript #HTML #обновить #страница-обновить

Вопрос:

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

 function CheckRefresh(){
  var lastRefresh = new Date(); 
  setInterval(function(){
       var now = new Date();
       if (new Date() - lastRefresh > 1000 * 60 * 60 * 24) { 
                  location.reload();
       }

   },60000);
                                           //Console.log(lastrefresh);
}  
 <button type="button" data-toggle="tooltip" onClick="CheckRefresh()" data-placement="bottom" class="btn-shadow mr-3 btn btn-dark">Refresh</button>  

Я уже ссылался на сообщение, связанное с этим, в StackOverflow.

Комментарии:

1. Для этого вам нужно какое-то постоянное хранилище. Вы можете сделать это с помощью файла cookie — если файл cookie не установлен ИЛИ время обновления в cookie> 24h: разрешить обновление

Ответ №1:

Это должно сработать, хотя я не смог его протестировать, поскольку вам не разрешено устанавливать cookie на стороннем веб-сайте.

 <!DOCTYPE html>
<html>

<head>
  <title>Page Title</title>
</head>

<body>
  <button id="refresh" type="button" data-toggle="tooltip" data-placement="bottom" class="btn-shadow mr-3 btn btn-dark">Refresh</button>

  <script>
    const setRefreshCookie = () => {
      const now = new Date();
      const tomorrow = new Date();
      /*
       * if you want the cookie to expire after 24 hours from the last click
       * on the refresh button, you use only 'tomorrow.setTime()' otherwise,
       * if you want the cookie to expire as soon as the date changes (even if
       * 24 hours have not passed yet) you use both 'tomorrow.setTime()' and
       * 'tomorrow.setHours()'
       */
      tomorrow.setTime(now.getTime()   1000 * 60 * 60 * 24);
      tomorrow.setHours(0, 0, 0, 0);

      document.cookie = 'preventRefesh=true;expires='   tomorrow.toUTCString()   'domain=yourdomain.tld;path=/path/to/page';
    };

    const checkRefreshCookie = () => {
      return document.cookie.split('; ').some(cookie => cookie.split('=')[0] === 'preventRefesh');
    };
    
    const refreshBtn = document.getElementById('refresh');
    const isRefreshCookieSet = checkRefreshCookie();

    document.addEventListener('load', () => {
      if (isRefreshCookieSet ) {
        /*
         * disable the button, so that the user has a visual feedback
         */
        refreshBtn.setAttribute('disabled', true);
      }
    });

    refreshBtn.addEventListener('click', (event) => {
      if (!isRefreshCookieSet ) {
        setRefreshCookie();
        // location.reload();
        console.log('refeshing the page...');
      }
      event.preventDefault();
      event.stopPropagation();
    });
  </script>
</body>

</html>  

Комментарии:

1. да, это работает нормально, но когда я обновляю кнопку обновления своего браузера, все начинается сначала, то есть кнопка обновления снова будет включена, есть ли какое-либо решение для этого. это было бы большим подспорьем.

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

3. @sreeshasudhev Вы не можете предотвратить собственное событие обновления.

4. @sreeshasudhev, вы можете переместить логику отключения кнопки страницы из события нажатия кнопки в событие загрузки документа (я обновил фрагмент для этого), но вы не можете — и не должны — запретить пользователю обновлять страницу с помощью кнопки панели инструментов браузера.

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