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, 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:

Ö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ı 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. 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

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.