chrome.permissions

Deskripsi

Gunakan chrome.permissions API untuk meminta izin opsional yang dideklarasikan pada waktu proses, bukan waktu penginstalan, sehingga pengguna memahami alasan izin diperlukan dan hanya memberikan izin yang diperlukan.

Konsep dan penggunaan

Peringatan izin ada untuk menjelaskan kemampuan yang diberikan oleh API, tetapi beberapa peringatan ini mungkin tidak jelas. Permissions API memungkinkan developer menjelaskan peringatan izin dan memperkenalkan fitur baru secara bertahap yang memberi pengguna pengantar ekstensi bebas risiko. Dengan cara ini, pengguna dapat menentukan seberapa banyak akses yang ingin mereka berikan dan fitur mana yang ingin mereka aktifkan.

Misalnya, fungsi inti ekstensi izin opsional menggantikan halaman tab baru. Salah satu fitur menampilkan sasaran pengguna untuk hari ini. Fitur ini hanya memerlukan izin penyimpanan, yang tidak termasuk peringatan. Ekstensi ini memiliki fitur tambahan yang dapat diaktifkan pengguna dengan mengklik tombol berikut:

Tombol ekstensi yang mengaktifkan fitur tambahan.
Tombol ekstensi yang mengaktifkan fitur tambahan.

Menampilkan situs teratas milik pengguna memerlukan izin topSites, yang memiliki peringatan berikut.

Peringatan Axtension untuk topSites API.
Peringatan ekstensi untuk topSites API

Menerapkan izin opsional

Langkah 1: Tentukan izin yang diperlukan dan yang bersifat opsional

Ekstensi dapat mendeklarasikan izin yang diperlukan dan opsional. Secara umum, Anda harus:

  • Gunakan izin yang diperlukan jika diperlukan untuk fungsi dasar ekstensi Anda.
  • Gunakan izin opsional jika diperlukan untuk fitur opsional di ekstensi Anda.

Keuntungan izin yang diperlukan:

  • Lebih sedikit perintah: Ekstensi dapat meminta pengguna satu kali untuk menyetujui semua izin.
  • Pengembangan yang lebih sederhana: Izin yang diperlukan dijamin ada.

Keuntungan izin opsional:

  • Keamanan yang lebih baik: Ekstensi berjalan dengan lebih sedikit izin karena pengguna hanya mengaktifkan izin yang diperlukan.
  • Informasi yang lebih baik bagi pengguna: Ekstensi dapat menjelaskan alasan diperlukannya izin tertentu saat pengguna mengaktifkan fitur yang relevan.
  • Upgrade yang lebih mudah: Saat Anda mengupgrade ekstensi, Chrome tidak akan menonaktifkannya untuk pengguna jika upgrade menambahkan izin opsional, bukan yang diperlukan.

Langkah 2: Mendeklarasikan izin opsional dalam manifes

Deklarasikan izin opsional di manifes ekstensi dengan kunci optional_permissions, menggunakan format yang sama dengan kolom izin:

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

Jika Anda ingin meminta host yang hanya Anda temukan saat runtime, sertakan "https://*/*" di kolom optional_host_permissions ekstensi Anda. Hal ini memungkinkan Anda menentukan origin apa pun di "Permissions.origins" selama memiliki skema yang cocok.

Izin yang tidak dapat ditetapkan sebagai opsional

Sebagian besar izin ekstensi Chrome dapat ditetapkan sebagai opsional, dengan pengecualian berikut.

Izin Deskripsi
"debugger" API chrome.debugger berfungsi sebagai transport alternatif untuk protokol proses debug jarak jauh Chrome.
"declarativeNetRequest" Memberikan ekstensi akses ke chrome.deklaratifNetRequest API.
"devtools" Mengizinkan ekstensi untuk memperluas fungsi Chrome DevTools.
"geolocation" Mengizinkan ekstensi untuk menggunakan API geolocation HTML5.
"mdns" Memberikan akses ekstensi ke chrome.mdns API.
"proxy" Memberikan akses ekstensi ke chrome.proxy API untuk mengelola setelan proxy Chrome.
"tts" chrome.tts API memutar text-to-speech (TTS) yang disintesis.
"ttsEngine" chrome.ttsEngine API mengimplementasikan mesin text-to-speech (TTS) menggunakan ekstensi.
"wallpaper" Khusus ChromeOS. Gunakan chrome.wallpaper API untuk mengubah wallpaper ChromeOS.

