Как использовать камеру смартфона при доступе к сайту localhost?

Я хочу сделать функцию чтения QR-кодов на своем веб-сайте. У меня есть несколько плагинов javascript, которые могут это сделать. Я уже запускаю скрипт на локальном хосте на своем компьютере, работает очень хорошо. Затем я пытаюсь запустить сценарий на своем смартфоне, получив доступ к IP-адресу моего ноутбука (как я это делаю. Страница загружается хорошо в смартфоне, но не может обнаружить камеру. Вот плагины QR-сканера, которые я пробовал:


person daniel    schedule 18.11.2020    source источник
comment
это проблема настроек безопасности. решение находится здесь:   -  person daniel    schedule 18.11.2020


Ответы (1)


Я кодировал файл javascript сканера штрих-кода уже более года, поэтому у меня возникла эта проблема. Вы пробовали добавить что-то подобное в свой JS? Это обнаружит ваши мультимедийные устройства. Я прикрепил общий сценарий получения пользовательского мультимедиа, который очень похож на то, что я использую. Возможно, вам придется изменить некоторые словоблудие скрипта в зависимости от того, как вы назвали свои элементы, но это должно дать вам то, что вы ищете.

// Older browsers might not implement mediaDevices at all, so we set an empty object first
if (navigator.mediaDevices === undefined) {
  navigator.mediaDevices = {};
}

// Some browsers partially implement mediaDevices. We can't just assign an object
// with getUserMedia as it would overwrite existing properties.
// Here, we will just add the getUserMedia property if it's missing.
if (navigator.mediaDevices.getUserMedia === undefined) {
  navigator.mediaDevices.getUserMedia = function(constraints) {

    // First get ahold of the legacy getUserMedia, if present
    var getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia;

    // Some browsers just don't implement it - return a rejected promise with an error
    // to keep a consistent interface
    if (!getUserMedia) {
      return Promise.reject(new Error('getUserMedia is not implemented in this browser'));
    }

    // Otherwise, wrap the call to the old navigator.getUserMedia with a Promise
    return new Promise(function(resolve, reject) {
      getUserMedia.call(navigator, constraints, resolve, reject);
    });
  }
}

navigator.mediaDevices.getUserMedia({ audio: true, video: true })
.then(function(stream) {
  var video = document.querySelector('video');
  // Older browsers may not have srcObject
  if ("srcObject" in video) {
    video.srcObject = stream;
  } else {
    // Avoid using this in new browsers, as it is going away.
    video.src = window.URL.createObjectURL(stream);
  }
  video.onloadedmetadata = function(e) {
    video.play();
  };
})
.catch(function(err) {
  console.log(err.name + ": " + err.message);
}); 
person Courtney Jo Young    schedule 18.11.2020