chrome.permissions

Açıklama

chrome.permissions API'yi kullanarak yükleme zamanında değil çalışma zamanında Beyan edilen isteğe bağlı izinleri isteyin. Böylece kullanıcılar, izinlerin neden gerekli olduğunu anlayıp yalnızca gerekli olan izinleri verebilir.

Kavramlar ve kullanım

İzin uyarıları, bir API'nin sunduğu özellikleri açıklamak için bulunur, ancak bu uyarılardan bazıları açıkça belli olmayabilir. Permissions API, geliştiricilerin izin uyarılarını açıklamasına ve yeni özellikleri kademeli olarak tanıtmasına olanak tanır. Böylece, kullanıcılara uzantıyı risksiz bir şekilde tanıtabilir. Böylece kullanıcılar ne kadar erişim izni vermek istediklerini ve hangi özellikleri etkinleştirmek istediklerini belirtebilir.

Örneğin, isteğe bağlı izin uzantısının temel işlevi yeni sekme sayfasını geçersiz kılmaktır. Özelliklerden biri, kullanıcının günün hedefini görüntülemesi. Bu özellik için yalnızca depolama izni gerekir. Bu izin uyarı içermez. Uzantı, kullanıcıların aşağıdaki düğmeyi tıklayarak etkinleştirebileceği ek bir özelliğe sahiptir:

Ek özellikleri etkinleştiren bir uzantı düğmesi.
Ek özellikleri etkinleştiren bir uzantı düğmesi.

Kullanıcının en popüler sitelerinin gösterilmesi için aşağıdaki uyarının bulunduğu topSites izni gerekir.

topSites API için genişletme uyarısı.
topSites API için uzantı uyarısı

İsteğe bağlı izinleri uygulama

1. Adım: Hangi izinlerin gerekli ve hangilerinin isteğe bağlı olduğuna karar verin

Bir uzantı hem gerekli hem de isteğe bağlı izinleri beyan edebilir. Genel olarak şunları yapmalısınız:

  • Uzantınızın temel işlevi için gerekli olduğunda gerekli izinleri kullanın.
  • Uzantınızdaki isteğe bağlı özellikler için gerektiğinde isteğe bağlı izinleri kullanın.

Gerekli izinlerin avantajları:

  • Daha az istem: Uzantı, kullanıcıdan bir kez tüm izinleri kabul etmesini isteyebilir.
  • Daha basit geliştirme: Gerekli izinlerin mevcut olacağı garanti edilir.

İsteğe bağlı izinlerin avantajları:

  • Daha fazla güvenlik: Kullanıcılar yalnızca gerekli izinleri etkinleştirdiğinden uzantılar daha az izinle çalışır.
  • Kullanıcılar için daha iyi bilgi: Uzantı, kullanıcı ilgili özelliği etkinleştirirken neden belirli bir izne ihtiyaç duyduğunu açıklayabilir.
  • Daha kolay yeni sürüme geçirme işlemleri: Uzantınızı yeni sürüme geçirdiğinizde, gerekli izinler yerine isteğe bağlı izinler ekliyse Chrome, kullanıcılarınız için uzantıyı devre dışı bırakmaz.

2. Adım: Manifest'te isteğe bağlı izinleri tanımlayın

İzinler alanıyla aynı biçimi kullanarak uzantı manifestinizdeki isteğe bağlı izinleri optional_permissions anahtarıyla bildirin:

{
  "name": "My extension",
  ...
  "optional_permissions": ["tabs"],
  "optional_host_permissions": ["https://www.google.com/"],
  ...
}

Yalnızca çalışma zamanında keşfettiğiniz barındırıcıları istemek için uzantınızın optional_host_permissions alanına "https://*/*" değerini ekleyin. Bu, eşleşen bir şemaya sahip olduğu sürece "Permissions.origins" içinde herhangi bir kaynağı belirtebilmenizi sağlar.

İsteğe bağlı olarak belirtilemeyen izinler

Çoğu Chrome uzantı izni, aşağıdaki istisnalar dışında isteğe bağlı olarak belirtilebilir.

