5

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

我尝试过使用全球听众,例如:

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

MDN 上的 WebRTC 错误仅引用全局错误事件。

4

1 回答 1

1

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

如果您正在寻求一种破解它的方法,那么浏览器中就没有这样的全局事件。NotAllowedError是从调用await navigator.mediaDevices.getUserMedia()

但是,如果您大约知道何时提示用户,那么您可以执行并行请求,如下所示

// 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这样的各种库可以成功地做到这一点。

于 2019-02-08T21:16:43.330 回答