mirror of
https://github.com/GoogleChrome/chrome-extensions-samples.git
synced 2026-03-27 13:29:34 +07:00
[SW-tutorial] Refactor alarms API logic (sw-tips.js) (#865)
* [SW-tutorial] Refactor alarms API logic After doing some experiments (like closing all my browser windows which I never, EVER do...) I realized the tips logic was not working as expected, because [alarms do not persist across browser sessions[(https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/alarms#:~:text=Alarms%20do%20not%20persist%20across%20browser%20sessions.) * Return storage set * Tech review
This commit is contained in:
@@ -5,16 +5,25 @@ const updateTip = async () => {
|
||||
const response = await fetch('https://extension-tips.glitch.me/tips.json');
|
||||
const tips = await response.json();
|
||||
const randomIndex = Math.floor(Math.random() * tips.length);
|
||||
await chrome.storage.local.set({ tip: tips[randomIndex] });
|
||||
return chrome.storage.local.set({ tip: tips[randomIndex] });
|
||||
};
|
||||
|
||||
// Create a daily alarm and retrieves the first tip when extension is installed.
|
||||
chrome.runtime.onInstalled.addListener(({ reason }) => {
|
||||
if (reason === 'install') {
|
||||
chrome.alarms.create({ delayInMinutes: 1, periodInMinutes: 1440 });
|
||||
const ALARM_NAME = 'tip';
|
||||
|
||||
// Check if alarm exists to avoid resetting the timer.
|
||||
// The alarm might be removed when the browser session restarts.
|
||||
async function createAlarm() {
|
||||
const alarm = await chrome.alarms.get(ALARM_NAME);
|
||||
if (typeof alarm === 'undefined') {
|
||||
chrome.alarms.create(ALARM_NAME, {
|
||||
delayInMinutes: 1,
|
||||
periodInMinutes: 1440
|
||||
});
|
||||
updateTip();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
createAlarm();
|
||||
|
||||
// Retrieve tip of the day
|
||||
chrome.alarms.onAlarm.addListener(updateTip);
|
||||
|
||||
Reference in New Issue
Block a user