2016-07-01 44 views
-1

即使窗口关闭,是否可以继续使用JavaScript计时器? 我可以用本地存储以某种方式保存这些东西吗?如何在窗口关闭时使计时器保持打勾状态

任何人都可以请解释我将如何做到这一点?

例如:

当有人推我的网站上一个按钮,我想使这个按钮,一个小时关闭。

setTimeOut(func, 1000 * 60 * 60); 

现在,当我离开页面时,计时器当然会停止。但是,如果有人离开实际页面,我希望它继续滴答滴答。

+1

这没有多大意义,这样解释。你想达到什么目的? – AlexG

+0

您可以使用'localStorage'在每次更新时保存计时器的当前值,然后在下一次重新打开页面时读取该值,并根据当前时间进行一些调整。但是当页面关闭的时候,你不能继续更新 - 关闭页面/窗口后,用户可能会退出浏览器,或者关闭他们的电脑,或者... – nnnnnn

回答

0

取决于你想要做什么,有新的Service Worker API即使在关闭标签后仍然可以执行任务。只需说浏览器支持仅适用于现代浏览器。

请注意,在用户关闭标签后运行代码通常会破坏与用户的合同。 “当我关闭标签页时,我不想再与你进行任何交互”,因此在尝试注册服务工作者之前,请确保将其传达给用户。

1

当用户在localStorage中按下按钮时,存储时间戳(+ new Date或Date.now)。在页面加载时立即阅读它,如果Date.now() - timestampInLocalStorage为正值,则立即setTimeout(enableButton,delta)else enableButton。

请注意,用户可以修补当地时间绕过这种保护当然。

+0

好的我会研究一下这个。谢谢 – user3683991

0

去追加马达拉所说的答案,因为我还不能评论。

有些浏览器会让你通过Service Work API执行此操作,但是有一些浏览器在Chrome等休眠选项卡处于休眠状态时已开始“休眠”。 Chrome在一小段时间外放置一个非活动标签进入休眠状态。所以即使你在他们离开前启动一个计数器,然后以某种方式检测到他们离开计数器也不准确。正因为如此,如果不通过黑客行为就很难在所有浏览器上都能正常工作。

所以这是合理的......但你真的不应该这样做。你会花太多时间寻找解决方法。现实情况是,为了防止这种情况符合用户的最佳利益,所以您将自己与浏览器对抗。

相关问题