Arka plan komut dosyalarıyla etkinlikleri yönetme

Uzantılar, Chrome'a göz atma deneyimini değiştirmek veya geliştirmek için kullanılan etkinliğe dayalı programlardır. Etkinlikler, yeni bir sayfaya gitme, yer işaretini kaldırma veya bir sekmeyi kapatma gibi tarayıcı tetikleyicileridir. Uzantılar, bu etkinlikleri arka plan komut dosyalarında izler ve ardından belirtilen talimatlarla tepki verir.

Arka plan sayfası gerektiğinde yüklenir ve boşta kaldığında boşaltılır. Etkinliklere ilişkin bazı örnekler şunlardır:

  • Uzantı önce yüklenir veya yeni bir sürüme güncellenir.
  • Arka plan sayfası bir etkinliği dinliyordu ve etkinlik gönderildi.
  • İçerik komut dosyası veya başka bir uzantı mesaj gönderir.
  • Uzantıda bulunan başka bir görünüm (ör. pop-up), runtime.getBackgroundPage kodunu arar.

Arka plan sayfası yüklendikten sonra, bir Chrome API'sini çağırmak veya ağ isteği göndermek gibi bir işlem gerçekleştirildiği sürece çalışmaya devam eder. Ayrıca arka plan sayfasının tüm görünür görünümler ve tüm mesaj bağlantı noktaları kapatılana kadar yüklenmez. Bir görünümün açılması, etkinlik sayfasının yüklenmesine neden olmaz, yalnızca yüklendikten sonra kapanmasını engeller.

Etkili arka plan komut dosyaları, yangınları dinleyen bir olaya kadar hareketsiz kalır, belirtilen talimatlarla tepki verir ve ardından boşaltır.

Arka plan komut dosyalarını kaydedin

Arka plan komut dosyaları, "background" alanının altındaki manifest'e kaydedilir. Bunlar "scripts" anahtarından sonraki bir dizide listelenir ve "persistent" yanlış olarak belirtilmelidir.

{
  "name": "Awesome Test Extension",
  ...
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  ...
}

Modülerleştirilmiş kod için birden fazla arka plan komut dosyası kaydedilebilir.

{
    "name": "Awesome Test Extension",
    ...
    "background": {
      "scripts": [
        "backgroundContextMenus.js",
        "backgroundOmniBox.js",
        "backgroundOauth.js"
      ],
      "persistent": false
    },
    ...
  }

Bir uzantı şu anda kalıcı bir arka plan sayfası kullanıyorsa kalıcı olmayan bir modele geçişle ilgili talimatlar için Arka Planda Taşıma Kılavuzu'na bakın.

Uzantıyı başlatın

Yükleme sırasında bir uzantıyı başlatmak için runtime.onInstalled etkinliğini dinleyin. Durum ayarlamak veya içerik menüsü gibi tek seferlik başlatma işlemi için bu etkinliği kullanın.

chrome.runtime.onInstalled.addListener(function() {
  chrome.contextMenus.create({
    "id": "sampleContextMenu",
    "title": "Sample Context Menu",
    "contexts": ["selection"]
  });
});

İşleyicileri ayarlama

Arka plan komut dosyalarını uzantının bağımlı olduğu etkinlikler etrafında yapılandırın. İşlevsel olarak alakalı etkinliklerin tanımlanması, arka plan komut dosyalarının bu etkinlikler tetiklenene kadar hareketsiz kalmasına olanak tanır ve uzantının önemli tetikleyicileri kaçırmasını önler.

İşleyiciler, sayfanın başlangıcından itibaren eşzamanlı olarak kaydedilmelidir.

chrome.runtime.onInstalled.addListener(function() {
  chrome.contextMenus.create({
    "id": "sampleContextMenu",
    "title": "Sample Context Menu",
    "contexts": ["selection"]
  });
});

// This will run when a bookmark is created.
chrome.bookmarks.onCreated.addListener(function() {
  // do something
});

