Peristiwa di pekerja layanan

Pekerja layanan ekstensi mendukung peristiwa pekerja layanan standar dan banyak peristiwa di API ekstensi. Bagian ini menjelaskan apa yang tersedia dan memberikan tips untuk menggunakannya.

Mendeklarasikan peristiwa ekstensi

Pengendali peristiwa di pekerja layanan harus dideklarasikan dalam cakupan global, yang berarti harus berada di tingkat teratas skrip dan tidak disusun bertingkat di dalam fungsi. Hal ini memastikan bahwa peristiwa tersebut terdaftar secara sinkron pada eksekusi skrip awal, yang memungkinkan Chrome mengirim peristiwa ke pekerja layanan segera setelah dimulai. Contoh:

Tidak disarankan
chrome.storage.local.get(["badgeText"], ({ badgeText }) => {
  chrome.action.setBadgeText({ text: badgeText });
  chrome.action.onClicked.addListener(handleActionClick);
});

Lebih baik
chrome.action.onClicked.addListener(handleActionClick);

chrome.storage.local.get(["badgeText"], ({ badgeText }) => {
  chrome.action.setBadgeText({ text: badgeText });
});

Peristiwa umum

Pekerja layanan ekstensi mendukung peristiwa di API tertentu. Beberapa yang umum dijelaskan di bagian berikut. Perhatikan bahwa beberapa API ini memerlukan izin untuk digunakan dan API lainnya mungkin memiliki peristiwa, metode, atau properti yang tidak tersedia di semua versi Chrome. Untuk mengetahui detailnya, lihat dokumentasi API tertaut, terutama peristiwa, metode, atau properti yang ingin Anda gunakan.

chrome.action
Diaktifkan sebagai respons terhadap interaksi pengguna dengan ikon toolbar ekstensi Anda, baik tindakan tersebut untuk halaman (tab) tertentu maupun untuk seluruh ekstensi.
chrome.management
Memberikan peristiwa yang terkait dengan penginstalan, uninstal, pengaktifan, dan penonaktifan ekstensi.
chrome.notifications
Memberikan peristiwa yang terkait dengan interaksi pengguna dengan notifikasi sistem yang dihasilkan oleh ekstensi.
chrome.permissions
Menunjukkan kapan izin ekstensi diberikan atau dicabut oleh pengguna.
chrome.runtime
Memberikan peristiwa yang terkait dengan siklus proses ekstensi, pesan yang dikirim dari bagian lain ekstensi, dan notifikasi tentang ekstensi atau update Chrome yang tersedia.
chrome.storage.onChanged
Diaktifkan setiap kali objek StorageArea dihapus atau saat nilai kunci diubah atau ditetapkan. Perhatikan bahwa setiap instance StorageArea memiliki peristiwa onChanged-nya sendiri.
chrome.webNavigation
Memberikan informasi tentang status permintaan navigasi dalam penerbangan.

Filter

Untuk membatasi peristiwa ke kasus penggunaan tertentu, atau menghilangkan panggilan peristiwa yang tidak perlu, gunakan API yang mendukung filter peristiwa. Misalnya, pertimbangkan ekstensi yang memproses peristiwa tabs.onUpdated untuk mendeteksi saat pengguna membuka situs tertentu. Peristiwa ini akan dipanggil di setiap navigasi di setiap tab. Sebagai gantinya, gunakan webNavigation.onCompleted dengan filter. Contoh:

const filter = {
  url: [
    {
      urlMatches: 'https://www.google.com/',
    },
  ],
};

chrome.webNavigation.onCompleted.addListener(() => {
  console.info("The user has loaded my favorite website!");
}, filter);

Peristiwa pekerja layanan web

Pekerja layanan ekstensi mendukung lebih dari peristiwa siklus proses yang dijelaskan di tempat lain.

ServiceWorkerGlobal.fetch

Diaktifkan saat ada yang diambil dari paket ekstensi atau saat fetch() dan XMLHttpRequest() dipanggil dari skrip ekstensi atau pop-up. (Panggilan dari skrip konten tidak dicegat oleh pengendali fetch pekerja layanan.) Dalam kasus terakhir, Anda harus menambahkan URL halaman yang ingin diambil ke kunci "host_permissions" di manifest.json.

ServiceWorkerGlobal.message

Penerusan pesan pekerja layanan tersedia selain penerusan pesan ekstensi, tetapi kedua sistem tersebut tidak dapat dioperasikan secara bersama. Artinya, pesan yang dikirim menggunakan sendMessage() (yang tersedia dari beberapa API ekstensi) tidak dicegat oleh pengendali pesan pekerja layanan. Demikian pula, pesan yang dikirim menggunakan postMessage() tidak akan dicegat oleh pengendali pesan ekstensi. Kedua jenis pengendali pesan—yaitu ServiceWorkerGlobal.message dan chrome.runtime.onMessage—didukung di pekerja layanan ekstensi.

Sebaiknya pilih pesan ekstensi kecuali jika Anda memiliki alasan khusus untuk menggunakan pesan pekerja layanan.