Jika Anda pernah menggunakan Geolocation API sebelumnya, kemungkinan Anda ingin memeriksa apakah Anda memiliki izin untuk Geolokasi tanpa menyebabkan dialog. Ini sangat tidak mungkin. Anda harus meminta posisi saat ini dan ini akan menunjukkan status izin atau menyebabkan permintaan ditampilkan kepada pengguna.
Tidak semua API berfungsi seperti ini. Notifications API memiliki cara sendiri untuk mengizinkan Anda untuk memeriksa status izin akses saat ini melalui Notification.permission.
Seiring berkembangnya platform web dengan API, perlu ada satu cara standar untuk pengembang untuk memeriksa status izin daripada harus mengingat cara kerja setiap API. Permission API, yang tersedia di Chrome versi 43, adalah dimaksudkan sebagai satu-satunya cara standar untuk memeriksa status izin API.
permissions.query()
Periksa status izin menggunakan metode permissions.query()
. Hal ini akan
menampilkan status "diberikan" (Anda memiliki izin), ditolak (Anda diblokir dari
mengakses API) atau
prompt (kebutuhan pengguna
yang berbeda). 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 mengambil
PermissionDescriptor
tempat Anda menentukan nama izin. Responsnya adalah Promise
menyelesaikan masalah menjadi
PermissionStatus
. Dari objek ini, Anda dapat memeriksa status dengan permissionStatus.state
untuk 'granted', 'denied' atau 'prompt'. Anda juga bisa menerapkan peristiwa
untuk permissionStatus.onchange
dan menangani perubahan izin
status.
PermissionDescriptors yang Didukung
Di contoh di atas, kami menyoroti cara
mengkueri status izin akses untuk
geolokasi dengan deskripsi izin berikut: {name:'geolocation'}
.
Deskriptor izin Notifikasi serupa karena hanya memerlukan sebuah
atribut nama: {name:'notifications'}
.
Push dan midi masing-masing memiliki yang spesifik untuk API tersebut.
Untuk izin push, Anda dapat menyediakan parameter userVisibleOnly
.
Ini menunjukkan apakah Anda ingin menampilkan notifikasi untuk setiap pesan push
atau dapat mengirim notifikasi push senyap (Untuk saat ini hanya Chrome
mendukung pesan push dengan notifikasi). Anda akan menggunakannya seperti berikut:
navigator.permissions.query({name:'push', userVisibleOnly:true})
Midi mengizinkan parameter sysex
. Hal ini menunjukkan apakah Anda perlu dan/atau menerima
pesan eksklusif sistem. Untuk midi, kodenya adalah:
navigator.permissions.query({name:'midi', sysex:true})
Meminta Izin
Permintaan 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 izin 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 adalah bahwa Permission API memungkinkan cara yang konsisten untuk memantau status izin sekaligus dapat mendukung berbagai API yang saat ini aktif web.
Keuntungan terbesarnya adalah Anda dapat membangun pengalaman yang lebih baik untuk pengguna Anda, hanya memberi tahu pengguna ketika jelas mengapa Anda membutuhkan hak istimewa dan memanfaatkan sepenuhnya API ini ketika Anda tahu bahwa Anda telah diberi izin.
Anda dapat menemukan kumpulan contoh lengkap di sini.
Dukungan Browser
Chrome adalah browser pertama yang menerapkan hal ini, Mozilla berencana merilisnya ini, dan Microsoft telah menunjukkan minat terhadap API.
Masalah Umum
- Geolokasi tidak akan menampilkan kembali dialog jika pengguna menutup izin permintaan. Namun, status izin tetap 'prompt'. [bugs.chromium.org]