Service Worker'lardaki etkinlikler

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:

Önerilmez
browser.storage.local.get(["badgeText"], ({ badgeText }) => {
  browser.action.setBadgeText({ text: badgeText });
  browser.action.onClicked.addListener(handleActionClick);
});
Daha iyi
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 StorageArea nesne temizlendiğinde veya bir anahtarın değeri değiştirildiğinde ya da ayarlandığında tetiklenir. Her StorageArea örneğinin kendi onChanged etkinliğ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.