How to listen to a global event triggered by WebCam Error: NotAllowedError

How to listen to a global event triggered by WebCam Error: NotAllowedError

我正在使用 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 仅引用全局错误事件。

我不知道 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 如果页面已经有摄像头流,则必须成功而不再次提示用户。

如果您不知道它何时会提示,那么您需要覆盖 navigator.mediaDevices 对象上的 getUserMedia 方法。如果您需要示例,adapter.js 等各种库都成功地做到了这一点。