chrome.permissions

Açıklama

Kullanıcıların izinlerin neden gerekli olduğunu anlaması ve yalnızca gerekli olanları vermesi için chrome.permissions API'sini kullanarak isteğe bağlı olarak beyan edilen izinleri yükleme zamanında değil, çalışma zamanında isteyin.

Genel Bakış

İzin uyarıları, bir API'nin verdiği yetkileri açıklamak için kullanılır ancak bu uyarılardan bazıları belirgin olmayabilir. Permissions API, geliştiricilerin izin uyarılarını açıklamasına ve yeni özellikleri kademeli olarak kullanıma sunmasına olanak tanır. Bu sayede kullanıcılar, uzantıyı risksiz bir şekilde deneyebilir. Bu sayede kullanıcılar, ne kadar erişim vermek istediklerini ve hangi özellikleri etkinleştirmek istediklerini belirleyebilir.

Örneğin, isteğe bağlı izinler uzantısının temel işlevi, yeni sekme sayfasını geçersiz kılmaktır. Özelliklerden biri, kullanıcının o günkü hedefini göstermektir. Bu özellik yalnızca depolama izni gerektirir ve bu izinle ilgili uyarı gösterilmez. Uzantının, kullanıcıların aşağıdaki düğmeyi tıklayarak etkinleştirebileceği ek bir özelliği vardır:

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

Kullanıcının en çok ziyaret ettiği siteleri göstermek için topSites izni gerekir. Bu izinle ilgili uyarı aşağıda verilmiştir.

topSites API için uzantı uyarısı

İsteğe bağlı izinleri uygulama

1. adım: Hangi izinlerin zorunlu, hangilerinin isteğe bağlı olduğuna karar verin

Uzantılar hem zorunlu hem de isteğe bağlı izinleri bildirebilir. Genel olarak şunları yapmanız gerekir:

  • Gerekli izinleri, uzantınızın temel işlevselliği için ihtiyaç duyulduğunda 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: Bir uzantı, kullanıcının tüm izinleri kabul etmesi için tek bir istem gösterebilir.
  • Daha basit geliştirme: Gerekli izinlerin mevcut olduğu garanti edilir.

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

  • Daha iyi 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 bilgiler: Bir uzantı, kullanıcı ilgili özelliği etkinleştirdiğinde neden belirli bir izne ihtiyacı olduğunu açıklayabilir.
  • Daha kolay yükseltmeler: Uzantınızı yükselttiğinizde, yükseltme zorunlu izinler yerine isteğe bağlı izinler ekliyorsa Chrome, uzantıyı kullanıcılarınız için devre dışı bırakmaz.

2. adım: Manifest dosyasında isteğe bağlı izinleri bildirin

optional_permissions anahtarını kullanarak uzantı manifestinizde isteğe bağlı izinleri izinler alanıyla aynı biçimde bildirin:

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

Yalnızca çalışma zamanında keşfettiğiniz ana makineleri istemek istiyorsanız uzantınızın optional_host_permissions alanına "https://*/*" ekleyin. Bu, eşleşen bir şemaya sahip olduğu sürece Permissions.origins içinde herhangi bir kaynağı belirtmenize olanak tanır.

İsteğe bağlı olarak belirtilemeyen izinler

Aşağıdaki istisnalar dışında çoğu Chrome uzantısı izni 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 görevi görür.
"declarativeNetRequest" Uzantıya chrome.declarativeNetRequest API'sine erişim izni verir.
"devtools" Uzantının Chrome Geliştirici Araçları işlevselliğini genişletmesine olanak tanır.
"experimental" Yalnızca Canary ve Yeni Geliştirilenler kanalı. Uzantıya chrome.experimental API'lerine erişim izni 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" Uzantıya, Chrome'un proxy ayarlarını yönetmek için chrome.proxy API'sine erişim izni verir.
"tts" chrome.tts API, sentezlenmiş metin okuma (TTS) işlevi sunar.
"ttsEngine" chrome.ttsEngine API, uzantı kullanarak metin okuma (TTS) motoru uygular.
"wallpaper" Yalnızca ChromeOS. ChromeOS duvar kağıdını değiştirmek için chrome.wallpaper API'sini kullanın.

