chrome.alarms.create()
will fail. When using a callback, chrome.runtime.lastError
will be set. When using promises, the promise will be rejected.Use the chrome.alarms
API to schedule code to run periodically or at a specified time in the future.
alarms
To use the chrome.alarms
API, declare the "alarms"
permission in the manifest:
{"name":"My extension",..."permissions":["alarms"],...}
To ensure reliable behavior, it is helpful to understand how the API behaves.
Alarms continue to run while a device is sleeping. However, an alarm will not wake up a device. When the device wakes up, any missed alarms will fire. Repeating alarms will fire at most once and then be rescheduled using the specified period starting from when the device wakes, not taking into account any time that has already elapsed since the alarm was originally set to run.
Alarms generally persist until an extension is updated. However, this is not guaranteed, and alarms may be cleared when the browser is restarted. Consequently, consider setting a value in storage when an alarm is created, and then ensure it exists each time your service worker starts up. For example:
constSTORAGE_KEY="user-preference-alarm-enabled";asyncfunctioncheckAlarmState(){const{alarmEnabled}=awaitchrome.storage.get(STORAGE_KEY);if(alarmEnabled){constalarm=awaitchrome.alarms.get("my-alarm");if(!alarm){awaitchrome.alarms.create({periodInMinutes:1});}}}checkAlarmState();
The following examples show how to use and respond to an alarm. To try this API, install the Alarm API example from the chrome-extension-samples repository.
The following example sets an alarm in the service worker when the extension is installed:
service-worker.js:
chrome.runtime.onInstalled.addListener(async({reason})=>{if(reason!=='install'){return;}// Create an alarm so we have something to look at in the demoawaitchrome.alarms.create('demo-default-alarm',{delayInMinutes:1,periodInMinutes:1});});
The following example sets the action toolbar icon based on the name of the alarm that went off.
service-worker.js:
chrome.alarms.onAlarm.addListener((alarm)=>{chrome.action.setIcon({path:getIconPath(alarm.name),});});
string
Name of this alarm.
number optional
If not null, the alarm is a repeating alarm and will fire again in periodInMinutes
minutes.
number
Time at which this alarm was scheduled to fire, in milliseconds past the epoch (e.g. Date.now() + n
). For performance reasons, the alarm may have been delayed an arbitrary amount beyond this.
number optional
Length of time in minutes after which the onAlarm
event should fire.
number optional
If set, the onAlarm event should fire every periodInMinutes
minutes after the initial event specified by when
or delayInMinutes
. If not set, the alarm will only fire once.
number optional
Time at which the alarm should fire, in milliseconds past the epoch (e.g. Date.now() + n
).
chrome.alarms.clear(
name?: string,
callback?: function,
)
Clears the alarm with the given name.
string optional
The name of the alarm to clear. Defaults to the empty string.
function optional
The callback
parameter looks like: (wasCleared: boolean) => void
boolean
Promise<boolean>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.alarms.clearAll(
callback?: function,
)
Clears all alarms.
function optional
The callback
parameter looks like: (wasCleared: boolean) => void
boolean
Promise<boolean>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
callback?: function,
)
Creates an alarm. Near the time(s) specified by alarmInfo
, the onAlarm
event is fired. If there is another alarm with the same name (or no name if none is specified), it will be cancelled and replaced by this alarm.
In order to reduce the load on the user's machine, Chrome limits alarms to at most once every 30 seconds but may delay them an arbitrary amount more. That is, setting delayInMinutes
or periodInMinutes
to less than 0.5
will not be honored and will cause a warning. when
can be set to less than 30 seconds after "now" without warning but won't actually cause the alarm to fire for at least 30 seconds.
To help you debug your app or extension, when you've loaded it unpacked, there's no limit to how often the alarm can fire.
string optional
Optional name to identify this alarm. Defaults to the empty string.
Describes when the alarm should fire. The initial time must be specified by either when
or delayInMinutes
(but not both). If periodInMinutes
is set, the alarm will repeat every periodInMinutes
minutes after the initial event. If neither when
or delayInMinutes
is set for a repeating alarm, periodInMinutes
is used as the default for delayInMinutes
.
function optional
The callback
parameter looks like: () => void
Promise<void>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.alarms.get(
name?: string,
callback?: function,
)
Retrieves details about the specified alarm.
Promise<Alarm | undefined>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.alarms.getAll(
callback?: function,
)
Gets an array of all the alarms.
Promise<Alarm[]>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2024-05-24 UTC.