หากคุณเคยใช้ Geolocation API ก่อนหน้านี้ คุณคงอยากตรวจสอบว่าคุณได้รับอนุญาตให้ใช้หรือไม่ ตำแหน่งทางภูมิศาสตร์โดยไม่สร้างข้อความแจ้ง ซึ่งเป็นไปไม่ได้เลย คุณต้องขอตําแหน่งปัจจุบัน และระบบจะระบุสถานะสิทธิ์หรือทําให้ระบบแสดงข้อความแจ้งแก่ผู้ใช้
API บางตัวอาจทำงานลักษณะนี้ไม่ได้ Notifications API มีวิธีของตัวเองในการช่วยให้ คุณสามารถตรวจสอบสถานะสิทธิ์ปัจจุบันผ่านทาง Notification.permission
เมื่อแพลตฟอร์มเว็บเติบโตขึ้นใน API จึงจำเป็นต้องมีวิธีมาตรฐานวิธีเดียวสำหรับ เพื่อให้นักพัฒนาซอฟต์แวร์สามารถตรวจสอบสถานะของสิทธิ์แทนที่จะต้องจดจำ วิธีการทำงานของ API แต่ละอย่าง 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
ซึ่งคุณสามารถกำหนดชื่อของสิทธิ์ได้ คำตอบคือสัญญา
แปลค่าเป็น
PermissionStatus
ออบเจ็กต์ จากออบเจ็กต์นี้ คุณจะตรวจสอบสถานะด้วย permissionStatus.state
ได้
สำหรับ "อนุญาต", "ปฏิเสธ" หรือ "ข้อความแจ้ง" นอกจากนี้คุณยังติดตั้งใช้งานเหตุการณ์ได้อีกด้วย
ตัวแฮนเดิลสำหรับ permissionStatus.onchange
และจัดการการเปลี่ยนแปลงสิทธิ์
RightDescriptor ที่รองรับ
ในตัวอย่างด้านบน เราไฮไลต์วิธีค้นหาสถานะสิทธิ์
ตำแหน่งทางภูมิศาสตร์พร้อมด้วยข้อบ่งชี้สิทธิ์ต่อไปนี้: {name:'geolocation'}
ข้อบ่งชี้สิทธิ์การแจ้งเตือนจะคล้ายๆ กันคือ จะใช้เพียง
ชื่อแอตทริบิวต์: {name:'notifications'}
Push และ midi แต่ละแบบมี ที่มีเฉพาะใน API นั้น
สําหรับสิทธิ์พุช คุณจะใส่พารามิเตอร์ 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');
});
ประเด็นคือ Authorization API ทำให้เราสามารถตรวจสอบ ของสิทธิ์ในขณะที่สามารถรองรับ API ต่างๆ ที่กำลังเปิดอยู่ ผ่านเว็บได้
ข้อดีหลักๆ ของโปรแกรมนี้คือช่วยให้คุณสามารถ สร้างประสบการณ์การใช้งานที่ดีขึ้นสำหรับ ผู้ใช้ของคุณโดยแจ้งเฉพาะเมื่อผู้ใช้เข้าใจได้ชัดเจนแล้วว่าเหตุใดคุณถึงต้องมี และใช้ประโยชน์อย่างเต็มที่จาก API เหล่านี้เมื่อคุณทราบว่าคุณได้ ที่ได้รับอนุญาต
การรองรับเบราว์เซอร์
Chrome เป็นเบราว์เซอร์แรกที่ใช้งาน และ Mozilla กำลังวางแผนจัดส่ง และ Microsoft ก็ได้แสดงความสนใจใน API
ปัญหาที่ทราบ
- ตำแหน่งทางภูมิศาสตร์จะไม่แสดงข้อความแจ้งอีกครั้งหากผู้ใช้ปิดสิทธิ์ อีกครั้ง แต่สถานะการอนุญาตจะยังคงเป็น "ข้อความแจ้ง" [bugs.chromium.org]