Разрешение Firefox: имя элемента члена PermissionDescriptor «камера» не является допустимым значением для перечисления PermissionName - PullRequest
0 голосов
/ 05 ноября 2018

Я создаю веб-приложение, которое должно проверять, было ли предоставлено разрешение на доступ к камере пользователя или нет, используя запрос разрешения.

Я пробовал код:

navigator.permissions.query({name:'camera'}).then(function(result) {
 console.log(result);
});

Работает нормально на Google Chrome 70 , но выдает ошибку на firefox:

TypeError: 'name' член PermissionDescriptor 'camera' не является допустимым значением для перечисления PermissionName.

Я искал эту проблему, но ничего не помогло.

Может кто-нибудь помочь мне, пожалуйста?

Спасибо

1 Ответ

0 голосов
/ 05 ноября 2018

API разрешений помечен как экспериментальная технология.

Проблема заключается в том, что Firefox имеет navigator.permissions и поддерживает метод query, однако он не поддерживает все имена разрешений, перечисленные на странице API разрешений MDN .

Вы можете попробовать это сами: зайдите в консоль Firefox и выполните

// geolocation is working fine
navigator.permissions.query({ name: 'geolocation' }).then(console.log)

// camera, microphone is not supported, throws
navigator.permissions.query({ name: 'camera' })
// TypeError: 'name' member of PermissionDescriptor 'camera' is not a valid value for enumeration PermissionName.
navigator.permissions.query({ name: 'microphone' })
// TypeError: 'name' member of PermissionDescriptor 'microphone' is not a valid value for enumeration PermissionName.

В GitHub есть открытая дискуссия в mozilla/standards-positions об их позиции в Permissions API. Честно говоря, как я вижу, они еще не пришли ни к какому выводу.

Что вы можете сделать, так это создать базовую функциональность, которая работает во всех браузерах без информации о разрешениях, а в Chrome вы постепенно улучшаете взаимодействие с пользователем, используя Permissions.query для определения разрешений для камеры и микрофона.

В качестве альтернативы, вы можете придумать логику, чтобы справиться с этим, используя MediaDevices.getUserMedia: например, вы можете позвонить getUserMedia и немедленно остановить дорожки, если единственное, что вам нужно, это убедиться, Ваше приложение имеет разрешения для микрофона и камеры. Будьте осторожны, есть несколько проблем с этим:

  1. свет камеры включится на секунду
  2. если ваш пользователь отказывает в разрешении, вам будет трудно запросить его снова, поэтому, прежде чем запрашивать разрешение, вы должны уточнить для своих пользователей, зачем вам нужны эти разрешения
...