Chrome 实现了Permissions APIin navigator.permissions,这也适用于camera和microphone权限。
所以到目前为止,在调用之前getUserMedia(),您可以使用此 API 来查询您的相机和麦克风的权限状态:
navigator.permissions.query({name: 'microphone'})
.then((permissionObj) => {
console.log(permissionObj.state);
})
.catch((error) => {
console.log('Got error :', error);
})
navigator.permissions.query({name: 'camera'})
.then((permissionObj) => {
console.log(permissionObj.state);
})
.catch((error) => {
console.log('Got error :', error);
})
成功时,permissionObj.state将返回denied,granted或prompt。
有用的 SF 问题/答案在这里
对于跨浏览器解决方案,一种简单的方法是监控getUserMedia()Promise 被调用与被拒绝或解决之间的时间差,如下所示:
// In the Promise handlers, if Date.now() - now < 500 then we can assume this is a persisted user setting
var now = Date.now();
navigator.mediaDevices.getUserMedia({audio: true, video: false})
.then(function(stream) {
console.log('Got stream, time diff :', Date.now() - now);
})
.catch(function(err) {
console.log('GUM failed with error, time diff: ', Date.now() - now);
});
这篇Medium 文章提供了更多详细信息。
希望这可以帮助!