Lihat Mendeklarasikan Izin untuk mengetahui informasi lebih lanjut tentang izin yang tersedia dan peringatannya.

Langkah 3: Minta izin opsional

Minta izin dari dalam gestur pengguna menggunakan permissions.request():

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 akan meminta pengguna jika menambahkan izin akan menghasilkan pesan peringatan yang berbeda dari yang telah dilihat dan diterima pengguna. Misalnya, kode sebelumnya mungkin menghasilkan perintah seperti ini:

Contoh dialog konfirmasi izin.
Contoh dialog konfirmasi izin.

Langkah 4: Periksa izin ekstensi saat ini

Untuk memeriksa apakah ekstensi Anda memiliki izin atau kumpulan izin tertentu, gunakan permission.contains():

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.
  }
});

Langkah 5: Hapus izin

Sebaiknya Anda menghapus izin saat tidak lagi memerlukannya. Setelah izin dihapus, memanggil permissions.request() biasanya akan menambahkan kembali izin tanpa meminta izin pengguna.

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).
  }
});

Jenis

Permissions

Properti

  • origin

    string[] opsional

    Daftar izin host, termasuk yang ditentukan dalam kunci optional_permissions atau permissions dalam manifes, dan yang terkait dengan Skrip Konten.

  • izin

    string[] opsional

    Daftar izin bernama (tidak termasuk host atau origin).

Metode

contains()

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

Memeriksa apakah ekstensi memiliki izin yang ditentukan.

Parameter

  • izin
  • callback

    fungsi opsional

    Parameter callback terlihat seperti:

    (result: boolean)=>void

    • hasil

      boolean

      True jika ekstensi memiliki izin yang ditentukan. Jika origin ditentukan sebagai izin opsional dan pola pencocokan skrip konten, nilai ini akan menampilkan false kecuali jika kedua izin tersebut diberikan.

Hasil

  • Promise<boolean>

    Chrome 96 dan yang lebih baru

    Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.

getAll()

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

Mendapatkan kumpulan izin ekstensi saat ini.

Parameter

  • callback

    fungsi opsional

    Parameter callback terlihat seperti:

    (permissions: Permissions)=>void

    • izin

      Izin aktif ekstensi. Perlu diperhatikan bahwa properti origins akan berisi origin yang diberikan dari yang ditentukan dalam kunci permissions dan optional_permissions dalam manifes, serta yang terkait dengan Skrip Konten.

Hasil

  • Promise<Izin>

    Chrome 96 dan yang lebih baru

    Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.

remove()

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

Menghapus akses ke izin yang ditentukan. Jika ada masalah saat menghapus izin, runtime.lastError akan ditetapkan.

Parameter

  • izin
  • callback

    fungsi opsional

    Parameter callback terlihat seperti:

    (removed: boolean)=>void

    • dihapus

      boolean

      True jika izin dihapus.

Hasil

  • Promise<boolean>

    Chrome 96 dan yang lebih baru

    Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.

request()

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

Meminta akses ke izin tertentu, yang menampilkan perintah kepada pengguna jika diperlukan. Izin ini harus ditentukan di kolom optional_permissions pada manifes atau merupakan izin yang diperlukan yang ditahan oleh pengguna. Jalur pada pola origin akan diabaikan. Anda dapat meminta subset izin asal opsional; misalnya, jika Anda menentukan *://*\/* di bagian optional_permissions dari manifes, Anda dapat meminta http://example.com/. Jika ada masalah saat meminta izin, runtime.lastError akan ditetapkan.

Parameter

  • izin
  • callback

    fungsi opsional

    Parameter callback terlihat seperti:

    (granted: boolean)=>void

    • diberikan

      boolean

      True jika pengguna memberikan izin yang ditentukan.

Hasil

  • Promise<boolean>

    Chrome 96 dan yang lebih baru

    Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.

Peristiwa

onAdded

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

Diaktifkan saat ekstensi memperoleh izin baru.

Parameter

  • callback

    fungsi

    Parameter callback terlihat seperti:

    (permissions: Permissions)=>void

onRemoved

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

Diaktifkan saat akses ke izin telah dihapus dari ekstensi.

Parameter

  • callback

    fungsi

    Parameter callback terlihat seperti:

    (permissions: Permissions)=>void