Pekerja layanan ekstensi merespons peristiwa pekerja layanan standar dan peristiwa di namespace ekstensi. Keduanya ditampilkan bersama karena sering kali satu jenis mengikuti jenis lainnya selama penggunaan ekstensi.
Penginstalan
Penginstalan terjadi saat pengguna menginstal atau mengupdate pekerja layanan dari Chrome Web Store atau saat mereka memuat atau mengupdate ekstensi yang diekstrak menggunakan halaman chrome://extensions
. Tiga peristiwa terjadi dalam urutan di bawah ini.
ServiceWorkerRegistration.install
Peristiwa pertama yang diaktifkan selama penginstalan adalah peristiwa install pekerja layanan web.
chrome.runtime.onInstalled
Berikutnya adalah peristiwa onInstalled
ekstensi, yang diaktifkan saat ekstensi (bukan pekerja layanan) pertama kali diinstal, saat ekstensi diupdate ke versi baru, dan saat Chrome diupdate ke versi baru. Gunakan peristiwa ini untuk menetapkan status atau untuk inisialisasi satu kali, seperti menu konteks.
chrome.runtime.onInstalled.addListener((details) => {
if(details.reason !== "install" && details.reason !== "update") return;
chrome.contextMenus.create({
"id": "sampleContextMenu",
"title": "Sample Context Menu",
"contexts": ["selection"]
});
});
ServiceWorkerRegistration.active
Terakhir, peristiwa activate pekerja layanan diaktifkan. Perhatikan bahwa tidak seperti pekerja layanan web, peristiwa ini diaktifkan segera setelah penginstalan ekstensi karena tidak ada yang sebanding dengan pemuatan ulang halaman di ekstensi.
Proses mulai ekstensi
Saat profil pengguna dimulai, peristiwa chrome.runtime.onStartup
akan diaktifkan, tetapi tidak ada peristiwa pekerja layanan yang dipanggil.
Tidak ada aktivitas dan penonaktifan
Biasanya, Chrome menghentikan pekerja layanan saat salah satu kondisi berikut terpenuhi:
- Setelah 30 detik tidak aktif. Menerima peristiwa atau memanggil API ekstensi akan mereset timer ini.
- Saat satu permintaan, seperti peristiwa atau panggilan API, memerlukan waktu lebih dari 5 menit untuk diproses.
- Jika respons
fetch()
memerlukan waktu lebih dari 30 detik untuk diterima.
Peristiwa dan panggilan ke API ekstensi akan mereset timer ini, dan jika pekerja layanan tidak aktif, peristiwa yang masuk akan mengaktifkannya kembali. Namun, Anda harus mendesain pekerja layanan agar tahan terhadap penghentian yang tidak terduga.
Untuk mengoptimalkan konsumsi resource ekstensi, hindari mempertahankan pekerja layanan Anda tanpa batas waktu jika memungkinkan. Uji ekstensi Anda untuk memastikan bahwa Anda tidak melakukannya secara tidak sengaja.
Mempertahankan data, bukan menggunakan variabel global
Semua variabel global yang Anda tetapkan akan hilang jika pekerja layanan dinonaktifkan. Simpan nilai ke penyimpanan, bukan menggunakan variabel global. Opsi Anda tercantum di bawah. Perhatikan bahwa Web Storage API tidak tersedia untuk pekerja layanan ekstensi.
- API chrome.storage
- API ekstensi yang menawarkan beberapa jenis penyimpanan; lokal, sesi, terkelola (domain), dan sinkronisasi. API ini menyimpan objek JSON yang diidentifikasi dan diambil dengan kunci yang ditentukan developer. Jenis penyimpanan ini tidak akan dihapus saat pengguna menghapus cache web.
- IndexedDB API
- API tingkat rendah untuk penyimpanan data terstruktur sisi klien, termasuk file dan blob. API ini menyediakan primitif untuk membuat penyimpanan dan pengambilan data transaksional. Meskipun API ini sering kali terlalu rumit untuk kasus penggunaan sederhana, sejumlah solusi penyimpanan pihak ketiga dibuat berdasarkan API ini.
- CacheStorage API
- Mekanisme penyimpanan persisten untuk pasangan objek Permintaan dan Respons. API ini dirancang khusus untuk pekerja layanan web dan digunakan untuk mengambil data dari endpoint. Ada berbagai cara untuk menggunakan API ini, bergantung pada apakah dan seberapa penting pengguna melihat data terbaru. Untuk mengetahui informasi selengkapnya, lihat Buku Resep Offline. Kecuali jika Anda secara khusus melakukan proxy permintaan jaringan melalui pengendali pengambilan, Anda harus menggunakan
chrome.storage
.
Memilih versi Chrome minimum
Sejak rilis Manifes V3, kami telah melakukan beberapa peningkatan pada masa aktif pekerja layanan. Artinya, jika ekstensi Manifes V3 Anda mendukung versi Chrome sebelumnya, ada kondisi yang perlu Anda perhatikan. Jika kondisi ini tidak memengaruhi ekstensi Anda, Anda dapat melanjutkan ke bagian berikutnya. Jika ya, pertimbangkan untuk menentukan versi Chrome minimum dalam manifes Anda.
Chrome 120
Alarm kini dapat disetel ke periode minimum 30 detik agar cocok dengan siklus proses pekerja layanan. Lihat chrome.alarms
untuk mengetahui detail selengkapnya.
Chrome 118
Sesi debugger aktif yang dibuat menggunakan chrome.debugger
API kini membuat pekerja layanan tetap aktif. Tindakan ini akan mencegah pekerja layanan habis waktu tunggunya selama panggilan untuk API ini.
Chrome 116
Chrome 116 memperkenalkan peningkatan masa aktif pekerja layanan berikut:
Koneksi
WebSocket
yang aktif kini memperpanjang masa aktif pekerja layanan ekstensi. Mengirim atau menerima pesan di seluruhWebSocket
di pekerja layanan ekstensi akan mereset timer tidak ada aktivitas pekerja layanan.API ekstensi tambahan diizinkan untuk melewati periode waktu tunggu lima menit untuk pekerja layanan ekstensi. API ini menampilkan perintah pengguna sehingga mungkin memerlukan waktu lebih dari lima menit untuk diselesaikan. Ini termasuk
desktopCapture.chooseDesktopMedia()
,identity.launchWebAuthFlow()
,management.uninstall()
, danpermissions.request()
.
Chrome 114
Mengirim pesan menggunakan pesan berumur panjang akan membuat pekerja layanan tetap aktif. Sebelumnya, membuka port akan mereset timer, tetapi mengirim pesan tidak akan mereset timer. Membuka port tidak lagi mereset timer.
Chrome 110
Panggilan API ekstensi mereset timer. Sebelum ini, hanya pengendali peristiwa yang berjalan yang akan membuat pekerja layanan tetap aktif. Setiap peristiwa yang diantrekan, tetapi yang pengendalinya belum dipanggil tidak akan menyebabkan reset.
Chrome 109
Pesan yang dikirim dari dokumen di luar layar akan mereset timer.
105 Chrome
Menghubungkan ke host pesan native menggunakan chrome.runtime.connectNative()
akan membuat pekerja layanan tetap aktif. Jika proses host mengalami error atau dimatikan, port akan ditutup dan pekerja layanan akan dihentikan setelah timer selesai. Cegah hal ini dengan memanggil chrome.runtime.connectNative()
di pengendali peristiwa onDisconnect port.