【问题标题】:How to listen to a global event triggered by WebCam Error: NotAllowedError如何监听由 WebCam 错误触发的全局事件:NotAllowedError
【发布时间】:2019-07-02 21:28:01
【问题描述】:

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

【问题讨论】:

    标签: javascript webrtc ar.js


    【解决方案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 必须成功,如果页面已经有摄像头流,则无需再次提示用户。

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

    【讨论】:

    • 这行得通!我测试了 sn-p 将其直接放在 ar.js 包含在 head 之后,并在出现权限提示时触发:... <script src="https://cdn.rawgit.com/jeromeetienne/AR.js/1.6.2/aframe/build/aframe-ar.js"></script> <script> (async ()=> { try { await navigator.mediaDevices.getUserMedia({video: true}); console.log("GOT CAM"); } catch (e) { console.log("GOT ERROR : " + e); } })(); </script> </head> 放置在按下对话框时它将执行的代码中。
    猜你喜欢
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多