Ответ 1
Обновить
microphone
был добавлен в API разрешений
Вы можете надеяться, что это будет доступно из API разрешения, но это не так :(
Возможно, в этой функции это могло бы работать как остальная часть этого:
navigator.permissions.query(
// { name: 'camera' }
{ name: 'microphone' }
// { name: 'geolocation' }
// { name: 'notifications' }
// { name: 'midi', sysex: false }
// { name: 'midi', sysex: true }
// { name: 'push', userVisibleOnly: true }
// { name: 'push' } // without userVisibleOnly isn't supported in chrome M45, yet
).then(function(permissionStatus){
console.log(permissionStatus.state); // granted, denied, prompt
permissionStatus.onchange = function(){
console.log("Permission changed to " + this.state);
}
})
Старый ответ
Единственный способ, которым я вижу это возможным, - это если вы сами отслеживаете это с помощью элемента ключ/значение в localStorage, когда запрашиваете разрешение.
К сожалению, он не уведомляет вас, когда он был изменен
// initialization
if( localStorage.getItem('microphone') === null ){
// just assume it is prompt
localStorage.setItem('microphone', 'prompt');
}
// Then somewhere
navigator.getUserMedia({ audio: true }, function (e) {
// http://stackoverflow.com/q/15993581/1008999
//
// In chrome, If your app is running from SSL (https://),
// this permission will be persistent.
// That is, users won't have to grant/deny access every time.
localStorage.setItem("voice_access", "granted");
}, function (err) {
if (err.name === 'PermissionDismissedError') {
localStorage.setItem('voice_access', 'prompt')
}
if (err.name === 'PermissionDeniedError') {
localStorage.setItem('voice_access, 'denied')
}
})
Вы могли бы приложить дополнительные усилия и создать симпатичную небольшую оболочку с этим кодом выше, а также расширить/заменить API разрешения для обработки большего количества имен enum и создать широковещательный API, чтобы сообщать другим вкладкам, когда он изменяется. но зачем делать это так сложно...? LocalStorage нельзя доверять на 100%. его можно изменить где угодно в любое время как с разрешением, так и с очищенным хранилищем