Uzantı hizmet işçileri hem standart hizmet işçisi etkinliklerini hem de uzantı API'lerindeki birçok etkinliği destekler. Bu bölümde, sunulan özellikler açıklanmakta ve bunların kullanımıyla ilgili ipuçları verilmektedir.
Uzantı etkinliklerini beyan etme
Hizmet işçilerindeki etkinlik işleyicilerinin genel kapsamda tanımlanması gerekir. Yani, komut dosyasının en üst düzeyinde olmalı ve işlevlerin içine yerleştirilmemelidir. Bu, ilk komut dosyası çalıştırıldığında bunların eşzamanlı olarak kaydedilmesini sağlar. Bu sayede Chrome, hizmet çalışanını başlatır başlamaz olaylara hizmet çalışanına gönderebilir. Örneğin:
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 }); });
Sık karşılaşılan etkinlikler
Uzantı hizmet işçileri, belirli API'lerdeki etkinlikleri destekler. Aşağıda, sık karşılaşılan birkaç sorun açıklanmaktadır. Bu API'lerden bazılarının kullanılması için izin gerektiğini ve diğerlerinde Chrome'un tüm sürümlerinde kullanılamayan etkinlikler, yöntemler veya özellikler bulunabileceğini unutmayın. Ayrıntılar için bağlı API dokümanlarına, özellikle de kullanmak istediğiniz etkinliklere, yöntemlere veya özelliklere bakın.
chrome.action
- Kullanıcı, uzantınızın araç çubuğu simgesini etkileşime geçirdiğinde (belirli bir sayfa [sekme] veya uzantının tamamı için) tetiklenir.
chrome.management
- Uzantıların yüklenmesi, kaldırılması, etkinleştirilmesi ve devre dışı bırakılmasıyla ilgili etkinlikler sağlar.
chrome.notifications
- Kullanıcının, uzantı tarafından oluşturulan sistem bildirimleriyle etkileşimi hakkında etkinlikler sağlar.
chrome.permissions
- Uzantı izinlerinin kullanıcı tarafından ne zaman verildiğini veya iptal edildiğini gösterir.
chrome.runtime
- Uzantı yaşam döngüsü ile ilgili etkinlikleri, uzantının diğer bölümlerinden gönderilen mesajları ve kullanılabilir bir uzantı veya Chrome güncellemesi bildirimini sağlar.
chrome.storage.onChanged
- Herhangi bir
StorageArea
nesnesi temizlendiğinde veya bir anahtarın değeri değiştirildiğinde ya da ayarlandığında tetiklenir. HerStorageArea
örneğinin kendionChanged
etkinliğinin olduğunu unutmayın. chrome.webNavigation
- Uçuş sırasındaki navigasyon isteklerinin durumu hakkında bilgi sağlar.
Filtreler
Etkinlikleri belirli bir kullanım alanıyla kısıtlamak veya gereksiz etkinlik çağrılarını ortadan kaldırmak için etkinlik filtrelerini destekleyen API'leri kullanın. Örneğin, kullanıcının belirli bir web sitesine gittiğini algılamak için tabs.onUpdated
etkinliğini dinleyen bir uzantı düşünün. Bu etkinlik, her sekmede her gezinme işleminde çağrılır. Bunun yerine, filtreyle birlikte webNavigation.onCompleted
kullanın. Örneğin:
const filter = {
url: [
{
urlMatches: 'https://www.google.com/',
},
],
};
chrome.webNavigation.onCompleted.addListener(() => {
console.info("The user has loaded my favorite website!");
}, filter);
Web hizmeti işçisi etkinlikleri
Uzatma hizmet işçileri, başka bir yerde açıklanan yaşam döngüsü etkinliklerinden daha fazlasını destekler.
ServiceWorkerGlobal.fetch
Uzantı paketinden herhangi bir şey alındığında veya fetch()
ve XMLHttpRequest()
bir uzantı ya da pop-up komut dosyasından çağrıldığında tetiklenir. (İçerik komut dosyalarından gelen çağrılar, hizmet çalışanı fetch
işleyicisi tarafından engellenmez.) İkinci durumda, getirmek istediğiniz sayfaların URL'lerini manifest.json
içindeki "host_permissions"
anahtarına eklemeniz gerekir.
ServiceWorkerGlobal.message
Hizmet çalışanı mesaj aktarımı, uzantı mesaj aktarımına ek olarak kullanılabilir ancak iki sistem birlikte çalışamaz. Diğer bir deyişle, sendMessage()
(çeşitli uzantı API'lerinde kullanılabilir) kullanılarak gönderilen mesajlar, hizmet çalışanı mesaj işleyicileri tarafından engellenmez. Benzer şekilde, postMessage()
kullanılarak gönderilen iletiler uzantı mesaj işleyicileri tarafından durdurulmaz. Uzatma hizmet işçilerinde her iki mesaj işleyici türü de (yani hem ServiceWorkerGlobal.message
hem de chrome.runtime.onMessage
) desteklenir.
Hizmet çalışanı mesajlarını kullanma konusunda belirli bir nedeniniz yoksa uzantı mesajlarını tercih etmeniz gerekir.