'Chrome Extensions: how to set function to execute when day has changed
Currently with my Chrome Extension, I want to execute a block of code whenever a new day begins for a user (users may have different timezones). I was initially looking at this answer but seems pretty dated and was curious about using a Chrome API to help me out.
I was looking into chrome.events and chrome.alarms but found it difficult to read through and find what I wanted.
As of now my code looks like this
background.js
const newDayExecute = () => {
// Code block to execute on a new day
}
setInterval(newDayExecute, 86400000 ) // execute block of code every 24 hours
Solution 1:[1]
Using setInterval()
or setTimeout()
isn't going to work if the user re-starts the browsers or the extension gets restarted for any reason. The same goes for the chrome.alarms
API.
Since it's highly likely for a user to re-start Chrome more than once a day, I would suggest you to save a timestamp in localStorage
and then use a setInterval()
function that continuously checks if that timestamp has been reached. This way, even if the extension or the whole browser restarts you can still detect that one day has passed.
Something like this:
function doSomething() {
// Code that needs to run every day here
}
function tick() {
// Re-calculate the timestamp for the next day
let next = new Date(Date.now() + 24 * 60 * 60 * 1000);
// Adjust the timestamp if you want to run the code
// around the same time of each 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);
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |