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:
Kullanıcının en popüler sitelerinin gösterilmesi için aşağıdaki uyarının bulunduğu topSites izni gerekir.
İ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:
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
veyapermissions
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()
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ümlerVaatler, 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()
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ındakipermissions
ileoptional_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ümlerVaatler, 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()
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ümlerVaatler, 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()
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ümlerVaatler, 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
-
izinler
-
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
-
izinler
-