Jika sebelumnya Anda telah menggunakan Geolocation API, kemungkinan Anda ingin memeriksa apakah Anda memiliki izin untuk menggunakan Geolokasi tanpa menyebabkan perintah. Hal ini tidak mungkin dilakukan. Anda harus meminta posisi saat ini dan ini akan menunjukkan status izin atau menyebabkan perintah ditampilkan kepada pengguna.
Tidak semua API berfungsi dengan cara ini. Notifications API memiliki cara tersendiri untuk memungkinkan Anda memeriksa status izin saat ini melalui Notification.permission.
Seiring berkembangnya platform web dalam API, perlu ada satu cara standar bagi developer untuk memeriksa status izin, bukan harus mengingat cara kerja setiap API. Permission API, yang tersedia di Chrome versi 43, dimaksudkan sebagai satu cara standar untuk memeriksa status izin API.
permissions.query()
Periksa status izin menggunakan metode permissions.query()
. Tindakan ini akan
menampilkan status granted (Anda memiliki izin), denied (Anda diblokir agar tidak
mengakses API), atau
prompt (pengguna perlu
diminta). Contoh:
// Check for Geolocation API permissions
navigator.permissions.query({name:'geolocation'})
.then(function(permissionStatus) {
console.log('geolocation permission state is ', permissionStatus.state);
permissionStatus.onchange = function() {
console.log('geolocation permission state has changed to ', this.state);
};
});
Metode kueri menggunakan objek
PermissionDescriptor, tempat Anda menentukan nama izin. Responsnya adalah Promise
yang me-resolve ke objek
PermissionStatus. Dari objek ini, Anda dapat memeriksa status dengan permissionStatus.state
untuk 'granted', 'denied', atau 'prompt'. Anda juga dapat menerapkan pengendali
peristiwa untuk permissionStatus.onchange
dan menangani perubahan pada status
izin.
PermissionDescriptors yang Didukung
Pada contoh di atas, kita menyoroti cara membuat kueri status izin untuk
geolokasi dengan deskripsi izin berikut: {name:'geolocation'}
.
Deskripsi izin Notifikasi serupa karena hanya memerlukan
atribut nama: {name:'notifications'}
.
Push dan midi masing-masing memiliki parameter tambahan yang khusus untuk API tersebut.
Untuk izin push, Anda dapat memberikan parameter userVisibleOnly
.
Ini menunjukkan apakah Anda ingin menampilkan notifikasi untuk setiap pesan push
atau dapat mengirim notifikasi push senyap (Saat ini Chrome hanya
mendukung pesan push dengan notifikasi). Anda akan menggunakannya seperti ini:
navigator.permissions.query({name:'push', userVisibleOnly:true})
Midi memungkinkan parameter sysex
. Ini menunjukkan apakah Anda perlu dan/atau menerima
pesan eksklusif sistem. Untuk midi, ini akan menjadi:
navigator.permissions.query({name:'midi', sysex:true})
Meminta Izin
Meminta izin dari pengguna bergantung pada API tertentu. Misalnya,
geolokasi akan menampilkan dialog izin saat Anda memanggil getCurrentPosition()
.
navigator.geolocation.getCurrentPosition(function(position) {
console.log('Geolocation permissions granted');
console.log('Latitude:' + position.coords.latitude);
console.log('Longitude:' + position.coords.longitude);
});
Sedangkan notifikasi akan meminta pengguna saat Anda memanggil requestPermission()
.
Notification.requestPermission(function(result) {
if (result === 'denied') {
console.log('Permission wasn\'t granted. Allow a retry.');
return;
} else if (result === 'default') {
console.log('The permission request was dismissed.');
return;
}
console.log('Permission was granted for notifications');
});
Intinya di sini adalah bahwa Permission API memungkinkan cara yang konsisten untuk memantau status izin sekaligus dapat mendukung berbagai API yang saat ini ada di web.
Keuntungan besar dari hal ini adalah Anda dapat membuat pengalaman yang lebih baik bagi pengguna, hanya meminta izin saat pengguna jelas mengetahui alasan Anda memerlukan hak istimewa tambahan dan memanfaatkan API ini sepenuhnya saat Anda tahu bahwa Anda telah diberi izin.
Anda dapat menemukan kumpulan contoh lengkap di sini.
Dukungan Browser
Chrome adalah browser pertama yang menerapkannya, Mozilla berencana meluncurkannya, dan Microsoft telah menunjukkan minatnya pada API ini.
Masalah Umum
- Geolokasi tidak akan menampilkan kembali perintah jika pengguna menutup permintaan izin. Namun, status izin tetap 'prompt'. [bugs.chromium.org]