Kullanılabilir izinler ve uyarıları hakkında daha fazla bilgi için İzinleri Bildirme ve Kullanıcıları Uyarma başlıklı makaleyi inceleyin.

3. adım: İsteğe bağlı izinleri isteyin

permissions.request() kullanarak kullanıcı hareketi içinden izinleri 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();
    }
  });
});

Chrome, izinlerin eklenmesi kullanıcının daha önce gördüğü ve kabul ettiği uyarı mesajlarından farklı uyarı mesajlarına neden olursa kullanıcıya sorar. Örneğin, önceki kod aşağıdaki gibi bir isteme neden olabilir:

ö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() 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() işlevi genellikle kullanıcıya sormadan izni tekrar 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

  • kökenler

    string[] isteğe bağlı

    Manifestteki optional_permissions veya permissions anahtarlarında belirtilenler ve içerik komut dosyalarıyla 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()

Promise
chrome.permissions.contains(
  permissions: Permissions,
  callback?: function,
)
: Promise<boolean>

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

Parametreler

  • izinler
  • callback

    işlev isteğe bağlı

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

    (result: boolean) => void

    • sonuç

      boolean

      Uzantının belirtilen izinlere sahip olması durumunda doğru. 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 false döndürülür.

İadeler

  • Promise<boolean>

    Chrome 96 veya daha yeni bir sürüm

    Promises yalnızca Manifest V3 ve sonraki sürümlerde desteklenir. Diğer platformlarda geri çağırmalar kullanılmalıdır.

getAll()

Promise
chrome.permissions.getAll(
  callback?: function,
)
: Promise<Permissions>

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

Parametreler

  • callback

    işlev isteğe bağlı

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

    (permissions: Permissions) => void

    • izinler

      Uzantının etkin izinleri. origins özelliğinin, manifestteki permissions ve optional_permissions anahtarlarında belirtilenler ile içerik komut dosyaları ile ilişkili olanlardan verilen kaynakları içereceğini unutmayın.

İadeler

  • Promise<Permissions>

    Chrome 96 veya daha yeni bir sürüm

    Promises yalnızca Manifest V3 ve sonraki sürümlerde desteklenir. Diğer platformlarda geri çağırmalar kullanılmalıdır.

remove()

Promise
chrome.permissions.remove(
  permissions: Permissions,
  callback?: function,
)
: Promise<boolean>

Belirtilen izinlere erişimi kaldırır. İzinleri kaldırmayla ilgili sorunlar varsa runtime.lastError ayarlanır.

Parametreler

  • izinler
  • callback

    işlev isteğe bağlı

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

    (removed: boolean) => void

    • kaldırıldı

      boolean

      İzinler kaldırıldıysa doğru (True) değerini döndürür.

İadeler

  • Promise<boolean>

    Chrome 96 veya daha yeni bir sürüm

    Promises yalnızca Manifest V3 ve sonraki sürümlerde desteklenir. Diğer platformlarda geri çağırmalar kullanılmalıdır.

request()

Promise
chrome.permissions.request(
  permissions: Permissions,
  callback?: function,
)
: Promise<boolean>

Belirtilen izinlere erişim isteğinde bulunur ve gerekirse kullanıcıya bir istem gösterir. Bu izinler, manifestin optional_permissions alanında tanımlanmalı veya kullanıcı tarafından engellenen 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, manifestin optional_permissions bölümünde *://*\/* belirtirseniz http://example.com/ isteyebilirsiniz. İzinler istenirken sorun yaşanırsa runtime.lastError ayarlanır.

Parametreler

  • izinler
  • callback

    işlev isteğe bağlı

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

    (granted: boolean) => void

    • izin verildi

      boolean

      Kullanıcı, belirtilen izinleri verdiyse doğru (True).

İadeler

  • Promise<boolean>

    Chrome 96 veya daha yeni bir sürüm

    Promises yalnızca Manifest V3 ve sonraki sürümlerde desteklenir. Diğer platformlarda geri çağırmalar kullanılmalıdır.

Etkinlikler

onAdded

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

Uzantı yeni izinler aldığında tetiklenir.

Parametreler

  • callback

    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

  • callback

    işlev

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

    (permissions: Permissions) => void