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:
chrome.storage.local.get(["badgeText"], ({ badgeText }) => { chrome.action.setBadgeText({ text: badgeText }); chrome.action.onClicked.addListener(handleActionClick); });
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 instanceStorageArea
memiliki peristiwaonChanged
-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.