Uzantı hizmet çalışanları hem standart hizmet çalışanı etkinliklerini hem de uzantı API'lerindeki birçok etkinliği destekler. Bu bölümde, kullanabileceğiniz özellikler açıklanmakta ve bu özellikleri kullanmayla ilgili ipuçları verilmektedir.
Uzantı etkinliklerini tanımlama
Service worker'lardaki etkinlik işleyicilerin genel kapsamda tanımlanması gerekir. Yani komut dosyasının en üst düzeyinde olmalı ve işlevlerin içine yerleştirilmemelidir. Bu sayede, ilk komut dosyası yürütme sırasında eşzamanlı olarak kaydedilirler. Böylece Chrome, başlatıldığı anda hizmet çalışanına etkinlik gönderebilir. Örneğin:
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 }); });
Sık kullanılan etkinlikler
Uzantı hizmeti çalışanları, belirli API'lerdeki etkinlikleri destekler. Sık karşılaşılan birkaç neden aşağıda açıklanmıştır. Bu API'lerin bazılarının kullanılabilmesi için izin gerektiğini, bazılarının ise Chrome'un tüm sürümlerinde kullanılamayan etkinlikler, yöntemler veya özellikler içerebileceğini unutmayın. Ayrıntılar için özellikle kullanmak istediğiniz etkinlikler, yöntemler veya özellikler olmak üzere bağlantılı API belgelerine bakın.
browser.action- Bu etkinlik, kullanıcının uzantınızın araç çubuğu simgesiyle etkileşimine yanıt olarak tetiklenir. Bu işlem belirli bir sayfa (sekme) veya uzantının tamamı için olabilir.
browser.management- Uzantıların yüklenmesi, kaldırılması, etkinleştirilmesi ve devre dışı bırakılmasıyla ilgili etkinlikler sağlar.
browser.notifications- Kullanıcının uzantı tarafından oluşturulan sistem bildirimleriyle etkileşimiyle ilgili etkinlikler sağlar.
browser.permissions- Uzantı izinlerinin kullanıcı tarafından ne zaman verildiğini veya iptal edildiğini gösterir.
browser.runtime- Uzantı yaşam döngüsü, uzantının diğer bölümlerinden gönderilen mesajlar ve kullanılabilir uzantı veya Chrome güncellemesiyle ilgili etkinlikler sağlar.
browser.storage.onChanged- Herhangi bir
StorageAreanesne temizlendiğinde veya bir anahtarın değeri değiştirildiğinde ya da ayarlandığında tetiklenir. HerStorageAreaörneğinin kendionChangedetkinliği olduğunu unutmayın. browser.webNavigation- Devam eden gezinme isteklerinin durumu hakkında bilgi sağlar.
Filtreler
Etkinlikleri belirli kullanım alanları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, bir 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 sekmedeki her gezinmede çağrılır. Bunun yerine filtreyle birlikte webNavigation.onCompleted kullanın. Örneğin:
const filter = {
url: [
{
urlMatches: 'https://www.google.com/',
},
],
};
browser.webNavigation.onCompleted.addListener(() => {
console.info("The user has loaded my favorite website!");
}, filter);
Web hizmet çalışanı etkinlikleri
Uzantı hizmeti ç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 bir uzantı ya da pop-up komut dosyasından fetch() ve XMLHttpRequest() çağrıldığında tetiklenir. (İçerik komut dosyalarından gelen aramalar, 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 iletme, uzantı mesaj iletmeye ek olarak kullanılabilir ancak iki sistem birlikte çalışamaz. Bu nedenle, sendMessage() kullanılarak gönderilen iletiler (çeşitli uzantı API'lerinde kullanılabilir) hizmet çalışanı ileti işleyicileri tarafından engellenmez. Aynı şekilde, postMessage() kullanılarak gönderilen iletiler de uzantı mesaj işleyicileri tarafından engellenmez. Her iki ileti işleyici türü (yani hem ServiceWorkerGlobal.message hem de browser.runtime.onMessage) uzantı hizmeti çalışanlarında desteklenir.
Hizmet çalışanı mesajlaşmasını kullanmak için özel bir nedeniniz yoksa uzantı mesajlaşmasını tercih etmelisiniz.