2016-12-18 4 views
4

요청하기 전에 카메라/마이크가 필요한 이유를 사용자에게 설명하여 권한 부여를 원할 경우 더 나은 선택을 할 수 있도록하고 싶습니다.요청하기 전에 UserMedia 권한을 감지하십시오.

그 것을 구현하려면 이전에 허가가으로 주어 졌는지 탐지 할 방법이 필요합니다. 그래야 실제로 요청하기 전에 사용자에게 요청을 설명 할 수 있습니다. 나는 또한 매번 (비록 내가 이미 허가를 가지고 있음에도 불구하고) 묻고 싶지 않다. 아직 당신이 전에 그들에게 물어 왔 것을 기억하는 것이 device.label == ""
허용 device.label! = ""

답변

5
navigator.mediaDevices.enumerateDevices().then(devices => 
    devices.forEach(device => console.log(device.label))) 

예.

일부 브라우저는 사용자가 카메라 또는 마이크 사용에 대한 권한을 부여 할 수 있도록 허용하므로 사용자가 매 시간마다 묻지 않으려는 경우 영구 액세스 권한이 있는지 여부에 메시지를 묶지 마십시오 . 다른 답변에서 언급

navigator.mediaDevices.enumerateDevices 트릭은 현재 및/또는 마이크 상당히 잘 카메라에 지속적인 권한을 감지 -하지만 당신은 모르는 어느 하나 또는 둘 다 부여했는지.

또한 단일 사용 권한 사용 사례를 부분적으로 지원하기 위해 카메라 및/또는 마이크 영구 액세스 레이블의 액세스를 해제하도록 사양이 최근에 업데이트되어 시간이 지날 수도 있습니다. 브라우저가 사양을 업데이트하면 더 이상 이러한 상황에서 영구적 인 카메라 및/또는 마이크 권한을 암시하지 않습니다.

권한 지속되었는지 여부에 대한 장기적인 대답은 query을 사용하는 것입니다,하지만 당신이 실행 볼 수있는 브라우저가 "camera""microphone"에 대한 (또는 모든 경우에) 아직 지원하지 않습니다

navigator.permissions.query({name: "camera"}) 
 
.then(({status}) => console.log(status), 
 
     e => console.log(e.name +": "+ e.message));

+0

이 작업에는 장치가 감지되지 않을 경우? 작동하도록 보장 된 문서가 있습니까? – Dodekeract

+0

예, 장치가없는 경우이 방법을 사용할 수 없습니다. 나는 문서를 모른다. –

+0

장치를 반환하지 않으면 권한을 요청할 것이 없습니다. 그래도 좋습니다. 그러나 *** 카메라 *** 또는 *** 마이크가 부여 된 경우 라벨에 표시되므로 일부 사용자에게는 여전히 메시지가 표시 될 수 있습니다. 또한 Chrome 이외의 브라우저에서는 영구 액세스 권한을 명시 적으로 설정 한 사용자를 제외하고는 항상 이러한 방식으로 사용자를 버그 처리합니다. 또한, 다른 답변에서 언급했듯이, 이것은 미래에 깨질 가능성이 있습니다. – jib

3

사용 쿠키 나 localStorage을 허용하지

+1

이 사양이 곧 구현되기를 바랍니다. –

+1

사용자가 처음 방문자를 대상으로 할 때까지 최적이 아닌 워크 플로우를 처리하여 영구적 인 권한을 부여하도록 오용하지 않기를 바랍니다. 사용자는 카메라와 마이크가 켜지는 시점을 정확하게 제어하는 ​​것을 선호합니다. – jib

관련 문제