Si vous avez déjà travaillé avec l'API Geolocation auparavant, vous auriez probablement voulu vérifier si vous aviez l’autorisation d’utiliser la géolocalisation sans générer de requête ; Cela n'était tout simplement pas possible. Vous deviez demander la position actuelle, ce qui indiquerait l'état d'autorisation ou entraînerait l'affichage d'une invite auprès de l'utilisateur.
Toutes les API ne fonctionnent pas de cette manière. L'API Notifications dispose de sa propre méthode pour autoriser de vérifier l'état actuel des autorisations via Notification.permission.
À mesure que la plate-forme Web se développe dans les API, il doit y avoir un moyen unique et standard pour aux développeurs de vérifier l'état d'une autorisation plutôt que d'avoir à se souvenir le fonctionnement de chaque API. L'API Permission, disponible dans la version 43 de Chrome, est destiné à être cette méthode unique et standard pour vérifier l'état d'autorisation d'une API.
permissions.query()
Vérifiez l'état d'une autorisation à l'aide de la méthode permissions.query()
. Cela permettra
renvoyez l'état "accordé" (vous avez l'autorisation), "refusé" (vous n'avez pas accès
accéder à l'API) ou
(besoin de l'utilisateur
s'affiche à l'écran). Exemple :
// 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);
};
});
La méthode de requête prend une
PermissionDescriptor
, dans lequel vous définissez le nom de l'autorisation. La réponse est une promesse
résoudre dans un
PermissionStatus
. À partir de cet objet, vous pouvez vérifier l'état avec permissionStatus.state
.
pour "accordé" ou "refusé" ou « requête ». Vous pouvez aussi ajouter un événement
pour permissionStatus.onchange
et gérer les modifications de l'autorisation
de l'état.
PermissionDescriptors compatibles
Dans l'exemple ci-dessus, nous montrons comment interroger l'état d'autorisation pour
avec le descripteur d'autorisation suivant: {name:'geolocation'}
.
Le descripteur d'autorisation de notification est similaire en ce sens qu'il ne nécessite qu'un
Attribut de nom: {name:'notifications'}
.
Push et midi ont chacun un spécifique à cette API.
Pour l'autorisation push, vous pouvez fournir un paramètre userVisibleOnly
.
Indique si vous souhaitez afficher une notification pour chaque message push
ou envoyer des notifications push silencieuses. Pour le moment,
prend en charge les messages push avec notifications). Vous l'utiliseriez comme ceci:
navigator.permissions.query({name:'push', userVisibleOnly:true})
Midi autorise un paramètre sysex
. Il indique si vous devez et/ou recevoir
des messages propres au système. Pour Midi, voici le résultat:
navigator.permissions.query({name:'midi', sysex:true})
Demander des autorisations
La demande d'autorisation à l'utilisateur dépend de l'API spécifique. Par exemple :
la géolocalisation affiche une invite d'autorisation lorsque vous appelez getCurrentPosition()
.
navigator.geolocation.getCurrentPosition(function(position) {
console.log('Geolocation permissions granted');
console.log('Latitude:' + position.coords.latitude);
console.log('Longitude:' + position.coords.longitude);
});
tandis que les notifications invitent l'utilisateur lorsque vous appelez 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');
});
L'idée ici est que l'API Permission permet de surveiller de manière cohérente l'état des autorisations tout en étant en mesure de prendre en charge la gamme d'API actuellement sur le Web.
Son principal avantage est qu'elle vous permet de créer de meilleures expériences pour vos utilisateurs, en n'invitant que s'il est évident pour l'utilisateur pourquoi vous avez besoin et de tirer pleinement parti de ces API lorsque vous savez autorisation accordée.
Pour consulter la liste complète d'exemples, cliquez ici.
Navigateurs pris en charge
Chrome est le premier navigateur à implémenter cette fonctionnalité, Mozilla prévoit d'expédier cette fonctionnalité. et Microsoft ont manifesté de l'intérêt pour l'API.
Problèmes connus
- L'invite de géolocalisation ne s'affichera pas si l'utilisateur ignore l'autorisation. requête. Toutefois, l'état de l'autorisation reste "requête". [bugs.chromium.org]