İzin Açıklama
"debugger" chrome.debugger API, Chrome'un uzaktan hata ayıklama protokolü için alternatif bir aktarım işlevi görür.
"declarativeNetRequest" Uzantının chrome.declarativeNetRequest API'sine erişim izni verir.
"devtools" Uzantının, Chrome Geliştirici Araçları işlevini genişletmesine izin verir.
"geolocation" Uzantının, HTML5 geolocation API'sini kullanmasına izin verir.
"mdns" Uzantıya, chrome.mdns API'sine erişim izni verir.
"proxy" Chrome'un proxy ayarlarını yönetmek için uzantıya, chrome.proxy API'sine erişim izni verir.
"tts" chrome.tts API, sentezlenmiş metin okumayı (TTS) oynatır.
"ttsEngine" chrome.ttsEngine API, bir uzantı kullanarak metin okuma (TTS) motoru uygular.
"wallpaper" Yalnızca ChromeOS. ChromeOS duvar kağıdını değiştirmek için chrome.wallpaper API'yi kullanın.

Mevcut izinler ve uyarıları hakkında daha fazla bilgi edinmek için İzin Beyan sayfasını görüntüleyin.

3. Adım: İsteğe bağlı izinler isteyin

permissions.request() kullanarak izinleri bir kullanıcı hareketinin içinden isteyin:

document.querySelector('#my-button').addEventListener('click', (event) => {
  // Permissions must be requested from inside a user gesture, like a button's
  // click handler.
  chrome.permissions.request({
    permissions: ['tabs'],
    origins: ['https://www.google.com/']
  }, (granted) => {
    // The callback argument will be true if the user granted the permissions.
    if (granted) {
      doSomething();
    } else {
      doSomethingElse();
    }
  });
});

İzinlerin eklenmesi kullanıcının önceden görüp kabul ettiğinden farklı uyarı mesajlarıyla sonuçlanıyorsa Chrome kullanıcıyı ister. Örneğin, önceki kod şuna benzer bir istemle sonuçlanabilir:

İzin onayı istemi örneği.
Örnek izin onayı istemi.

4. Adım: Uzantının mevcut izinlerini kontrol edin

Uzantınızın belirli bir izne veya izin grubuna sahip olup olmadığını kontrol etmek için permission.contains() işlevini kullanın:

chrome.permissions.contains({
  permissions: ['tabs'],
  origins: ['https://www.google.com/']
}, (result) => {
  if (result) {
    // The extension has the permissions.
  } else {
    // The extension doesn't have the permissions.
  }
});

5. Adım: İzinleri kaldırın

Artık ihtiyaç duymadığınız izinleri kaldırmanız gerekir. Bir izin kaldırıldıktan sonra permissions.request() çağrılması genellikle kullanıcıya sormadan izni geri ekler.

chrome.permissions.remove({
  permissions: ['tabs'],
  origins: ['https://www.google.com/']
}, (removed) => {
  if (removed) {
    // The permissions have been removed.
  } else {
    // The permissions have not been removed (e.g., you tried to remove
    // required permissions).
  }
});

Türler

Permissions

Özellikler

  • başlangıç noktaları

    string[] isteğe bağlı

    Manifest'teki optional_permissions veya permissions anahtarlarında belirtilenler ve Content Komut Dosyaları ile ilişkili olanlar da dahil olmak üzere ana makine izinlerinin listesi.

  • izinler

    string[] isteğe bağlı

    Adlandırılmış izinlerin listesi (ana makineleri veya kaynakları içermez).

Yöntemler

contains()

Söz
chrome.permissions.contains(
  permissions: Permissions,
  callback?: function,
)

Uzantının belirtilen izinlere sahip olup olmadığını kontrol eder.

Parametreler

  • izinler
  • geri çağırma

    Functions (isteğe bağlı)

    callback parametresi şu şekilde görünür:

    (result: boolean)=>void

    • sonuç

      boolean

      Uzantı, belirtilen izinlere sahipse doğru değerini döndürür. Bir kaynak hem isteğe bağlı izin hem de içerik komut dosyası eşleşme kalıbı olarak belirtilirse her iki izin de verilmediği sürece bu işlev false sonucunu döndürür.