İşleyicileri eşzamansız olarak kaydetmeyin. Bunlar, düzgün şekilde tetiklenmez.

chrome.runtime.onInstalled.addListener(function() {
  // ERROR! Events must be registered synchronously from the start of
  // the page.
  chrome.bookmarks.onCreated.addListener(function() {
    // do something
  });
});

Uzantılar, removeListener çağrısı yaparak işleyicileri arka plan komut dosyalarından kaldırabilir. Bir etkinliğin tüm dinleyicileri kaldırılırsa Chrome artık söz konusu etkinlik için uzantının arka plan komut dosyasını yüklemez.

chrome.runtime.onMessage.addListener(function(message, sender, reply) {
    chrome.runtime.onMessage.removeListener(event);
});

Etkinlikleri filtrele

İşleyicileri uzantının önem verdiği durumlarla sınırlamak için etkinlik filtrelerini destekleyen API'ler kullanın. Bir uzantı tabs.onUpdated etkinliğini dinliyorsa sekme API'si filtreleri desteklemediğinden, bunun yerine webNavigation.onCompleted etkinliğini filtrelerle kullanmayı deneyin.

chrome.webNavigation.onCompleted.addListener(function() {
    alert("This is my favorite website!");
}, {url: [{urlMatches : 'https://www.google.com/'}]});

Dinleyicilere tepki verin

İşleyiciler, etkinlik tetiklendiğinde işlevleri tetiklemek için bulunur. Bir etkinliğe tepki vermek için istenen tepkiyi dinleyici etkinliği içinde yapılandırın.

chrome.runtime.onMessage.addListener(function(message, callback) {
  if (message.data == "setAlarm") {
    chrome.alarms.create({delayInMinutes: 5})
  } else if (message.data == "runLogic") {
    chrome.tabs.executeScript({file: 'logic.js'});
  } else if (message.data == "changeColor") {
    chrome.tabs.executeScript(
        {code: 'document.body.style.backgroundColor="orange"'});
  };
});

Arka plan komut dosyalarını kaldır

onSuspend verileri alınmadan bir uzantı kilitlenirse önemli bilgilerin kaybolmaması için veriler düzenli olarak saklanmalıdır. Bu konuda yardım almak için storage API'yi kullanın.

chrome.storage.local.set({variable: variableInformation});

Bir uzantı ileti iletme özelliğini kullanıyorsa tüm bağlantı noktalarının kapalı olduğundan emin olun. Arka plan komut dosyası, tüm mesaj bağlantı noktaları kapatılıncaya kadar kaldırılmaz. runtime.Port.onDisconnect dinleyerek, açık bağlantı noktalarının ne zaman kapandığı hakkında bilgi edinebilirsiniz. Bunları runtime.Port.disconnect ile manuel olarak kapatın.

chrome.runtime.onMessage.addListener(function(message, callback) {
  if (message == 'hello') {
    sendResponse({greeting: 'welcome!'})
  } else if (message == 'goodbye') {
    chrome.runtime.Port.disconnect();
  }
});

Uzantıya ait bir giriş göründüğünde ve Chrome'un görev yöneticisinden kaybolduğunda arka plan komut dosyasının kullanım ömrü izlenerek gözlemlenebilir.

ALT_TEXT_HERE

Chrome Menüsü'nü tıklayıp fareyle diğer araçların üzerine gelip "Görev Yöneticisi"ni seçerek görev yöneticisini açın.

Arka plandaki komut dosyaları, birkaç saniye işlem yapılmadığında kendiliğinden kaldırılır. Son dakika temizlemesi gerekiyorsa runtime.onSuspend etkinliğini dinleyin.

chrome.runtime.onSuspend.addListener(function() {
  console.log("Unloading.");
  chrome.browserAction.setBadgeText({text: ""});
});

Ancak, runtime.onSuspend kullanmak yerine kalıcı veriler tercih edilmelidir. Gerektiği kadar temizlemeye izin vermez ve kaza durumunda işe yaramaz.