如何侦听由WebCam错误触发的全局事件:NotAllowedError

时间:2019-02-08 15:39:35

标签: javascript webrtc ar.js

我正在使用ar.js,它使用用户网络摄像头并发出权限提示。我想要的是,如果用户允许或拒绝访问网络摄像头,或者以前已经这样做,则监听此对话框触发的全局事件。

我曾尝试使用以下全局监听器:

 document.documentElement.addEventListener("error", e=>{console.log("GOT ERROR : ", e)})
 window.addEventListener("error", e=>{console.log("GOT ERROR : ", e)});

WebRTC errors on MDN仅引用全局错误事件。

1 个答案:

答案 0 :(得分:1)

我不知道ar.js事件,也无法回答它是否有直接的观察方法。

如果您正在寻求一种破解方法,那么浏览器中就不会出现此类全局事件。 NotAllowedError来自致电await navigator.mediaDevices.getUserMedia()

但是,如果您大概知道何时提示用户,则可以执行并行请求like this

// library
(async () => {
  video.srcObject = await navigator.mediaDevices.getUserMedia({video: true});
})();

// us
(async () => {
  try {
    await navigator.mediaDevices.getUserMedia({video: true});
    console.log("GOT CAM");
  } catch (e) {
    console.log("GOT ERROR : " + e);
  }
})();

这应该给您所需的通知,而不会引起第二个用户提示。

之所以能够正常工作,是因为该规范要求getUserMedia必须成功执行,如果页面已经有摄像头流,则无需再次提示用户。

如果您不知道何时提示,则需要覆盖getUserMedia对象上的navigator.mediaDevices方法。如果需要示例,像adapter.js这样的各种库都可以成功完成此操作。