Service Worker'lardaki etkinlikler

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:

Önerilmez
chrome.storage.local.get(["badgeText"], ({ badgeText }) => {
  chrome.action.setBadgeText({ text: badgeText });
  chrome.action.onClicked.addListener(handleActionClick);
});
Daha iyi
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. Her StorageArea örneğinin kendi onChanged 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.