Manifest V3'teki uzantı işlemleri

Simeon Vincent
Simeon Vincent

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

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

chrome.action, Manifest V3'te yeni bir özellik olsa da sağladığı temel işlev, Ocak 2010'da uzantıların stabil sürüme ilk eklendiği tarihe dayanır. Chrome'un uzantı platformunun ilk kararlı sürümü iki farklı işlem türünü destekledi: 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ülemesini ve kullanıcılara herhangi bir sayfada uzantı işlevini tetiklemeleri için kolay bir yol sağladı. Öte yandan sayfa işlemleri, "mevcut sayfada yapılabilen ancak tüm sayfalar için geçerli olmayan işlemleri temsil etmek" (kaynak) için tasarlanmıştır.

Çoklu sekme çubuğunda, uzantının bu sayfada bir işlem yapabileceğini belirten bir sayfa işlemi (solda) görünür. Tarayıcı işlemi (sağda) 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 sunarken sayfa işlemleri yalnızca uzantı mevcut sayfada yararlı bir şey yapabildiğinde görünüyordu.

Her iki işlem türü de isteğe bağlıdır. Bu nedenle, uzantı geliştirici bir işlem yapmama, sayfa işlemi veya tarayıcı işlemi (birden fazla işlem belirtilmesine izin verilmez) sağlamayı tercih edebilir.

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 olduğunu anlamalarına yardımcı olmak için etkin olan tüm uzantıları çoklu sekme çubuğunun sağında göstermeye başladı. Kullanıcılar, istedikleri takdirde uzantıları Chrome menüsüne "taşırabilir".

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ışıyla ilgili iki önemli değişikliğe de yol açtı. İlk olarak, tüm uzantılar araç çubuğunda simgeler görüntülemeye başladı. Uzantının simgesi yoksa Chrome, uzantı için otomatik olarak bir simge oluşturur. İkinci olarak, sayfa işlemleri tarayıcı işlemlerinin yanına araç çubuğuna taşındı ve "göster" ile "gizle" durumları arasında ayrım yapma olanağı tanındı.

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

Bu değişiklik, sayfa işlemi uzantılarının beklendiği gibi çalışmaya devam etmesine olanak tanıdı ancak zaman içinde sayfa işlemlerinin rolünü de azalttı. Kullanıcı arayüzünün yeniden tasarlanmasının etkilerinden biri, sayfa işlemlerinin tarayıcı işlemleri tarafından etkili bir şekilde kapsanmasıydı. Tüm uzantılar araç çubuğunda göründüğü için kullanıcılar, bir uzantının araç çubuğu simgesini tıklamanın uzantıyı çağıracağını beklemeye başladı ve tarayıcı işlemleri Chrome uzantıları için giderek daha önemli bir etkileşim haline geldi.

Manifest V3 değişiklikleri

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

Uzantılar ekibi, tarayıcı işlemlerinin ve sayfa işlemlerinin giderek anlamsız bir ayrım haline geldiğini fark etti. Daha da kötüsü, aralarındaki küçük davranış farklılıkları geliştiricilerin hangisini kullanacağını belirlemesini zorlaştırıyordu. Tarayıcı işlemini ve sayfa işlemini tek bir "işlem"de birleştirerek bu sorunları çözebileceğimizi fark ettik.

Action API'ye girin; chrome.action, chrome.browserAction ile en doğrudan benzerlik gösteren API'dir ancak aralarında birkaç önemli fark vardır.

İlk olarak chrome.action, getUserSettings() adlı yeni bir yöntemi sunar. Bu yöntem, uzantı geliştiricilerine kullanıcının uzantılarının işlemini araç çubuğuna sabitleyip sabitlemediğini kontrol etmeleri için bir yol sunar.

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 biraz sıra dışı bir ad gibi görünebilir ancak Chrome'daki işlemlerin geçmişi, tarayıcı kullanıcı arayüzünün uzantı API'lerinden daha hızlı değiştiğini gösteriyor. Bu nedenle, bu API ile amacımız, gelecekteki API değişikliklerini en aza indirmek için işlemle ilgili kullanıcı tercihlerini genel arayüzlerde göstermek. Ayrıca diğer tarayıcı tedarikçilerinin bu yöntem tarafından döndürülen UserSettings nesnesinde tarayıcıya özgü kullanıcı arayüzü kavramlarını göstermesine olanak tanır.

İkinci olarak, bir uzantının işleminin simgesi ve etkin/devre dışı durumu, Declarative Content API kullanılarak kontrol edilebilir. Bu, uzantıların ziyaret edilen sayfaların içeriğine veya URL'lerine erişmeden kullanıcının tarama davranışına tepki vermesine olanak tanıdığı için önemlidir. Örneğin, bir uzantının, kullanıcı example.com adresindeki sayfaları ziyaret ettiğinde işlemini nasıl etkinleştirebileceğini görelim.

// 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şlemiyle yapacağıyla neredeyse aynıdır. Tek fark, Manifest V2'de declarativeContent.ShowPageAction yerine Manifest V3'te declarativeContent.ShowAction kullanılmasıdır.

Son olarak, içerik engelleyiciler, belirli bir sekme için uzantı tarafından engellenen isteklerin sayısını görüntülemek üzere declarativeNetRequest API'nin setExtensionActionOptions yöntemini kullanabilir. Bu özellik, hassas olabilecek tarama meta verilerini uzantıya maruz bırakmadan içerik engelleyicilerin son kullanıcıları bilgilendirmesine olanak tanıdığı için önemlidir.

Son adım

Chrome uzantıları platformunu modernize etmek, Manifest V3'ü geliştirmek için en önemli motivasyonlarımızdan biriydi. Bu, birçok durumda yeni teknolojilere geçmek anlamına gelse de API arayüzümüze basitlik katmak da amaçlarımızdan biriydi.

Bu gönderinin, Manifest V3 platformunun bu bölümüne açıklık getirdiğini umuyoruz. 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 Platform vizyonu ve Maifest 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.