Ana makine izinleri için kullanıcı denetimleri: geçiş kılavuzu

Özet

Neler değişecek?

Chrome 70'ten itibaren kullanıcılar, özel bir site listesine uzantı ana makinesi erişimini kısıtlama veya uzantıları, geçerli sayfaya erişmek için tıklama gerektirecek şekilde yapılandırma olanağına sahiptir.

Hangi API'ler etkileniyor?

Bu değişiklik, uzantı manifestinizde belirtilen ana makine izinlerinden etkilenen tüm API'lerin yanı sıra içerik komut dosyalarını etkiler. Ana makine izinleri gerektiren API'ler arasında webRequest, cookies, tabs.executeScript() ve tabs.insertCSS() ve XMLHTTPRequest veya fetch() API aracılığıyla olduğu gibi kaynaklar arası istekleri yerine getirme bulunur.

Kısıtlı erişim

Kullanıcı erişimi nasıl kısıtlayabilir?

Kullanıcılar, uzantınızın tıklandığında, belirli bir site grubunda veya istenen tüm sitelerde yayınlanmasına izin vermeyi seçebilir. Bu seçenekler, kullanıcılara chrome://extensions sayfasında ve uzantı içerik menüsünde sunulur.

Uzantıyı tıklandığında, belirli bir sitede veya tüm sitelerde çalıştırma seçenekleri de dahil olmak üzere çalışma zamanı ana makine izinlerine ilişkin içerik menüsü kontrollerinin ekran görüntüsü.

Bir kullanıcı uzantımı "tıklandığında" çalıştırmayı seçerse ne olur?

Uzantı temelde activeTab iznini kullanıyormuş gibi davranır. Uzantı, ana makine tarafından istendiyse (ve chrome://settings gibi kısıtlanmış bir site değilse) kullanıcının uzantıyı tıkladığı tüm ana makinelere geçici erişim izni verilir. Tıklamada çalıştırılmak üzere ayarlandığında Chrome, belirli bir sitede erişim istediğini belirtmek için uzantınızı bir daire ve alt gölgeyle (aşağıya bakın) etiketler.

Chrome'un araç çubuğundaki uzantı simgesine eklenen rozetinin ekran görüntüsü

Bir kullanıcı uzantımı belirli sitelerde yayınlamayı seçerse ne olur?

Uzantınızın, kullanıcının seçtiği tüm sitelerde otomatik olarak çalışmasına izin verilir ve başka bir kullanıcı işlemi gerekmeden siteye erişebilir. Uzantınızın istediği ancak kullanıcının izin vermediği diğer sitelerde davranış, kullanıcının uzantıyı tıklamada çalışacak şekilde ayarlamasıyla aynıdır.

Bir kullanıcı uzantımı tüm sitelerde çalıştırmayı seçerse ne olur?

Uzantı, manifest dosyasında istenen tüm sitelere otomatik olarak erişebilir.

API davranışları

Web isteği API'si

Uzantı, erişimi olduğu sitelerden gelen isteklere müdahale etmeye, bunları değiştirmeye ve engellemeye devam edebilir. Uzantının erişemediği sitelerde Chrome, uzantının sayfaya erişim istediğini belirtmek için uzantıyı rozetler. Daha sonra kullanıcı, uzantıya erişim izni verebilir. Ardından Chrome, uzantının ağ isteklerine müdahale etmesine izin vermek için kullanıcıdan sayfayı yenilemesini ister.

İçerik komut dosyaları, tab.executeScript(), sekmeleri.insertCSS()

Uzantı, erişimi olan tüm siteler için komut dosyalarını ve stil sayfalarını otomatik olarak eklemeye devam edebilir. Uzantının erişemediği sitelerde Chrome, uzantının sayfaya erişim istediğini belirtmek için uzantıyı rozetler. Bunun ardından, kullanıcı uzantıya erişim izni verebilir. İçerik komut dosyası document_idle konumuna eklenecek şekilde ayarlanmışsa komut dosyası hemen eklenir. Aksi takdirde Chrome, uzantınızın komut dosyalarını sayfa yüklemesinde daha erken (document_start veya document_end) yerleştirmesine izin vermek üzere kullanıcıdan sayfayı yenilemesini ister. tabs.executeScript() ve tabs.insertCSS() yöntemlerine ilişkin geri çağırmalar, yalnızca kullanıcı siteye erişim izni verirse çağrılır.

Çerezler ve arka plan sayfası XHR

Uzantı, yine de çerezleri okuyup değiştirebilir ve erişiminin olduğu siteler için merkezler arası XHR işlemi gerçekleştirebilir. Başka bir kaynağın çerezlerine erişen veya başka bir ana makineye XHRing gönderen bir uzantı sayfasıyla ilişkilendirilmiş bir sekme olmadığından, Chrome, kullanıcıya uzantının bir siteye erişmek istediğini belirtmek için uzantıya rozet eklemez. Başka bir sitenin çerezine erişmeye veya kökler arası XHR oluşturmaya çalışmak, uzantının manifesti ana makine iznini içermiyormuş gibi bir hatayla başarısız olur. Bu durumlarda, kullanıcının farklı sitelere çalışma zamanında erişim izni vermesine olanak tanımak için isteğe bağlı izinleri kullanmanızı öneririz.

Aşağıdaki örnekte, bunun çerezler API'si için nasıl çalışabileceği gösterilmektedir.

Önce:

{
  ...
  "permissions": ["cookies", "https://example.com"]
}
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                    function(cookie) {
                      // Use the cookie.
                    });

Sonra:

{
  ...
  "permissions": ["cookies"],
  "optional_permissions": ["https://example.com"]
}
// Note: permissions.request() requires a user gesture, so this
// may only be done in response to a user action.
chrome.permissions.request(
    {origins: ['https://example.com']},
    function(granted) {
      if (granted) {
        chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                            function(cookie) {
                              // Use the cookie.
                            });
      } else {
        // Handle grant failure
      }
    });

Taşıma

Bu durumdan olumsuz yönde etkilenmemek için izlenecek en iyi uygulamalar nelerdir?

Uzantılar, en iyi uygulamaları izlemek için isteğe bağlı izinleri, activeTab ve declarativeContent API'lerini kullanabilir. İsteğe bağlı izinler çalışma zamanında verilir ve uzantının bir siteye belirli erişim isteğinde bulunmasına olanak tanır. activeTab izni etkilenmez ve bu izni kullanan uzantılar normal şekilde çalışmaya devam eder. declarativeContent API, birçok sayfaya komut dosyası ekleme ihtiyacının yerine geçer.

Mevcut kullanıcılarımın ayarlarına ne olur?

Bu değişiklik, uzantınıza verilmiş mevcut izinleri hemen etkilemez. Diğer bir deyişle, kullanıcı, erişmesine izin verilen siteleri kısıtlamak için işlem yapmadığı sürece site önceki gibi çalışmaya devam edecektir. Gelecekteki sürümlerde Chrome, kullanıcılara ayarları düzenleme konusunda daha fazla kontrol sağlayacaktır.

Uzantımın bir sitede çalışma izni olup olmadığını nasıl kontrol edebilirim?

Uzantınıza belirli bir kaynağa erişim izni verilip verilmediğini kontrol etmek için permissions.contains() API'sini kullanabilirsiniz.