Manifest V3'teki uzantı işlemleri

Simeon Volkan
Simeon Vincent

Chrome uzantılarının kullanıma sunulmasından bu yana platform, geliştiricilerin işlemleri kullanarak uzantı işlevlerini doğrudan üst düzey Chrome kullanıcı arayüzünde sunmalarına olanak tanıyor. İşlem, bir pop-up açabilen veya uzantıdaki bazı işlevleri tetikleyebilen bir simge düğmesidir. Chrome, geçmişte iki tür işlemi destekliyordu: tarayıcı işlemleri ve sayfa işlemleri; Manifest V3, işlevlerini yeni bir chrome.action API'de birleştirerek bu durumu değiştiriyordu.

Uzantı işlemlerinin kısa geçmişi

chrome.action'in kendisi Manifest V3'te yeni olsa da sağladığı temel işlevler, uzantıların Ocak 2010'da kararlı sürüme ilk kez sunulduğu zamana kadar uzanır. Chrome'un uzantılar platformunun ilk kararlı sürümü iki farklı işlem türünü destekliyordu: tarayıcı işlemleri ve sayfa işlemleri.

Tarayıcı işlemleri, uzantı geliştiricilerinin "ana Google Chrome araç çubuğunda, adres çubuğunun sağında" (kaynak) bir simge görüntülemelerine olanak tanıyor ve kullanıcılara herhangi bir sayfada uzantı işlevini tetiklemeleri için kolay bir yol sunuyordu. Öte yandan sayfa işlemlerinin amacı, "geçerli sayfada yapılabilecek, ancak tüm sayfalar için geçerli olmayan işlemleri temsil etmektir" (kaynak).

Çok amaçlı adres çubuğunda, uzantının bu sayfada bir işlem yapabileceğini gösteren bir sayfa işlemi (solda) görünür. Bir tarayıcı işlemi (sağ) her zaman görünür.

Diğer bir deyişle, tarayıcı işlemleri uzantı geliştiricilerine tarayıcıda kalıcı bir kullanıcı arayüzü yüzeyi sağlarken sayfa işlemleri yalnızca uzantının geçerli sayfada faydalı bir şey yapabildiği durumlarda görüntüleniyordu.

Her iki işlem türü de isteğe bağlıydı. Bu nedenle, uzantı geliştiricisi hiçbir işlem, bir sayfa işlemi veya bir tarayıcı işlemi sağlamayı tercih edebiliyordu (birden fazla işlemin belirtilmesine izin verilmez).

Yaklaşık altı yıl sonra Chrome 49, uzantılar için yeni bir kullanıcı arayüzü paradigmasını kullanıma sundu. Chrome, kullanıcıların hangi uzantılara sahip olduklarını anlamalarına yardımcı olmak için tüm etkin uzantıları çok amaçlı adres çubuğunun sağ tarafında görüntülemeye başladı. Kullanıcılar isterlerse uzantıları Chrome menüsüne "taşıyabiliyordu".

Gizli uzantı simgeleri Chrome menüsünde görünür.

Her uzantı için bir simge görüntülemek üzere bu güncelleme, uzantıların Chrome'un kullanıcı arayüzündeki davranış biçiminde iki önemli değişikliğe de imza attı. İlk olarak, tüm uzantılar araç çubuğunda simgeler görüntülemeye başladı. Uzantının simgesi yoksa Chrome bunun için otomatik olarak bir simge oluşturur. İkinci olarak, sayfa işlemleri, tarayıcı işlemlerinin yanında araç çubuğuna taşınıyor ve "göster" ve "gizle" durumları arasında ayrım yapma olanağı sunuluyordu.

Devre dışı bırakılmış bir sayfa işlemi (solda) araç çubuğunda gri tonlamalı bir resim oluştururken etkin bir resim (sağda) tam renkli olarak görüntülenir.

Bu değişiklik, sayfa işlemi uzantılarının beklendiği gibi çalışmaya devam etmesini sağladı ancak zaman içinde sayfa işlemlerinin rolünü de azalttı. Kullanıcı arayüzünün yeni tasarımının etkilerinden biri, sayfa işlemlerinin, tarayıcı eylemleri tarafından etkili bir şekilde dahil edilmesiydi. Tüm uzantılar araç çubuğunda göründüğünden, kullanıcılar bir uzantının araç çubuğu simgesini tıkladıklarında uzantıyı çağıracağını ve tarayıcı işlemlerinin Chrome uzantıları için giderek daha önemli bir etkileşim haline geleceğini tahmin etmeye başladı.

Manifest V3 değişiklikleri