İlerlemeler

  • Promise<boolean>

    Chrome 96 ve sonraki sürümler

    Vaatler, Manifest V3 ve sonraki sürümlerde desteklenir ancak geriye dönük uyumluluk için geri çağırmalar sağlanır. Aynı işlev çağrısında ikisini birden kullanamazsınız. Vaat, geri çağırmaya iletilen aynı türle çözümlenir.

getAll()

Söz
chrome.permissions.getAll(
  callback?: function,
)

Uzantının mevcut izin grubunu alır.

Parametreler

  • geri çağırma

    Functions (isteğe bağlı)

    callback parametresi şu şekilde görünür:

    (permissions: Permissions)=>void

    • izinler

      Uzantının etkin izinleri. origins mülkünün manifest dosyasındaki permissions ile optional_permissions anahtarlarında belirtilenlerden ve İçerik Komut Dosyaları ile ilişkili olanlardan verilen kaynakları içereceğini unutmayın.

İlerlemeler

  • Söz<İzinler>

    Chrome 96 ve sonraki sürümler

    Vaatler, Manifest V3 ve sonraki sürümlerde desteklenir ancak geriye dönük uyumluluk için geri çağırmalar sağlanır. Aynı işlev çağrısında ikisini birden kullanamazsınız. Vaat, geri çağırmaya iletilen aynı türle çözümlenir.

remove()

Söz
chrome.permissions.remove(
  permissions: Permissions,
  callback?: function,
)

Belirtilen izinlere erişimi kaldırır. İzinler kaldırılırken herhangi bir sorun oluşursa runtime.lastError ayarlanır.

Parametreler

  • izinler
  • geri çağırma

    Functions (isteğe bağlı)

    callback parametresi şu şekilde görünür:

    (removed: boolean)=>void

    • kaldırılmış

      boolean

      İzinler kaldırıldıysa doğru değerini alır.

İlerlemeler

  • Promise<boolean>

    Chrome 96 ve sonraki sürümler

    Vaatler, Manifest V3 ve sonraki sürümlerde desteklenir ancak geriye dönük uyumluluk için geri çağırmalar sağlanır. Aynı işlev çağrısında ikisini birden kullanamazsınız. Vaat, geri çağırmaya iletilen aynı türle çözümlenir.

request()

Söz
chrome.permissions.request(
  permissions: Permissions,
  callback?: function,
)

Belirtilen izinlere erişim ister ve gerekirse kullanıcıya bir istem görüntülenir. Bu izinler, manifest'in optional_permissions alanında tanımlanmalı veya kullanıcı tarafından alıkoyan gerekli izinler olmalıdır. Kaynak kalıplarındaki yollar yoksayılır. İsteğe bağlı kaynak izinlerinin alt kümelerini isteyebilirsiniz. Örneğin, manifest'in optional_permissions bölümünde *://*\/* değerini belirtirseniz http://example.com/ isteğinde bulunabilirsiniz. İzin isterken herhangi bir sorun olursa runtime.lastError ayarlanır.

Parametreler

  • izinler
  • geri çağırma

    Functions (isteğe bağlı)

    callback parametresi şu şekilde görünür:

    (granted: boolean)=>void

    • izin verildi

      boolean

      Kullanıcı belirtilen izinleri verdiyse True (doğru) değerini alır.

İlerlemeler

  • Promise<boolean>

    Chrome 96 ve sonraki sürümler

    Vaatler, Manifest V3 ve sonraki sürümlerde desteklenir ancak geriye dönük uyumluluk için geri çağırmalar sağlanır. Aynı işlev çağrısında ikisini birden kullanamazsınız. Vaat, geri çağırmaya iletilen aynı türle çözümlenir.

Etkinlikler

onAdded

chrome.permissions.onAdded.addListener(
  callback: function,
)

Uzantı yeni izinler edindiğinde tetiklenir.

Parametreler

  • geri çağırma

    işlev

    callback parametresi şu şekilde görünür:

    (permissions: Permissions)=>void

onRemoved

chrome.permissions.onRemoved.addListener(
  callback: function,
)

Uzantıdan izinlere erişim kaldırıldığında tetiklenir.

Parametreler

  • geri çağırma

    işlev

    callback parametresi şu şekilde görünür:

    (permissions: Permissions)=>void