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
и немедленно остановить дорожки, если единственное, что вам нужно, это убедиться, Ваше приложение имеет разрешения для микрофона и камеры. Будьте осторожны, есть несколько проблем с этим:
- свет камеры включится на секунду
- если ваш пользователь отказывает в разрешении, вам будет трудно запросить его снова, поэтому, прежде чем запрашивать разрешение, вы должны уточнить для своих пользователей, зачем вам нужны эти разрешения