API Quyền cho web

Nếu bạn đã sử dụng API vị trí địa lý có thể trước đây bạn muốn kiểm tra xem bạn có được phép sử dụng Định vị vị trí mà không tạo lời nhắc. Điều này đơn giản là không thể. Bạn phải yêu cầu thông tin vị trí hiện tại. Điều này sẽ cho biết trạng thái cấp quyền hoặc khiến người dùng nhìn thấy lời nhắc.

Không phải API nào cũng hoạt động theo cách này. API Thông báo có cách riêng để cho phép để kiểm tra trạng thái hiện tại của quyền qua Notification.permission.

Khi nền tảng web phát triển theo API, cần phải có một cách thức tiêu chuẩn duy nhất để để nhà phát triển kiểm tra trạng thái của một quyền thay vì phải nhớ cách hoạt động của từng API. API Quyền có trong Chrome phiên bản 43 nhằm mục đích là phương pháp chuẩn và đơn nhất này để kiểm tra trạng thái cấp quyền của một API.

permissions.query()

Kiểm tra trạng thái của một quyền bằng phương thức permissions.query(). Thao tác này sẽ trả lại trạng thái là đã cấp (bạn có quyền), bị từ chối (bạn bị chặn truy cập API) hoặc lời nhắc (nhu cầu người dùng được nhắc). Ví dụ:

// 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);
    };
    });

Phương thức truy vấn sẽ lấy PermissionDescriptor Đối tượng mà bạn xác định tên quyền. Câu trả lời là Lời hứa đang phân giải một PermissionStatus . Từ đối tượng này, bạn có thể kiểm tra trạng thái bằng permissionStatus.state cho " đã cấp", "bị từ chối" hoặc 'nhắc nhở'. Bạn cũng có thể triển khai sự kiện trình xử lý cho permissionStatus.onchange và xử lý các thay đổi đối với quyền trạng thái.

LicenseDescriptor được hỗ trợ

Trong ví dụ trên, chúng tôi nêu bật cách truy vấn trạng thái cấp quyền cho định vị vị trí với phần mô tả quyền sau: {name:'geolocation'}.

Phần mô tả quyền gửi thông báo tương tự ở chỗ nó chỉ yêu cầu một thuộc tính tên: {name:'notifications'}.

Đẩy và Mỗi đoạn mã midi đều có dành riêng cho API đó.

Đối với quyền đẩy, bạn có thể cung cấp tham số userVisibleOnly. Cột này cho biết liệu bạn có muốn hiển thị thông báo cho mọi thông báo đẩy hay không hoặc có thể gửi thông báo đẩy im lặng (Chỉ hiện tại Chrome hỗ trợ thông báo đẩy có thông báo). Bạn sẽ sử dụng như sau:

navigator.permissions.query({name:'push', userVisibleOnly:true})

Midi cho phép tham số sysex. Thông tin này cho biết bạn cần và/hoặc nhận thông báo dành riêng cho hệ thống. Đối với midi, đoạn mã này sẽ là:

navigator.permissions.query({name:'midi', sysex:true})

Yêu cầu quyền

Việc yêu cầu người dùng cấp quyền phụ thuộc vào API cụ thể. Ví dụ: vị trí địa lý sẽ hiển thị lời nhắc cấp quyền khi bạn gọi getCurrentPosition().

navigator.geolocation.getCurrentPosition(function(position) {
    console.log('Geolocation permissions granted');
    console.log('Latitude:' + position.coords.latitude);
    console.log('Longitude:' + position.coords.longitude);
});

Trong khi đó, thông báo sẽ nhắc người dùng khi bạn gọi 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');
});

Vấn đề ở đây là API Quyền cho phép một cách nhất quán để giám sát trạng thái của quyền, đồng thời có thể hỗ trợ nhiều API hiện đang bật trên web.

Ưu điểm lớn nhất của việc này là cho phép bạn tạo trải nghiệm tốt hơn cho người dùng của bạn, chỉ nhắc khi người dùng biết rõ lý do bạn cần thêm và tận dụng tối đa những API này khi biết rằng bạn đã đã cấp quyền.

Bạn có thể xem nhiều ví dụ đầy đủ tại đây.

Hỗ trợ trình duyệt

Chrome là trình duyệt đầu tiên triển khai tính năng này, Mozilla đang lên kế hoạch về việc phân phối điều này và Microsoft đã thể hiện sự quan tâm đến API.

Vấn đề đã biết

  • Vị trí địa lý sẽ không hiển thị lại lời nhắc nếu người dùng đóng cấp quyền của bạn. Tuy nhiên, trạng thái cấp quyền vẫn là "lời nhắc". [bugs.chromium.org]