browser.alarms

Deskripsi

Gunakan chrome.alarms API untuk menjadwalkan kode agar berjalan secara berkala atau pada waktu yang ditentukan di masa mendatang.

Izin

alarms

Untuk menggunakan browser.alarms API, deklarasikan izin "alarms" dalam manifes:

{
  "name": "My extension",
  ...
  "permissions": [
    "alarms"
  ],
  ...
}

Konsep dan penggunaan

Untuk memastikan perilaku yang andal, sebaiknya pahami cara kerja API.

Mode tidur perangkat

Alarm akan terus berjalan saat perangkat dalam mode tidur. Namun, alarm tidak akan membangunkan perangkat. Saat perangkat aktif, alarm yang terlewat akan berbunyi. 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 berjalan.

Persistensi

Anda dapat mengontrol persistensi alarm pada waktu pembuatan menggunakan flag persistAcrossSessions. Nilai ini dapat ditetapkan ke true (tetap ada hingga ekstensi diupdate) atau false (dihapus jika ekstensi dimuat ulang atau browser dimulai ulang, dan setiap kali ekstensi diupdate).

Browser lain dan Chrome versi lama

Properti ini tidak didukung di browser lain (masalah) atau di versi Chrome sebelum Chrome 150, yang perilakunya tidak dapat diprediksi. Oleh karena itu, sebaiknya pastikan alarm penting ada setiap kali pekerja layanan Anda dimulai. Contoh:

async function checkAlarmState() {
  const alarm = await browser.alarms.get("my-alarm");

  if (!alarm) {
    await browser.alarms.create("my-alarm", { periodInMinutes: 1 });
  }
}

checkAlarmState();

Jika alarm dibuat secara dinamis berdasarkan tindakan pengguna, Anda mungkin ingin menyimpan alarm yang dibuat di tempat lain sehingga Anda tahu cara membuatnya kembali jika diperlukan.

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 menyetel alarm di pekerja layanan saat versi baru ekstensi diinstal:

service-worker.js:

browser.runtime.onInstalled.addListener(async ({ reason }) => {
  // Create an alarm so we have something to look at in the demo
  await browser.alarms.create('demo-default-alarm', {
    delayInMinutes: 1,
    periodInMinutes: 1,
    persistAcrossSessions: true
  });
});

Merespons alarm

Contoh berikut menetapkan ikon toolbar tindakan berdasarkan nama alarm yang berbunyi.

service-worker.js:

browser.alarms.onAlarm.addListener((alarm) => {
  browser.action.setIcon({
    path: getIconPath(alarm.name),
  });
});

Jenis

Alarm

Properti

  • nama

    string

    Nama alarm ini.

  • periodInMinutes

    number opsional

    Jika tidak null, alarm adalah alarm berulang dan akan berbunyi lagi dalam periodInMinutes menit.

  • persistAcrossSessions

    boolean

    Chrome 150+

    Apakah alarm harus tetap ada di seluruh sesi (mulai ulang browser).

  • scheduledTime

    angka

    Waktu alarm ini dijadwalkan untuk berbunyi, dalam milidetik setelah epoch (misalnya, Date.now() + n). Untuk alasan performa, alarm mungkin telah tertunda dalam jumlah arbitrer di luar waktu ini.

AlarmCreateInfo

Properti

  • delayInMinutes

    number opsional

    Durasi waktu dalam menit setelah peristiwa onAlarm diaktifkan.

  • nama

    string opsional

    Chrome 152+

    Nama alarm ini.

  • periodInMinutes

    number opsional

    Jika ditetapkan, peristiwa onAlarm akan diaktifkan setiap periodInMinutes menit setelah peristiwa awal yang ditentukan oleh when atau delayInMinutes. Jika tidak disetel, alarm hanya akan diaktifkan sekali.

  • persistAcrossSessions

    boolean opsional

    Chrome 150+

    Apakah alarm harus tetap ada di seluruh sesi (mulai ulang browser). Di Chrome, nilai defaultnya adalah benar (true) agar sesuai dengan perilaku historis, tetapi Anda harus menetapkannya secara eksplisit untuk memaksimalkan kompatibilitas di seluruh browser.

  • kapan

    number opsional

    Waktu saat alarm harus berbunyi, dalam milidetik setelah epoch (misalnya, Date.now() + n).

Metode

clear()

chrome.alarms.clear(
  name?: string,
)
: Promise<boolean>

Menghapus alarm dengan nama yang diberikan.

Parameter

  • nama

    string opsional

    Nama alarm yang akan dihapus. Default-nya adalah string kosong.

Hasil

  • Promise<boolean>

    Chrome 91+

clearAll()

chrome.alarms.clearAll(): Promise<boolean | undefined>

Menghapus semua alarm.

Hasil

  • Promise<boolean | undefined>

    Chrome 91+

create()

chrome.alarms.create(
  name?: string,
  alarmInfo: AlarmCreateInfo,
)
: Promise<void>

Membuat alarm. Mendekati waktu yang ditentukan oleh alarmInfo, peristiwa onAlarm akan diaktifkan. Jika ada alarm lain dengan nama yang sama (atau tanpa nama jika tidak ditentukan), alarm tersebut akan dibatalkan dan diganti dengan alarm ini.

Untuk mengurangi beban pada perangkat pengguna, Chrome membatasi alarm maksimal sekali setiap detik, tetapi dapat menundanya dalam jumlah yang tidak ditentukan. Artinya, menetapkan delayInMinutes atau periodInMinutes ke kurang dari 1 detik tidak akan dihormati dan akan menyebabkan peringatan. when dapat disetel ke kurang dari 1 detik setelah "sekarang" tanpa peringatan, tetapi tidak akan menyebabkan alarm berbunyi setidaknya selama 1 detik.

Parameter

  • nama

    string opsional

    Nama opsional untuk mengidentifikasi alarm ini. Default-nya adalah string kosong.

  • alarmInfo

    Menjelaskan kapan alarm harus diaktifkan. Waktu awal harus ditentukan oleh when atau delayInMinutes (tetapi tidak keduanya). Jika periodInMinutes disetel, alarm akan berulang setiap periodInMinutes menit setelah peristiwa awal. Jika when atau delayInMinutes tidak ditetapkan untuk alarm berulang, periodInMinutes akan digunakan sebagai default untuk delayInMinutes.

Hasil

  • Promise<void>

    Chrome 111+

    Promise yang di-resolve saat alarm telah dibuat.

get()

chrome.alarms.get(
  name?: string,
)
: Promise<Alarm | undefined>

Mengambil detail tentang alarm yang ditentukan.

Parameter

  • nama

    string opsional

    Nama alarm yang akan didapatkan. Default-nya adalah string kosong.

Hasil

  • Promise<Alarm | undefined>

    Chrome 91+

getAll()

chrome.alarms.getAll(): Promise<Alarm[]>

Mendapatkan array dari semua alarm.

Hasil

  • Promise<Alarm[]>

    Chrome 91+

Acara

onAlarm

chrome.alarms.onAlarm.addListener(
  callback: function,
)

Diaktifkan saat alarm telah berlalu. Berguna untuk halaman acara.

Parameter

  • callback

    fungsi

    Parameter callback terlihat seperti:

    (alarm: Alarm) => void