API สิทธิ์สำหรับเว็บ

หากเคยใช้ 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]