Использование setInterval()
или setTimeout()
не будет работать, если пользователь перезапустит браузер или расширение будет перезапущено по любой причине. То же самое относится и к chrome.alarms
API.
Поскольку пользователь с большой вероятностью может запускать Chrome чаще, чем раз в день, я бы посоветовал вам сохранить метку времени в localStorage
, а затем используйте функцию setInterval()
, которая постоянно проверяет, была ли достигнута эта временная метка. Таким образом, даже если расширение или весь браузер перезапустится, вы все равно сможете определить, что прошел один день.
Примерно так:
function doSomething() {
// Code that needs to run every day here
}
function tick() {
// Re-calculate the timestamp for the next day
let next = new Date();
next.setDate(Date.now() + 1);
// Adjust the timestamp if you want to run the code
// always at the same time of the day (e.g. 10:00 am)
next.setHours(10);
next.setMinutes(0);
next.setSeconds(0);
next.setMilliseconds(0);
// Save the new timestamp
localStorage.savedTimestamp = next.getTime();
// Run the function
doSomething();
}
function checkTimestamp() {
if (!localStorage.savedTimestamp)
let timestamp = parseInt(localStorage.savedTimestamp);
if (Date.now() >= timestamp)
tick();
} else {
// First time running
tick();
}
}
// Check every minute
setInterval(checkTimestamp, 60000);