Uzantı hizmet işçileri hem standart hizmet işçisi etkinliklerini hem de uzantı API'lerindeki birçok etkinliği destekler. Bu bölümde, kullanılabilen özellikler ve bunların kullanımıyla ilgili ipuçları verilmektedir.
Uzantı etkinliklerini beyan etme
Service Worker'lardaki etkinlik işleyicilerin global kapsamda bildirilmesi gerekir. Bu durum, bunların komut dosyasının en üst seviyesinde yer almalı 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ı hizmeti çalışanları, 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ım izni gerektirdiğini, bazılarının ise Chrome'un tüm sürümlerinde bulunmayan etkinlikler, yöntemler veya özellikler olabileceğ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 sunar.
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
Uzantı hizmet çalışanları, 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. Uzantı hizmeti çalışanlarında her iki mesaj işleyici türü (hem ServiceWorkerGlobal.message
hem de chrome.runtime.onMessage
) desteklenir.
Service Worker mesajlarını kullanmak için belirli bir nedeniniz yoksa uzantı mesajlaşmasını tercih etmeniz gerekir.