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

Özet

Neler değişiyor?

Chrome 70'ten itibaren kullanıcılar uzantı ana makinesinin erişimini özel bir listeye veya uzantıları mevcut sayfaya erişmek için tıklama gerektirecek şekilde yapılandırmak için kullanılır.

Hangi API'ler etkileniyor?

Bu değişiklik, uzantınızın ve içerik komut dosyalarıdır. Ana makine izinleri gerektiren API'ler arasında webRequest, cookies, tabs.executeScript() ve tabs.insertCSS() ve kaynaklar arası gerçekleştirme istekleri (ör. XMLHTTPRequest veya fetch() API'si) iletebilir.

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 tüm sitelerde yayınlanmasına izin vermeyi seçebilir izin verilmez. Bu seçenekler, kullanıcılara chrome://extensions sayfasında ve kullanabilirsiniz.

Çalışma zamanında istenen ana makine izinlerini kontrol eden içerik menüsü kontrollerinin ekran görüntüsü
            Uzantıyı tıklandığında, belirli bir sitede veya tüm sitelerde çalıştırma seçenekleri dahil.

Bir kullanıcı uzantımı "tıklandığında" yayınlamayı seçerse ne olur?

Uzantı, temelde activeTab iznini kullanıyormuş gibi davranır. Uzantı Kullanıcının uzantıyı tıkladığı herhangi bir ana makineye geçici erişim izni verilmesi (söz konusu ana makinenin uzantı (chrome://settings gibi kısıtlı bir site olmamalıdır). Tıklandığında çalışacak şekilde ayarlandığında Chrome, erişim isteğinde bulunabilirsiniz.

Chrome'un, araç çubuğundaki uzantı simgesine eklediği rozetlerin 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ıştırılmasına izin verilir ve yardımcı olan bir self servis platformdur. Uzantınızın istediği ancak kullanıcının istemediği diğer sitelerde kullanıcı uzantıyı tıkladığında çalışacak şekilde ayarlamış gibi olduğunda davranışla aynı olur.

Bir kullanıcı uzantımı tüm sitelerde yayınlamayı 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şebildiği sitelerden gelen isteklere müdahale etmeye, bunları değiştirmeye ve engellemeye devam edebilir. Örneğin, Google Chrome, uzantının erişiminin olmadığı sitelerde uzantısı, sayfaya erişim isteğinde bulunur. Kullanıcı daha sonra uzantıya erişim izni verebilir; Chrome ve ardından Kullanıcıdan, uzantınızın ağ isteklerine müdahale etmesine izin vermek için sayfayı yenilemesini ister.

İçerik komut dosyaları, tabs.executeScript(), tabs.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şiminin olmadığı sitelerde Chrome, Uzantı, sayfaya erişim isteğinde bulunur. Kullanıcı daha sonra uzantıya erişim izni verebilir. Öğe content komut dosyası, document_idle konumuna yerleştirecek şekilde ayarlanmışsa komut dosyası hemen eklenir. Aksi halde Chrome, uzantının daha önce komut dosyası yerleştirmesine izin vermek için kullanıcıdan sayfayı yenilemesini ister sayfa yükleme (document_start veya document_end) düzeyinde. tabs.executeScript() ve tabs.insertCSS() yöntemleri 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ştirmeye ve kullandığı sitelere çapraz kaynak XHR erişimi olan kişilerdir. Başka bir kaynağın sayfasına erişen bir uzantı sayfasıyla ilişkilendirilmiş bir sekme olmadığından veya başka bir ana makineye XHR gönderirse Chrome, kullanıcıya uzantı bir siteye erişmek istiyor. Başka bir sitenin çerezine erişmeye veya bir kaynaklar arası XHR, uzantının manifest ana makineyi içermiyormuş gibi bir hata mesajıyla başarısız olur izni gerekir. Bu tür durumlarda, kullanıcıya izin vermek için isteğe bağlı izinleri kullanmanızı öneririz. farklı sitelere çalışma zamanında erişim izni vermek için kullanır.

Aşağıdaki örnek, bunun çerezler API'si için nasıl işleyebileceğini gösterir.

Ö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

Olumsuz şekilde etkilenmemek için en iyi uygulamalar nelerdir?

Uzantılar isteğe bağlı izinleri, activeTab ve declarativeContent API'lerini kullanabilir en iyi uygulamaları izliyor. İsteğe bağlı izinler çalışma zamanında verilir ve uzantının, bir siteye özel erişim isteme. activeTab izni etkilenmez ve uzantılar normal şekilde çalışmaya devam etmesini sağlar. declarativeContent API birçok ihtiyacın yerine kullanılabilir her sayfaya komut dosyası ekleyin.

Mevcut kullanıcılarıma ne olacak? var mı?

Bu değişiklik, uzantınıza verilen mevcut izinleri hemen etkilemez. Yani, Kullanıcı, ziyaret ettiği siteleri kısıtlamak için herhangi bir işlem yapmadıkça eskisi gibi çalışmaya devam edecektir. erişebilir. Gelecekteki sürümlerde Chrome, kullanıcılara ayarlama yapmaları için daha fazla kontrol sağlayacaktır Ayarlar'da devre dışı bırakabilirsiniz.

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

Uzantınızın doğru çalışıp çalışmadığını kontrol etmek için permissions.contains() API'sini kullanabilirsiniz. belirli bir kaynağa erişim izni verildi.