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 และจัดการการเปลี่ยนแปลงสถานะสิทธิ์ได้ด้วย

PermissionDescriptor ที่รองรับ

ในตัวอย่างข้างต้น เราไฮไลต์วิธีค้นหาสถานะสิทธิ์สำหรับตำแหน่งทางภูมิศาสตร์ด้วยข้อบ่งชี้สิทธิ์ {name:'geolocation'}

โดยข้อบ่งชี้สิทธิ์การแจ้งเตือนจะมีความคล้ายคลึงกันตรงที่เพียงแต่ต้องใช้แอตทริบิวต์ name เท่านั้น: {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');
});

ประเด็นคือ Permission API ช่วยให้สามารถตรวจสอบสถานะของสิทธิ์ได้อย่างสอดคล้องกัน ขณะเดียวกันก็รองรับ API ต่างๆ ที่อยู่บนเว็บได้ในปัจจุบัน

ข้อดีที่สำคัญของวิธีนี้คือช่วยให้คุณสร้างประสบการณ์ที่ดียิ่งขึ้นสำหรับผู้ใช้ โดยแสดงข้อความแจ้งเมื่อผู้ใช้เห็นได้ชัดว่าเหตุใดคุณจึงต้องการสิทธิ์เพิ่มเติมและใช้ประโยชน์อย่างเต็มที่จาก API เหล่านี้เมื่อคุณทราบว่าคุณได้รับสิทธิ์

ดูตัวอย่างทั้งหมดได้ที่นี่

การสนับสนุนเบราว์เซอร์

Chrome เป็นเบราว์เซอร์แรกที่ใช้งาน โดย Mozilla วางแผนที่จะจัดส่งเบราว์เซอร์นี้ และ Microsoft ก็แสดงความสนใจใน API นี้

ปัญหาที่ทราบ

  • ตำแหน่งทางภูมิศาสตร์จะไม่แสดงข้อความแจ้งอีกหากผู้ใช้ปิดคำขอสิทธิ์ แต่สถานะสิทธิ์จะยังคงเป็น "ข้อความแจ้ง" [bugs.chromium.org]