Permissions API for the web

Jeśli znasz interfejs API geolokalizacji, być może chcesz sprawdzić, czy masz pozwolenie na korzystanie użyć geolokalizacji bez wywoływania promptu; To po prostu nie było możliwe. Konieczne było wysłanie prośby o bieżącą pozycję, co oznaczałoby stan uprawnień lub spowodowałoby wyświetlenie prośby użytkownika.

Nie wszystkie interfejsy API działają w ten sposób. Interfejs Notification API ma własny sposób możesz sprawdzić bieżący stan uprawnień przez Notification.permission.

W miarę rozwoju platformy internetowej w interfejsach API trzeba znaleźć jeden, standardowy sposób sprawdzania stanu uprawnień przez programistów zamiast zapamiętywać ich stan jak działają poszczególne interfejsy API. Interfejs Permission API (dostępny w Chrome 43) to pojedynczy, standardowy sposób sprawdzania stanu uprawnień interfejsu API.

permissions.query()

Sprawdzanie stanu uprawnień za pomocą metody permissions.query(). Dzięki temu zwróć stan o wartości „przyznano” (masz uprawnienia), odmowa (nie masz dostępu do dostępu do interfejsu API) lub (użytkownik potrzebuje ). Na przykład:

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

Metoda zapytania pobiera PermissionDescriptor gdzie definiuje się nazwę uprawnienia. Odpowiedź to obietnica do PermissionStatus obiektu. Z poziomu tego obiektu możesz sprawdzić jego stan za pomocą narzędzia permissionStatus.state dla „granted”, „denied” lub „prompt”. Możesz też zaimplementować zdarzenie, moduł obsługi dla aplikacji permissionStatus.onchange i obsługuje zmiany uprawnień. stanu.

Obsługiwane deskryptory uprawnień

W powyższym przykładzie pokazujemy, jak wysłać zapytanie o stan uprawnień dla geolokalizacja z tym deskryptorem uprawnień: {name:'geolocation'}.

Deskryptor uprawnień do powiadomień jest podobny, ponieważ wymaga jedynie nazwa: {name:'notifications'}.

Push i midi ma dodatkowe charakterystyczny dla danego interfejsu API.

W przypadku uprawnień push możesz podać parametr userVisibleOnly. Określa, czy chcesz wyświetlać powiadomienie dla każdej wiadomości push lub możliwość wysyłania cichych powiadomień push (obecnie tylko Chrome obsługuje wiadomości push z powiadomieniami). Użyjesz go w ten sposób:

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

Midi dopuszcza parametr sysex. Wskazuje, czy musisz i/lub otrzymać wiadomości przeznaczone tylko dla systemu. W przypadku Midi będzie to:

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

Prośba o uprawnienia

To, czy użytkownik prosi o zgodę, zależy od konkretnego interfejsu API. Przykład: geolokalizacja wyświetli prośbę o przyznanie uprawnień, gdy wywołasz funkcję getCurrentPosition().

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

Z kolei powiadomienia będą pytać użytkownika, gdy zadzwonisz pod numer 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');
});

Chodzi o to, że interfejs Permission API pozwala w spójny sposób monitorować stanu uprawnień przy jednoczesnym obsłudze zakresu interfejsów API, które są obecnie włączone w sieci.

Największą zaletą tego rozwiązania jest to, że pozwala ono zapewnić użytkownikom – wyświetlaj tylko wtedy, gdy jest jasne dla użytkownika, dlaczego potrzebujesz dodatkowych i w pełni wykorzystać możliwości tych interfejsów API, jeśli znasz już pozwolenia na wykorzystanie danych.

Pełny zestaw przykładów znajdziesz tutaj

Obsługa przeglądarek

Chrome jest pierwszą przeglądarką, która wdrożyła tę funkcję, Mozilla planuje dostawę i Microsoft zainteresowała się tym interfejsem API.

Znane problemy

  • Geolokalizacja nie wyświetli ponownie komunikatu, jeśli użytkownik odmówi uprawnienia użytkownika. Stan uprawnień to jednak „prompt”. [bugs.chromium.org]