Service Worker'lardaki etkinlikler

Uzantı hizmeti ç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 bunları kullanmayla ilgili ipuçları verilmektedir.

Uzantı etkinlikleri bildirme

Service Worker'lardaki etkinlik işleyicilerin global kapsamda tanımlanması gerekir. Diğer bir deyişle, komut dosyasının en üst düzeyinde olmaları ve işlevlerin içine yerleştirilmemeleri gerekir. Bu, ilk komut dosyası yürütme sırasında eşzamanlı olarak kaydedilmelerini sağlar. Böylece Chrome, etkinlikleri başlar başlamaz 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 });
});

Genel etkinlikler

Uzantı hizmeti çalışanları, belirli API'lerdeki etkinlikleri destekler. Yaygın nedenlerden bazıları aşağıda açıklanmıştır. Bu API'lerden bazılarının kullanım izni gerektirdiğini, bazılarınınsa Chrome'un tüm sürümlerinde bulunmayan etkinlik, yöntem veya mülklere sahip olabileceğini hatırlatmak isteriz. Ayrıntılar için bağlantılı API dokümanlarına (özellikle de kullanmak istediğiniz etkinlikler, yöntemler veya özellikler) bakın.

chrome.action
İster belirli bir sayfa (sekme) ister uzantının tamamı olsun, uzantının araç çubuğu simgesiyle kullanıcı etkileşimi sonucunda tetiklenir.
chrome.management
Uzantıları yükleme, kaldırma, etkinleştirme ve devre dışı bırakma ile ilgili etkinlikler sağlar.
chrome.notifications
Kullanıcının, uzantı tarafından oluşturulan sistem bildirimleriyle etkileşimiyle ilgili etkinlikleri sağlar.
chrome.permissions
Uzantı izinlerinin kullanıcı tarafından ne zaman verildiğini veya iptal edildiğini belirtir.
chrome.runtime
Uzantı yaşam döngüsüyle ilgili etkinlikleri, uzantının diğer bölümlerinden gönderilen mesajları ve kullanılabilir bir uzantı ya da Chrome güncellemesiyle ilgili bildirimleri sağlar.
chrome.storage.onChanged
Herhangi bir StorageArea nesnesi silindiğinde veya bir anahtarın değeri değiştirildiğinde ya da ayarlandığında etkinleşir. Her StorageArea örneğinin kendi onChanged etkinliği olduğunu unutmayın.
chrome.webNavigation
Uçuş sırasındaki navigasyon isteklerinin durumu hakkında bilgi verir.

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ğinde bunu algılamak için tabs.onUpdated etkinliğini dinleyen bir uzantı kullanabilirsiniz. Bu etkinlik, her sekmedeki her gezinmede çağrılır. Bunun yerine, bir filtreyle 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 Service Worker etkinlikleri

Uzantı hizmet çalışanları, başka bir yerde açıklanan yaşam döngüsü olaylarından daha fazlasını destekler.

ServiceWorkerGlobal.fetch

Uzantı paketinden herhangi bir şey alındığında veya bir uzantıdan ya da pop-up komut dosyasından fetch() ve XMLHttpRequest() çağrıldığında tetiklenir. (İçerik komut dosyalarından gelen çağrılar, hizmet çalışanı fetch işleyicisi tarafından müdahale edilmez.) İkinci durumlarda, getirmek istediğiniz sayfaların URL'lerini manifest.json içindeki "host_permissions" anahtarına eklemeniz gerekir.

ServiceWorkerGlobal.message

Uzantı mesajlaşma aktarımına ek olarak hizmet çalışanı mesaj iletme özelliği de kullanılabilir ancak iki sistem birlikte çalışmaz. Bu, çeşitli uzantı API'lerinden erişilebilen sendMessage() kullanılarak gönderilen iletilere Service Worker mesaj işleyicileri tarafından müdahale edilmediği anlamına gelir. Benzer şekilde, postMessage() kullanılarak gönderilen iletilere de uzantı mesaj işleyicileri tarafından müdahale edilmez. Uzantı hizmet çalışanları, her iki mesaj işleyici türü de (yani hem ServiceWorkerGlobal.message hem de chrome.runtime.onMessage) desteklenir.

Hizmet çalışanı mesajlarını kullanmak için belirli bir nedeniniz yoksa uzantı mesajlaşmasını tercih etmelisiniz.