Service worker ekstensi mendukung peristiwa service worker standar dan banyak peristiwa di API ekstensi. Bagian ini menjelaskan fitur yang tersedia dan memberikan tips untuk menggunakannya.
Mendeklarasikan peristiwa ekstensi
Handler peristiwa di pekerja layanan harus dideklarasikan dalam cakupan global, yang berarti harus berada di tingkat teratas skrip dan tidak disarangkan di dalam fungsi. Hal ini memastikan bahwa service worker didaftarkan secara serentak pada eksekusi skrip awal, yang memungkinkan Chrome mengirimkan peristiwa ke service worker segera setelah dimulai. Contoh:
browser.storage.local.get(["badgeText"], ({ badgeText }) => { browser.action.setBadgeText({ text: badgeText }); browser.action.onClicked.addListener(handleActionClick); });
browser.action.onClicked.addListener(handleActionClick); browser.storage.local.get(["badgeText"], ({ badgeText }) => { browser.action.setBadgeText({ text: badgeText }); });
Peristiwa umum
Pekerja layanan ekstensi mendukung peristiwa di API tertentu. Beberapa di antaranya 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 yang ditautkan, terutama peristiwa, metode, atau properti yang ingin Anda gunakan.
browser.action- Dipicu sebagai respons terhadap interaksi pengguna dengan ikon toolbar ekstensi Anda, baik tindakan tersebut untuk halaman (tab) tertentu atau untuk seluruh ekstensi.
browser.management- Menyediakan peristiwa terkait penginstalan, peng-uninstalan, pengaktifan, dan penonaktifan ekstensi.
browser.notifications- Menyediakan peristiwa yang terkait dengan interaksi pengguna dengan notifikasi sistem yang dihasilkan oleh ekstensi.
browser.permissions- Menunjukkan kapan izin ekstensi diberikan atau dicabut oleh pengguna.
browser.runtime- Menyediakan peristiwa terkait siklus proses ekstensi, pesan yang dikirim dari bagian lain ekstensi, dan notifikasi tentang ekstensi atau update Chrome yang tersedia.
browser.storage.onChanged- Dipicu setiap kali objek
StorageAreadihapus atau saat nilai kunci diubah atau ditetapkan. Perhatikan bahwa setiap instanceStorageAreamemiliki peristiwaonChanged-nya sendiri. browser.webNavigation- Memberikan informasi tentang status permintaan navigasi dalam penerbangan.
Filter
Untuk membatasi peristiwa pada 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/',
},
],
};
browser.webNavigation.onCompleted.addListener(() => {
console.info("The user has loaded my favorite website!");
}, filter);
Peristiwa service worker
Service worker ekstensi mendukung lebih dari sekadar 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 handler fetch service worker.) Dalam kasus terakhir, Anda harus menambahkan URL halaman yang ingin Anda ambil ke kunci "host_permissions" di manifest.json.
ServiceWorkerGlobal.message
Penerusan pesan service worker tersedia selain penerusan pesan ekstensi, tetapi kedua sistem tersebut tidak dapat beroperasi bersama. Artinya, pesan yang dikirim menggunakan sendMessage() (yang tersedia dari beberapa API ekstensi) tidak dicegat oleh pengendali pesan service worker. Demikian pula, pesan yang dikirim menggunakan postMessage() tidak dicegat oleh pengendali pesan ekstensi. Kedua jenis pengendali pesan—yaitu ServiceWorkerGlobal.message dan browser.runtime.onMessage—didukung di pekerja layanan ekstensi.
Anda sebaiknya menggunakan pesan ekstensi kecuali jika Anda memiliki alasan khusus untuk menggunakan pesan service worker.