Descrição
Use a API chrome.alarms para programar a execução de código periodicamente ou em um horário especificado no futuro.
Permissões
alarmsPara usar a API chrome.alarms, declare a permissão "alarms" no manifesto:
{
"name": "My extension",
...
"permissions": [
"alarms"
],
...
}
Conceitos e uso
Para garantir um comportamento confiável, é útil entender como a API se comporta.
Suspensão do dispositivo
Os alarmes continuam sendo executados enquanto um dispositivo está suspenso. No entanto, um alarme não vai ativar um dispositivo. Quando o dispositivo é ativado, todos os alarmes perdidos são disparados. Os alarmes repetidos são disparados no máximo uma vez e, em seguida, são reprogramados usando o período especificado a partir do momento em que o dispositivo é ativado, sem considerar o tempo que já passou desde que o alarme foi originalmente definido para execução.
Persistência
É possível controlar a persistência de um alarme no momento da criação usando a persistAcrossSessions flag. Ela pode ser definida como true (persiste até que a extensão seja atualizada) ou false (limpa se a extensão for recarregada ou o navegador for reiniciado e sempre que a extensão for atualizada).
Outros navegadores e versões anteriores do Chrome
Essa propriedade não é compatível com outros navegadores (problema) ou em versões do Chrome anteriores à 150, em que o comportamento pode ser imprevisível. Consequentemente, é melhor garantir que alarmes importantes existam sempre que o service worker for iniciado. Exemplo:
async function checkAlarmState() {
const alarm = await chrome.alarms.get("my-alarm");
if (!alarm) {
await chrome.alarms.create("my-alarm", { periodInMinutes: 1 });
}
}
checkAlarmState();
Se o alarme for criado dinamicamente com base na ação do usuário, talvez seja necessário armazenar que um alarme foi criado em outro lugar para que você saiba como recriá-lo, se necessário.
Exemplos
Os exemplos a seguir mostram como usar e responder a um alarme. Para testar essa API, instale o exemplo da API Alarm do repositório chrome-extension-samples.
Definir um alarme
O exemplo a seguir define um alarme no service worker quando uma nova versão da extensão é instalada:
service-worker.js:
chrome.runtime.onInstalled.addListener(async ({ reason }) => {
// Create an alarm so we have something to look at in the demo
await chrome.alarms.create('demo-default-alarm', {
delayInMinutes: 1,
periodInMinutes: 1,
persistAcrossSessions: true
});
});
Responder a um alarme
O exemplo a seguir define o ícone da barra de ferramentas de ação com base no nome do alarme que foi disparado.
service-worker.js:
chrome.alarms.onAlarm.addListener((alarm) => {
chrome.action.setIcon({
path: getIconPath(alarm.name),
});
});
Tipos
Alarm
Propriedades
-
nome
string
Nome desse alarme.
-
periodInMinutes
número optional
Se não for nulo, o alarme será repetido e será disparado novamente em
periodInMinutesminutos. -
persistAcrossSessions
booleano
Chrome 150 e versões mais recentesIndica se o alarme deve persistir entre sessões (reinicializações do navegador).
-
scheduledTime
número
Horário em que esse alarme foi programado para ser disparado, em milissegundos após a época (por exemplo,
Date.now() + n). Por motivos de desempenho, o alarme pode ter sido atrasado por um período arbitrário além disso.
AlarmCreateInfo
Propriedades
-
delayInMinutes
número optional
Período de tempo em minutos após o qual o evento
onAlarmdeve ser disparado. -
nome
string optional
Chrome 152 e versões mais recentesNome desse alarme.
-
periodInMinutes
número optional
Se definido, o evento onAlarm será disparado a cada
periodInMinutesminutos após o evento inicial especificado porwhenoudelayInMinutes. Se não estiver definido, o alarme será disparado apenas uma vez. -
persistAcrossSessions
booleano optional
Chrome 150 e versões mais recentesIndica se o alarme deve persistir entre sessões (reinicializações do navegador). No Chrome, o padrão é "true" para corresponder ao comportamento histórico, mas defina isso explicitamente para maximizar a compatibilidade entre navegadores.
-
quando
número optional
Horário em que o alarme deve ser disparado, em milissegundos após a época (por exemplo,
Date.now() + n).
Métodos
clear()
chrome.alarms.clear(
name?: string,
): Promise<boolean>
Limpa o alarme com o nome especificado.
Parâmetros
-
nome
string optional
O nome do alarme a ser limpo. O padrão é a string vazia.
Retorna
-
Promise<boolean>
Chrome 91 e versões mais recentes
clearAll()
chrome.alarms.clearAll(): Promise<boolean>
Limpa todos os alarmes.
Retorna
-
Promise<boolean>
Chrome 91 e versões mais recentes
create()
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
): Promise<void>
Cria um alarme. Próximo ao horário especificado por alarmInfo, o evento onAlarm é disparado. Se houver outro alarme com o mesmo nome (ou nenhum nome, se nenhum for especificado), ele será cancelado e substituído por esse alarme.
Para reduzir a carga na máquina do usuário, o Chrome limita os alarmes a no máximo uma vez a cada 30 segundos, mas pode atrasá-los por um período arbitrário. Ou seja, definir delayInMinutes ou periodInMinutes como menor que 0.5 não será aceito e vai causar um aviso. when pode ser definido como menos de 30 segundos após "agora" sem aviso, mas não vai fazer com que o alarme seja disparado por pelo menos 30 segundos.
Para ajudar a depurar seu app ou extensão, quando você o carrega descompactado, não há limite para a frequência com que o alarme pode ser disparado.
Parâmetros
-
nome
string optional
Nome opcional para identificar esse alarme. O padrão é a string vazia.
-
alarmInfo
Descreve quando o alarme deve ser disparado. O horário inicial precisa ser especificado por
whenoudelayInMinutes(mas não ambos). SeperiodInMinutesestiver definido, o alarme será repetido a cadaperiodInMinutesminutos após o evento inicial. SewhenoudelayInMinutesnão estiver definido para um alarme repetido,periodInMinutesserá usado como padrão paradelayInMinutes.
Retorna
-
Promessa<void>
Chrome 111 e versões mais recentesPromessa que é resolvida quando o alarme é criado.
get()
chrome.alarms.get(
name?: string,
): Promise<Alarm | undefined>
Recupera detalhes sobre o alarme especificado.
Parâmetros
-
nome
string optional
O nome do alarme a ser mostrado. O padrão é a string vazia.
Retorna
-
Promessa<Alarme | indefinido>
Chrome 91 e versões mais recentes
Retorna
-
Promessa<Alarme[]>
Chrome 91 e versões mais recentes