Deskripsi
Gunakan chrome.alarms
API untuk menjadwalkan kode agar berjalan secara berkala atau pada waktu yang ditentukan pada masa mendatang.
Izin
alarms
Untuk menggunakan chrome.alarms
API, deklarasikan izin "alarms"
dalam manifest:
{
"name": "My extension",
...
"permissions": [
"alarms"
],
...
}
Konsep dan penggunaan
Untuk memastikan perilaku yang andal, sebaiknya pahami perilaku API.
Mode tidur perangkat
Alarm akan terus berjalan saat perangkat sedang tidur. Namun, alarm tidak akan membangunkan perangkat. Saat perangkat aktif, alarm yang terlewat akan diaktifkan. Alarm berulang akan diaktifkan maksimal sekali, lalu dijadwalkan ulang menggunakan periode yang ditentukan mulai dari saat perangkat aktif, tanpa memperhitungkan waktu yang telah berlalu sejak alarm awalnya disetel untuk dijalankan.
Persistensi
Alarm biasanya tetap ada hingga ekstensi diupdate. Namun, hal ini tidak dijamin, dan alarm dapat dihapus saat browser dimulai ulang. Oleh karena itu, pertimbangkan untuk menetapkan nilai dalam penyimpanan saat alarm dibuat, lalu pastikan nilai tersebut ada setiap kali pekerja layanan Anda dimulai. Contoh:
const STORAGE_KEY = "user-preference-alarm-enabled";
async function checkAlarmState() {
const { alarmEnabled } = await chrome.storage.get(STORAGE_KEY);
if (alarmEnabled) {
const alarm = await chrome.alarms.get("my-alarm");
if (!alarm) {
await chrome.alarms.create({ periodInMinutes: 1 });
}
}
}
checkAlarmState();
Contoh
Contoh berikut menunjukkan cara menggunakan dan merespons alarm. Untuk mencoba API ini, instal contoh Alarm API dari repositori chrome-extension-samples.
Setel alarm
Contoh berikut menetapkan alarm di pekerja layanan saat ekstensi diinstal:
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 demo
await chrome.alarms.create('demo-default-alarm', {
delayInMinutes: 1,
periodInMinutes: 1
});
});
Merespons alarm
Contoh berikut menetapkan ikon toolbar tindakan berdasarkan nama alarm yang berbunyi.
service-worker.js:
chrome.alarms.onAlarm.addListener((alarm) => {
chrome.action.setIcon({
path: getIconPath(alarm.name),
});
});
Jenis
Alarm
Properti
-
nama
string
Nama alarm ini.
-
periodInMinutes
number opsional
Jika bukan null, alarm adalah alarm berulang dan akan diaktifkan lagi dalam
periodInMinutes
menit. -
scheduledTime
angka
Waktu saat alarm ini dijadwalkan untuk diaktifkan, dalam milidetik setelah epoch (misalnya,
Date.now() + n
). Untuk alasan performa, alarm mungkin telah tertunda dalam jumlah arbitrer setelah ini.
AlarmCreateInfo
Properti
-
delayInMinutes
number opsional
Durasi waktu dalam menit setelah peristiwa
onAlarm
diaktifkan. -
periodInMinutes
number opsional
Jika ditetapkan, peristiwa onAlarm akan diaktifkan setiap
periodInMinutes
menit setelah peristiwa awal yang ditentukan olehwhen
ataudelayInMinutes
. Jika tidak ditetapkan, alarm hanya akan aktif satu kali. -
kapan
number opsional
Waktu saat alarm harus diaktifkan, dalam milidetik setelah epoch (misalnya,
Date.now() + n
).
Metode
clear()
chrome.alarms.clear(
name?: string,
callback?: function,
)
Menghapus alarm dengan nama yang diberikan.
Parameter
-
nama
string opsional
Nama alarm yang akan dihapus. Defaultnya adalah string kosong.
-
callback
fungsi opsional
Parameter
callback
terlihat seperti:(wasCleared: boolean) => void
-
wasCleared
boolean
-
Hasil
-
Promise<boolean>
Chrome 91+Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
clearAll()
chrome.alarms.clearAll(
callback?: function,
)
Menghapus semua alarm.
Parameter
-
callback
fungsi opsional
Parameter
callback
terlihat seperti:(wasCleared: boolean) => void
-
wasCleared
boolean
-
Hasil
-
Promise<boolean>
Chrome 91+Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
create()
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
callback?: function,
)
Membuat alarm. Di dekat waktu yang ditentukan oleh alarmInfo
, peristiwa onAlarm
akan diaktifkan. Jika ada alarm lain dengan nama yang sama (atau tanpa nama jika tidak ada yang ditentukan), alarm tersebut akan dibatalkan dan diganti dengan alarm ini.
Untuk mengurangi beban pada komputer pengguna, Chrome membatasi alarm maksimal sekali setiap 30 detik, tetapi dapat menundanya lebih lama dengan jumlah yang tidak ditentukan. Artinya, menetapkan delayInMinutes
atau periodInMinutes
ke kurang dari 0.5
tidak akan dihormati dan akan menyebabkan peringatan. when
dapat disetel ke kurang dari 30 detik setelah "now" tanpa peringatan, tetapi tidak akan benar-benar menyebabkan alarm diaktifkan selama minimal 30 detik.
Untuk membantu Anda men-debug aplikasi atau ekstensi, saat Anda memuat aplikasi atau ekstensi yang tidak di-unzip, tidak ada batasan seberapa sering alarm dapat diaktifkan.
Parameter
-
nama
string opsional
Nama opsional untuk mengidentifikasi alarm ini. Defaultnya adalah string kosong.
-
alarmInfo
Menjelaskan kapan alarm harus diaktifkan. Waktu awal harus ditentukan oleh
when
ataudelayInMinutes
(tetapi tidak keduanya). JikaperiodInMinutes
disetel, alarm akan berulang setiapperiodInMinutes
menit setelah peristiwa awal. Jikawhen
ataudelayInMinutes
tidak ditetapkan untuk alarm berulang,periodInMinutes
akan digunakan sebagai default untukdelayInMinutes
. -
callback
fungsi opsional
Chrome 111+Parameter
callback
terlihat seperti:() => void
Hasil
-
Promise<void>
Chrome 111+Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
get()
chrome.alarms.get(
name?: string,
callback?: function,
)
Mengambil detail tentang alarm yang ditentukan.
Parameter
Hasil
-
Promise<Alarm | undefined>
Chrome 91+Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
getAll()
chrome.alarms.getAll(
callback?: function,
)
Mendapatkan array semua alarm.
Parameter
Hasil
-
Promise<Alarm[]>
Chrome 91+Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.