如何使定时器保持滴答时,窗口关闭

How to make a timer keep on ticking when window is closed

本文关键字:窗口 滴答 何使 定时器      更新时间:2023-09-26

是否有可能有一个javascript定时器继续前进,即使当窗口关闭?我能用localstorage保存这些东西吗?

谁能解释一下我该怎么做?

例如:

当有人在我的网站上点击一个按钮时,我想让这个按钮禁用一个小时。

setTimeOut(func, 1000 * 60 * 60);

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

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

请注意,用户当然可以修改本地时间来绕过此保护。

取决于你想做什么,有新的Service Worker API可以在选项卡关闭后执行任务。我只想说,浏览器只支持现代浏览器。

注意,在用户关闭选项卡之后运行代码通常会破坏你与用户之间的契约。"当我关闭选项卡时,我不想再与您进行任何交互",所以在尝试注册service worker之前,请确保将此信息传达给用户。

我要补充Madara所说的作为回答,因为我还不能评论。

一些浏览器会让你通过Service Work API来做这件事,但是当标签进入休眠状态时,一些浏览器已经开始"休眠"了,比如Chrome。Chrome会让一个不活跃的标签页在离开一小段时间后进入睡眠状态。所以即使你在他们离开前开始计数然后不知何故检测到他们离开了计数也不会准确。正因为如此,要让它在所有浏览器上工作而不诉诸黑客是非常困难的。

所以这是合理的…但你真的不应该这么做。你会花很多时间找工作。现实情况是,防止这种情况发生符合用户的最大利益,因此您将与浏览器本身作斗争。