chrome.alarms

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 oleh when atau delayInMinutes. 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()

Promise
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()

Promise
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()

Promise
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 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.

  • 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()

Promise
chrome.alarms.get(
  name?: string,
  callback?: function,
)

Mengambil detail tentang alarm yang ditentukan.

Parameter

  • nama

    string opsional

    Nama alarm yang akan didapatkan. Defaultnya adalah string kosong.

  • callback

    fungsi opsional

    Parameter callback terlihat seperti:

    (alarm?: Alarm) => void

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()

Promise
chrome.alarms.getAll(
  callback?: function,
)

Mendapatkan array semua alarm.

Parameter

  • callback

    fungsi opsional

    Parameter callback terlihat seperti:

    (alarms: Alarm[]) => void

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.

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