Как прослушать глобальное событие, вызванное ошибкой веб-камеры: NotAllowedError - PullRequest
0 голосов
/ 08 февраля 2019

Я использую ar.js, который использует веб-камеру пользователя и выдает запрос на разрешение для этого.Я хочу прослушать глобальное событие, вызванное этим диалогом, если пользователь либо разрешает, либо запрещает доступ к веб-камере, либо делал это ранее.

Я пробовал с глобальными слушателями, такими как:

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

Ошибки WebRTC на MDN ссылаются только на события глобальных ошибок.

1 Ответ

0 голосов
/ 09 февраля 2019

Я не знаю 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 , делают это успешно, если вам нужен пример.

...