API Permissions pour le Web

Si vous avez déjà travaillé avec l'API Geolocation, vous voudrez probablement vérifier si vous aviez l'autorisation d'utiliser la géolocalisation sans afficher d'invite. Ce n'était tout simplement pas possible. Vous avez dû demander le poste actuel, ce qui indiquerait l'état d'autorisation ou entraînerait l'affichage d'une invite à l'utilisateur.

Toutes les API ne fonctionnent pas de cette manière. L'API Notifications a sa propre méthode pour vous permettre de vérifier l'état actuel de l'autorisation via Notification.permission.

À mesure que la plate-forme Web se développe dans les API, les développeurs doivent disposer d'un seul moyen standard pour vérifier l'état d'une autorisation, plutôt que d'avoir à se souvenir du fonctionnement de chaque API. L'API Permission, disponible dans la version 43 de Chrome, est conçue pour vérifier l'état d'autorisation d'une API unique et standard.

permissions.query()

Vérifiez l'état d'une autorisation à l'aide de la méthode permissions.query(). Cela renvoie un état "Accordé" (vous disposez de l'autorisation), "Refusé" (vous ne pouvez pas accéder à l'API) ou une invite (l'utilisateur doit être invité). 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 utilise un objet PermissionDescriptor, dans lequel vous définissez le nom de l'autorisation. La réponse est une promesse résolvant un objet PermissionStatus. À partir de cet objet, vous pouvez vérifier l'état avec permissionStatus.state pour "accordé", "refusé" ou "invite". Vous pouvez également implémenter un gestionnaire d'événements pour permissionStatus.onchange et gérer les modifications de l'état des autorisations.

PermissionDescriptors acceptés

L'exemple ci-dessus montre comment interroger l'état des autorisations de géolocalisation avec le descripteur d'autorisation suivant: {name:'geolocation'}.

Le descripteur d'autorisation de notification est similaire dans la mesure où il ne requiert qu'un attribut de nom: {name:'notifications'}.

Les méthodes Push et midi comportent chacune un paramètre supplémentaire 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 si vous souhaitez pouvoir envoyer des notifications push silencieuses (pour le moment, Chrome n'accepte que les messages push avec des notifications). Voici comment l'utiliser:

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

Midi autorise un paramètre sysex. Il indique si vous devez et/ou recevoir des messages exclusifs au système. Pour MIDI, il s'agit du code suivant:

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

Demander des autorisations

La demande d'autorisation à l'utilisateur dépend de l'API concernée. 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);
});

En revanche, l'utilisateur reçoit une notification 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');
});

Le point ici est que l'API Permission permet de surveiller l'état des autorisations de manière cohérente tout en étant compatible avec la gamme d'API actuellement disponibles sur le Web.

Le principal avantage de cette méthode est qu'elle vous permet de créer de meilleures expériences pour vos utilisateurs, en vous envoyant des invites uniquement lorsqu'il est évident pour les utilisateurs pourquoi vous avez besoin de privilèges supplémentaires et en tirant pleinement parti de ces API lorsque vous savez que l'autorisation vous a été accordée.

Pour consulter une liste complète d'exemples, cliquez ici.

Navigateurs pris en charge

Chrome est le premier navigateur à implémenter cette fonctionnalité. Mozilla prévoit de l'expédier et Microsoft a manifesté de l'intérêt pour l'API.

Problèmes connus

  • Si l'utilisateur ignore la demande d'autorisation, la géolocalisation n'affiche pas à nouveau l'invite. L'état de l'autorisation reste toutefois "requête". [bugs.chromium.org]