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 sekmeyi kapatma gibi tarayıcı tetikleyicileridir. Uzantılar, bu etkinlikleri arka plan komut dosyalarında izler ve belirtilen talimatlarla tepki verir.

Bir arka plan sayfası gerektiğinde yüklenir ve boşta kaldığında kaldırılır. Bazı örnekler Etkinlikler şunları içerir:

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

Yüklendikten sonra arka plan sayfası bir işlem gerçekleştirdiği sürece çalışmaya devam eder Örneğin, bir Chrome API'sini çağırmak veya ağ isteği göndermek gibi. Ayrıca arka plan sayfası görünür tüm görünümler ve tüm ileti bağlantı noktaları kapatılana kadar yüklemesi kaldırılmaz. Bir görünümü açtığınızda, bu etkinlik sayfasının yüklenmesine neden olmaz, ancak yüklendikten sonra kapatılmasını önler.

Etkili arka plan komut dosyaları, yangınları dinleyen bir olaya kadar etkisiz kalır. sonra yüklemeyi kaldırın.

Arka plan komut dosyalarını kaydedin

Arka plan komut dosyaları, manifest'te "background" alanı altında kaydedilir. Bunlar: "scripts" anahtarından sonra bir dizide listelenir ve "persistent" yanlış olarak belirtilmelidir.

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

Modüler hale getirilmiş 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 Arka Planda Taşıma Kalıcı olmayan bir modele nasıl geçiş yapılacağıyla ilgili talimatlar için kılavuz.

Uzantıyı başlatma

Yükleme sırasında bir uzantıyı başlatmak için runtime.onInstalled etkinliğini dinleyin. Bunu kullan etkinliğini ayarlamak veya bağlam menüsü gibi tek seferlik başlatma için kullanabilirsiniz.

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

Dinleyicileri ayarlama

Arka plan komut dosyalarını, uzantının bağımlı olduğu etkinlikler etrafında yapılandırın. İşlevsel olarak alakalı tanımlama etkinlikler, arka plan komut dosyalarının bu etkinlikler tetiklenene kadar etkin olmayan uzantısını önemli tetikleyicilerin eksikliğinden kurtarabilir.

İşleyiciler, sayfanın başı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 düzgün şekilde tetiklenmeyeceği için eşzamansız olarak kaydetmeyin.

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 işlevini çağırarak dinleyicileri arka plan komut dosyalarından kaldırabilir. Tümü bir etkinlik işleyicileri kaldırıldığında, Chrome artık uzantının arka plan komut dosyasını bahsedeceğim.

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

Etkinlikleri filtrele

Dinleyicileri uzantının önem verdiği durumlarla kısıtlamak için etkinlik filtrelerini destekleyen API'leri kullanın konu. Bir uzantı tabs.onUpdated etkinliğini dinliyorsa şunu kullanmayı deneyin: Sekmeler API'si desteklemediğinden bunun yerine filtrelerle webNavigation.onCompleted etkinliği filtrelerine dokunun.

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

Dinleyicilere tepki verme

İşleyiciler bir etkinlik tetiklendiğinde işlevi tetikler. Bir etkinliğe tepki vermek için istenen tepkiyi dinleyici etkinliğinde ortaya koyabilir.

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

Bir uzantının kaldırılması halinde önemli bilgilerin kaybolmaması için verilerin düzenli olarak saklanması gerekir. onSuspend alınmadan kilitleniyor. Bu konuda yardım almak için storage API'yi kullanın.

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

Bir uzantı mesaj iletme özelliğini kullanıyorsa tüm bağlantı noktalarının kapalı olduğundan emin olun. Arka plan komut dosyası, tüm ileti bağlantı noktaları kapanana kadar kaldırılmaz. runtime.Port.onDisconnect etkinliğini dinleme açık bağlantı noktalarının ne zaman kapandığı hakkında bilgi verir. Bunları şununla manuel olarak kapatın: runtime.Port.disconnect üzerinden kullanılabilir.

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

Arka plan komut dosyasının ömrü, uzantı için bir girişin ne zaman izleneceği izlenerek gözlemlenebilir. görünür ve Chrome'un görev yöneticisinden kaybolur.

ALT_TEXT_HERE

Görev yöneticisini açmak için Chrome Menüsü'nü tıklayın, fareyle diğer araçların üzerine gelin ve "Görev"i seçin. Yöneticisi"ni seçin.

Arka plan komut dosyaları, birkaç saniye işlem yapılmadığında kendi kendine kaldırılır. Son dakika temizlik var mı? gerekliyse runtime.onSuspend etkinliğini dinleyin.

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

Ancak runtime.onSuspend yerine kalıcı veriler tercih edilmelidir. Gelmiyor gerektiğinde temizlemene olanak tanır ve trafik kazası durumunda işe yaramaz.