即使窗口关闭,是否可以让javascript计时器继续运行? 我可以用localstorage以某种方式保存这些东西吗?
有人可以解释我会怎么做吗?
例如:
当有人按下我网站上的按钮时,我想将此按钮禁用一小时。
setTimeOut(func, 1000 * 60 * 60);
现在,当我离开页面时,计时器当然会停止。但是,如果有人离开实际页面,我希望它继续滴答。
答案 0 :(得分:1)
在用户按下localStorage中的按钮时存储时间戳(+ new Date或Date.now)。在页面加载时立即读取它,如果Date.now() - timestampInLocalStorage为正,则setTimeout(enableButton,delta),否则立即启用。
请注意,用户当然可以修改当地时间来绕过这种保护。
答案 1 :(得分:0)
取决于您尝试做什么,即使在关闭标签后,也可以执行任务的新 Service Worker API 。可以说浏览器支持仅适用于现代浏览器。
请注意,在用户关闭标签后运行代码通常会破坏与用户的合同。 "当我关闭标签时,我不想再与您进行任何交互",因此请确保在尝试注册服务工作者之前将其传达给用户。
答案 2 :(得分:0)
要补充马达拉所说的答案,因为我还不能发表评论。
有些浏览器会允许您通过Service Work API执行此操作,但有些浏览器会在标签处于休眠状态时(例如Chrome)开始“休眠”。在短时间离开后,Chrome会将非活动标签置于睡眠状态。所以即使你在他们离开之前启动一个计数器然后以某种方式检测到他们离开计数器将是不准确的。因此,在没有诉诸黑客的情况下,很难让它在所有浏览器中运行。
所以这似乎是合理的......但你真的不应该这样做。你会花太多时间找工作。现实情况是,防止这种情况符合用户的最佳利益,因此您将自己与浏览器作斗争。