หากเคยใช้ Geolocation API มาก่อน คุณอาจต้องการตรวจสอบว่าคุณมีสิทธิ์ใช้ตำแหน่งทางภูมิศาสตร์โดยไม่แสดงข้อความแจ้งหรือไม่ ซึ่งเป็นไปไม่ได้ คุณต้องขอตำแหน่งปัจจุบัน ซึ่งจะระบุสถานะสิทธิ์หรือทำให้ข้อความแจ้งแสดงต่อผู้ใช้
API บางรายการอาจไม่ทํางานในลักษณะนี้ Notifications API มีวิธีของตัวเองในการอนุญาตให้คุณตรวจสอบสถานะสิทธิ์ปัจจุบันผ่าน Notification.permission
เมื่อแพลตฟอร์มเว็บมี API เพิ่มขึ้น ก็ต้องมีวิธีมาตรฐานเดียวที่นักพัฒนาซอฟต์แวร์ใช้ตรวจสอบสถานะสิทธิ์ได้โดยไม่ต้องจำวิธีการทำงานของ API แต่ละรายการ Permission API ซึ่งมีให้บริการใน Chrome เวอร์ชัน 43 มีไว้เพื่อเป็นวิธีมาตรฐานวิธีเดียวในการตรวจสอบสถานะสิทธิ์ของ API
permissions.query()
ตรวจสอบสถานะของสิทธิ์โดยใช้เมธอด permissions.query()
ซึ่งจะแสดงสถานะว่าอนุญาต (คุณมีสิทธิ์) ปฏิเสธ (คุณถูกบล็อกไม่ให้เข้าถึง API) หรือแสดงข้อความแจ้ง (ผู้ใช้ต้องได้รับการแจ้งเตือน) เช่น
// 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);
};
});
เมธอดการค้นหาใช้ออบเจ็กต์ PermissionDescriptor ซึ่งคุณกำหนดชื่อสิทธิ์ การตอบกลับคือ Promise ที่แสดงผลเป็นออบเจ็กต์ PermissionStatus จากออบเจ็กต์นี้ คุณสามารถตรวจสอบสถานะด้วย permissionStatus.state
เพื่อดู "granted", "denied" หรือ "prompt" นอกจากนี้ คุณยังใช้ตัวแฮนเดิลเหตุการณ์สําหรับ permissionStatus.onchange
และจัดการการเปลี่ยนแปลงสถานะสิทธิ์ได้ด้วย
PermissionDescriptors ที่รองรับ
ในตัวอย่างข้างต้น เราไฮไลต์วิธีค้นหาสถานะสิทธิ์สําหรับการระบุตําแหน่งทางภูมิศาสตร์ด้วยคําอธิบายสิทธิ์ {name:'geolocation'}
ตัวบ่งชี้สิทธิ์การแจ้งเตือนมีความคล้ายคลึงกันตรงที่ต้องใช้แอตทริบิวต์ชื่อเท่านั้น นั่นคือ {name:'notifications'}
Push และ midi แต่ละรายการมีพารามิเตอร์เพิ่มเติมเฉพาะสำหรับ API นั้นๆ
สําหรับสิทธิ์ Push คุณสามารถระบุพารามิเตอร์ userVisibleOnly
ตัวเลือกนี้ระบุว่าคุณต้องการแสดงการแจ้งเตือนสำหรับข้อความ Push ทุกข้อความหรือสามารถส่งข้อความ Push แบบเงียบได้ (ขณะนี้ Chrome รองรับเฉพาะข้อความ Push ที่มีการแจ้งเตือน) โดยวิธีใช้มีดังนี้
navigator.permissions.query({name:'push', userVisibleOnly:true})
Midi อนุญาตให้มีพารามิเตอร์ sysex
ข้อมูลนี้ระบุว่าคุณต้องและ/หรือได้รับข้อความเฉพาะของระบบหรือไม่ สำหรับ MIDI จะเป็นดังนี้
navigator.permissions.query({name:'midi', sysex:true})
การขอสิทธิ์
การขอสิทธิ์จากผู้ใช้จะขึ้นอยู่กับ API นั้นๆ เช่น ตำแหน่งทางภูมิศาสตร์จะแสดงข้อความแจ้งสิทธิ์เมื่อคุณเรียกใช้ getCurrentPosition()
navigator.geolocation.getCurrentPosition(function(position) {
console.log('Geolocation permissions granted');
console.log('Latitude:' + position.coords.latitude);
console.log('Longitude:' + position.coords.longitude);
});
ขณะที่การแจ้งเตือนจะแสดงข้อความแจ้งให้ผู้ใช้ทราบเมื่อคุณโทรหา 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');
});
ประเด็นคือ Permission API เป็นวิธีที่สอดคล้องกันในการติดตามสถานะสิทธิ์ ทั้งยังรองรับ API หลากหลายประเภทที่มีอยู่ในเว็บในปัจจุบัน
ข้อดีที่สำคัญคือช่วยให้คุณสร้างประสบการณ์การใช้งานที่ดียิ่งขึ้นให้แก่ผู้ใช้ โดยระบบจะแสดงข้อความแจ้งต่อเมื่อผู้ใช้ทราบดีอยู่แล้วว่าเหตุใดคุณจึงต้องการสิทธิ์เพิ่มเติม และใช้ประโยชน์จาก API เหล่านี้อย่างเต็มที่เมื่อคุณทราบว่าได้รับสิทธิ์แล้ว
การรองรับเบราว์เซอร์
Chrome เป็นเบราว์เซอร์แรกที่นำมาใช้ Mozilla กำลังวางแผนที่จะเปิดตัวฟีเจอร์นี้ และ Microsoft แสดงความสนใจใน API นี้
ปัญหาที่ทราบ
- ตำแหน่งทางภูมิศาสตร์จะไม่แสดงข้อความแจ้งอีกครั้งหากผู้ใช้ปิดคำขอสิทธิ์ แต่สถานะสิทธิ์จะยังคงเป็น "แจ้ง" [bugs.chromium.org]