Als u eerder met de Geolocation API heeft gewerkt, is de kans groot dat u wilde controleren of u toestemming had om Geolocation te gebruiken zonder dat er een prompt werd gegeven. Dit was simpelweg niet mogelijk. U moest de huidige positie opvragen en dit zou de toestemmingsstatus aangeven of ervoor zorgen dat een prompt aan de gebruiker werd getoond.
Niet alle API's werken op deze manier. De Notifications API heeft zijn eigen manier om u de huidige toestemmingsstatus te laten controleren via Notification.permission .
Naarmate het webplatform groeit in API's, moet er één standaardmanier zijn voor ontwikkelaars om de status van een toestemming te controleren, in plaats van te moeten onthouden hoe elke API werkt. De Permission API , beschikbaar in Chrome versie 43 , is bedoeld als enige standaardmanier om de toestemmingsstatus van een API te controleren.
permissies.query()
Controleer de status van een machtiging met behulp van de methode permissions.query()
. Dit retourneert de status Toegekend (u heeft toestemming), Geweigerd (u heeft geen toegang tot de API) of Vraag (de gebruiker moet worden gevraagd). Bijvoorbeeld:
// 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);
};
});
De querymethode gebruikt een PermissionDescriptor- object, waarin u de naam van de machtiging definieert. Het antwoord is een Promise die wordt omgezet in een PermissionStatus- object. Vanuit dit object kunt u de status controleren met permissionStatus.state
op 'granted', 'denied' of 'prompt'. U kunt ook een gebeurtenishandler voor permissionStatus.onchange
implementeren en wijzigingen in de machtigingsstatus afhandelen.
Ondersteunde PermissionDescriptors
In het bovenstaande voorbeeld benadrukken we hoe u de toestemmingsstatus voor geolocatie kunt opvragen met de volgende toestemmingsdescriptor: {name:'geolocation'}
.
De descriptor voor de machtiging voor meldingen is vergelijkbaar in die zin dat deze alleen een naamattribuut vereist: {name:'notifications'}
.
Push en midi hebben elk een extra parameter die specifiek is voor die API.
Voor de push-machtiging kunt u een parameter userVisibleOnly
opgeven. Hier wordt aangegeven of je bij ieder pushbericht een notificatie wilt tonen of stille pushmeldingen wilt kunnen versturen (momenteel ondersteunt Chrome alleen pushberichten met notificaties). Je zou het zo gebruiken:
navigator.permissions.query({name:'push', userVisibleOnly:true})
Midi staat een sysex
parameter toe. Dit geeft aan of u systeemexclusieve berichten moet en/of ontvangen. Voor midi zou dit zijn:
navigator.permissions.query({name:'midi', sysex:true})
Toestemmingen aanvragen
Het vragen van toestemming aan de gebruiker is afhankelijk van de specifieke API. Geolocatie zou bijvoorbeeld een toestemmingsprompt weergeven wanneer u getCurrentPosition()
aanroept.
navigator.geolocation.getCurrentPosition(function(position) {
console.log('Geolocation permissions granted');
console.log('Latitude:' + position.coords.latitude);
console.log('Longitude:' + position.coords.longitude);
});
Terwijl meldingen de gebruiker zouden vragen wanneer u requestPermission()
aanroept.
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');
});
Het punt hier is dat de Permission API een consistente manier biedt om de status van machtigingen te controleren en tegelijkertijd de reeks API's die momenteel op internet beschikbaar zijn, te ondersteunen.
Het grote voordeel hiervan is dat u betere ervaringen voor uw gebruikers kunt opbouwen, waarbij u alleen wordt gevraagd wanneer het voor de gebruiker duidelijk is waarom u extra rechten nodig heeft en u optimaal gebruik kunt maken van deze API's wanneer u weet dat u toestemming heeft gekregen.
Een volledige reeks voorbeelden vindt u hier .
Browserondersteuning
Chrome is de eerste browser die dit implementeert, Mozilla is van plan dit op de markt te brengen en Microsoft heeft interesse getoond in de API.
Bekende problemen
- Geolocatie zal niet opnieuw een prompt weergeven als de gebruiker het toestemmingsverzoek afwijst. De toestemmingsstatus blijft echter 'prompt'. [ bugs.chromium.org ]