2016 uzantı kullanıcı arayüzünün yeni tasarımını takip eden yıllarda Chrome kullanıcı arayüzü ve uzantılar gelişmeye devam etti. Ancak tarayıcı işlemleri ve sayfa işlemleri büyük ölçüde değişmedi. Yani en azından Manifest V3 ile uzantı platformunu nasıl modernleştireceğimizi planlamaya başlayana kadar.

Uzantı ekibi, tarayıcı işlemlerinin ve sayfa işlemlerinin artık anlamsız bir ayrım yaptığını açıkça görmüştü. Daha da kötüsü, davranış alanlarındaki göze çarpan farklılıkları, geliştiricilerin hangisini kullanacaklarını belirlemelerini zorlaştırıyordu. Bu sorunları, tarayıcı işlemini ve sayfa işlemini tek bir "eylem"de bir araya getirerek ele alabileceğimizi fark ettik.

Action API'yi girin. chrome.action, chrome.browserAction ile en doğrudan benzerdir, ancak aralarında birkaç önemli fark vardır.

chrome.action, ilk olarak getUserSettings() adlı yeni bir yöntemi kullanıma sunuyor. Bu yöntem, uzantı geliştiricilerinin, kullanıcının uzantısının işlemini araç çubuğuna sabitleyip sabitlediğini kontrol edebilmesini sağlar.

let userSettings = await chrome.action.getUserSettings();
console.log(`Is the action pinned? ${userSettings.isOnToolbar ? 'Yes' : 'No'}.`);

"getUserSettings" bu işlev için "isPinned" ile karşılaştırıldığında alışılmadık bir ad gibi görünebilir ancak Chrome'daki işlem geçmişi, tarayıcı kullanıcı arayüzünün uzantı API'lerinden daha hızlı değiştiğini göstermektedir. Bu nedenle, bu API ile hedefimiz gelecekteki API kayıplarını en aza indirmek için genel arayüzlerde işlemle ilgili kullanıcı tercihlerini ortaya çıkarmaktır. Ayrıca, diğer tarayıcı tedarikçilerinin bu yöntem tarafından döndürülen UserSettings nesnesinde tarayıcıya özel kullanıcı arayüzü kavramlarını göstermesine de olanak tanır.

İkinci olarak, bir uzantı işleminin simgesi ve etkin/devre dışı durumu Declarative Content API kullanılarak kontrol edilebilir. Bu, uzantıların kullanıcının içeriğe veya ziyaret ettikleri sayfaların URL'lerine erişmeden kullanıcının göz atma davranışına tepki vermesini sağladığı için önemlidir. Örneğin, kullanıcı example.com'daki sayfaları ziyaret ettiğinde bir uzantının kendi eylemini nasıl etkinleştirebileceğini inceleyelim.

// Manifest V3
chrome.runtime.onInstalled.addListener(() => {
  chrome.declarativeContent.onPageChanged.removeRules(undefined, () => {
    chrome.declarativeContent.onPageChanged.addRules([
      {
        conditions: [
          new chrome.declarativeContent.PageStateMatcher({
            pageUrl: {hostSuffix: '.example.com'},
          })
        ],
        actions: [new chrome.declarativeContent.ShowAction()]
      }
    ]);
  });
});

Yukarıdaki kod, bir uzantının sayfa işleminde ne yapacağıyla neredeyse aynıdır. Tek fark, Manifest V3'te Manifest V2'de declarativeContent.ShowPageAction yerine declarativeContent.ShowAction kullanılmasıdır.

Son olarak, içerik engelleyiciler belirli bir sekmede uzantı tarafından engellenen isteklerin sayısını görüntülemek için declarativeNetRequest API'nin setExtensionActionOptions) yöntemini kullanabilir. Bu özellik, içerik engelleyicilerin hassas olabilecek tarama meta verilerini uzantıya göstermeden son kullanıcıları bilgilendirmesini sağladığı için önemlidir.

Son adım

Chrome uzantıları platformunun modernleştirilmesi, Manifest V3'ün temel motivasyonlarından biriydi. Birçok durumda bu, yeni teknolojilere geçmek anlamına geliyordu ancak aynı zamanda API yüzeyimizi basitleştirmek anlamına geliyordu. Buradaki amacımız da buydu.

Bu yayının, Manifest V3 platformunun bu özel konusuna ışık tutmasına yardımcı olduğunu umuyorum. Chrome ekibinin tarayıcı uzantılarının geleceğine nasıl yaklaştığı hakkında daha fazla bilgi edinmek için geliştirici dokümanlarımızdaki Platformun vizyonu ve Manifest V3'e Genel Bakış sayfalarına göz atın. Ayrıca chromium-extensions Google Grubu'nda diğer geliştiricilerle Chrome uzantıları hakkında konuşabilirsiniz.