我想在每个午夜自动将变量重置为0,而无需任何用户交互。如何在普通的Javascript中做到这一点?或者Chrome有什么默认的方法来做这件事。因为我把这个变量存储在Chrome.storage.local中。在vanilla JS或使用chrome apis中,最好的方法是什么?
xqk2d5yq1#
如果用户不访问该页面,则无法自动执行此操作。但是,您可以在页面中添加脚本,以便onload检查上次存储值的时间,如果时间过去了,您可以重置变量。粗略的代码来实现这个:
const isToday = (someDate) => { const today = new Date() return someDate.getDate() == today.getDate() && someDate.getMonth() == today.getMonth() && someDate.getFullYear() == today.getFullYear() } window.onload = function init() { const { value, date } = JSON.parse(localStorage.getValue('key')); if (!isToday(date)) { localStorage.setValue('key', JSON.stringify({ date: new Date(), value: defaultValue})) } }
ozxc1zmp2#
你说你把值存储在Chrome.storage.local中。同时存储你保存该值的日期/时间。当你加载它时,如果从那时起已经过了午夜,把值重置为零。如果该页已被打开一夜,要么总是从存储加载值,然后再使用它(即使您已经在JavaScript变量中有了它),或者在JavaScript级别做同样的事情(记住日期/时间并重置值)。虽然您可以设置计时器,但长时间闲置的页面会被现代浏览器降低计时器的优先级,所以用计时器来做可能不太可靠。
Chrome.storage.local
ulydmbyx3#
既然您说的是Chrome,我就假设您指的是浏览器,而您要重置的变量在客户端应用程序中(即在浏览器中)。您可以通过两种方式来执行此操作:1.仅使用客户端应用程序(即,没有服务器帮助)。1.使用服务器辅助(即,利用服务器辅助)。以下是对如何实施每一项的见解:1.没有服务器帮助:您可能希望实现例如reset_variable在setTimeout()和setInterval()的帮助下调度()函数。(),并将间隔调整为24小时。为了做到这一点,您必须实现一些算法来计算何时开始使用setTimeout()执行(即触发)setInterval()。1.在服务器帮助下:您可能希望在服务器上实现一个类似cron的作业。该作业可能看起来像发送一些预定义的值来重置浏览器上的变量。因此,您可以通过多种方式来实现它。最简单的方法是通过WebSocket。如果你想在服务器端的帮助下实现它,请解释(我的意见是,但它仍然取决于这里不清楚的上下文):1.浏览器/客户端:在浏览器上实现一个监听器,例如message event,每当你捕获一条消息时,如果它是预定义的值,则处理该消息以重置变量,然后someVar.reset()。1.服务器端:创建一个处理程序连接到客户端的WebSocket监听器-WebSocket在大多数编程语言中都支持-.实现一个类似cron的作业,在每个午夜执行一个函数。我不知道你是否有服务器,如果有,你使用的是哪种编程语言。但是,一个类似cron的作业可以用几种编程语言实现,基本上,它可以在类似Unix的操作系统上原生实现,如果你需要这方面的帮助,你可能想问另一个问题。函数应该使用WebSocket连接的处理程序发送一个预定义的值。注意,你可能想做一些安全验证。
3条答案
按热度按时间xqk2d5yq1#
如果用户不访问该页面,则无法自动执行此操作。
但是,您可以在页面中添加脚本,以便onload检查上次存储值的时间,如果时间过去了,您可以重置变量。
粗略的代码来实现这个:
ozxc1zmp2#
你说你把值存储在
Chrome.storage.local
中。同时存储你保存该值的日期/时间。当你加载它时,如果从那时起已经过了午夜,把值重置为零。如果该页已被打开一夜,要么总是从存储加载值,然后再使用它(即使您已经在JavaScript变量中有了它),或者在JavaScript级别做同样的事情(记住日期/时间并重置值)。虽然您可以设置计时器,但长时间闲置的页面会被现代浏览器降低计时器的优先级,所以用计时器来做可能不太可靠。
ulydmbyx3#
既然您说的是Chrome,我就假设您指的是浏览器,而您要重置的变量在客户端应用程序中(即在浏览器中)。
您可以通过两种方式来执行此操作:
1.仅使用客户端应用程序(即,没有服务器帮助)。
1.使用服务器辅助(即,利用服务器辅助)。
以下是对如何实施每一项的见解:
1.没有服务器帮助:您可能希望实现例如reset_variable在setTimeout()和setInterval()的帮助下调度()函数。(),并将间隔调整为24小时。为了做到这一点,您必须实现一些算法来计算何时开始使用setTimeout()执行(即触发)setInterval()。
1.在服务器帮助下:您可能希望在服务器上实现一个类似cron的作业。该作业可能看起来像发送一些预定义的值来重置浏览器上的变量。因此,您可以通过多种方式来实现它。最简单的方法是通过WebSocket。
如果你想在服务器端的帮助下实现它,请解释(我的意见是,但它仍然取决于这里不清楚的上下文):
1.浏览器/客户端:在浏览器上实现一个监听器,例如message event,每当你捕获一条消息时,如果它是预定义的值,则处理该消息以重置变量,然后someVar.reset()。
1.服务器端:创建一个处理程序连接到客户端的WebSocket监听器-WebSocket在大多数编程语言中都支持-.实现一个类似cron的作业,在每个午夜执行一个函数。我不知道你是否有服务器,如果有,你使用的是哪种编程语言。但是,一个类似cron的作业可以用几种编程语言实现,基本上,它可以在类似Unix的操作系统上原生实现,如果你需要这方面的帮助,你可能想问另一个问题。函数应该使用WebSocket连接的处理程序发送一个预定义的值。注意,你可能想做一些安全验证。