【问题标题】:Continue time when page refreshes - javascript页面刷新时的继续时间 - javascript
【发布时间】:2014-01-28 08:04:28
【问题描述】:

我遇到了这个问题,我不知道即使页面刷新,倒计时时间是否会继续,或者如果页面刷新,会有一个警告框说“你确定要离开页面吗?”如果确定它会重定向到另一个页面?

这是我的 ajax 倒计时脚本

 <script type="text/javascript">                          
window.onload = function()
{
    countDown('timeLimit', 'sample.html', 60); 
}

function countDown(elID, output, seconds)
{
     var elem = document.getElementById(elID),
         start = new Date().getTime(), end = start+seconds*1000,
         timer = setInterval(function() {

         var now = new Date().getTime(), timeleft = end-now, timeparts;

         if( timeleft < 0) {
             document.location.href = output;
             clearInterval(timer);
         }
         else {
             timeparts = [Math.floor(timeleft/60000),Math.floor(timeleft/1000)%60];
             if( timeparts[1] < 10) timeparts[1] = "0"+timeparts[1];
             elem.innerHTML = "Time left: "+timeparts[0]+":"+timeparts[1];

         }
     } ,250); // the lower this number, the more accurate the timer. 250 recommended 
  }
</script>

页面刷新时如何继续该时间或页面刷新时重定向到另一个页面?

请帮助..我是新的 javascript..:(

【问题讨论】:

  • “即使页面被刷新或重定向到另一个页面,如何继续该时间” - 对于在浏览器中运行的计数器来说不可能。
  • 您必须使用 cookie 或在服务器端执行倒计时。
  • +1 用于 cookie,在服务器端实现倒计时对我来说看起来很蹩脚,但这取决于问题,如果服务器端倒计时用完,还有很多工作要做来刷新客户端页面
  • cookies 是不错的选择,但如果您使用的是 HTML5 网络存储,则更好

标签: javascript jquery ajax


【解决方案1】:

如果您不需要将页面哈希用于其他目的,并且您只是在自己的站点中导航,您可以将计时器的时间放入window.location.hash(如果您只是重新加载页面),或者放入您要导航到的网址为myurl.com/somepage.html#yourtime。请记住,如果您使用的库需要此值、链接到异地,或者只是使用锚点,这将不起作用。

请参阅Change hash without reload in jQuery 了解如何操作此值。

您需要记住的是,Javascript 中没有“状态”,因此任何页面刷新都会导致您的所有脚本完全重新加载。这使得您需要将持久值“存储”在 cookie、localstorage(html5,并非在浏览器中一致实现)或服务器上(您将需要一种识别用户的方法,例如登录或为此工作的浏览器会话)。

此外,如果您确实选择使用这些方法中的任何一种,请记住同时存储当前时间。否则,用户返回页面后,您将没有上下文继续计数。

【讨论】:

    【解决方案2】:

    这需要使用 cookie 或某种服务器端脚本。您可以使用 cookie 来存储计数器值,并在页面加载/刷新时检查 cookie 是否存在。如果是这样,您将需要加载该值并让您的计数器从该值恢复。

    同样的核心概念也适用于服务器端脚本。无论您是将该值存储在数据库中,还是使用套接字在实时脚本中维护该值。

    【讨论】:

      【解决方案3】:

      简短的回答...不。您可以在刷新之前发送时间 2 服务器,但这不可靠(如果我 ctrl+alt+del 并终止浏览器进程,您会怎么做)?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-12
        • 1970-01-01
        • 2011-03-30
        • 2014-04-11
        • 2019-06-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-29
        相关资源
        最近更新 更多