Bạn có thể hy vọng rằng nó sẽ có thể truy cập từ các api phép, nhưng nó không phải là :(
Có lẽ trong tính năng này có thể hoạt động như phần còn lại của điều này:
navigator.permissions.query(
// {name: 'video'} <-- doesn't work
// {name: 'audio'} <-- doesn't work
{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);
}
})
Cách duy nhất tôi thấy có thể là nếu bạn tự theo dõi điều này bằng một mục khóa/giá trị trong localStorage khi bạn yêu cầu quyền.
Đáng tiếc là nó không thông báo cho bạn khi nó đã được thay đổi
// initialization
if(localStorage.getItem("voice_access") === null){
// just assume it is prompt
localStorage.setItem("voice_access", "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");
}
});
Bạn có thể đi những dặm thêm và xây dựng một chút wrapper tốt đẹp với mã này trên và mở rộng/thay thế các api phép xử lý nhiều tên enum hơn và tạo một api broadcast để báo cho các tab khác khi nó thay đổi. nhưng tại sao làm cho nó phức tạp ...? LocalStorage không thể tin cậy 100%. nó có thể được thay đổi bất cứ lúc nào cả khi có quyền và bộ nhớ đã xóa
Anh ấy hỏi cách nhận trạng thái cho phép, điều này có nghĩa là không nhận được luồng phương tiện của người dùng – Endless
Bạn có thể tạo luồng phương tiện bên ngoài vùng màn hình, sau đó bạn có kiểm tra của bạn và người dùng không biết/nhớ. Cũng giống như một khung đệm phía sau cho một trò chơi html5. – Zezura