Javascript 斑马线没有探测装置

Javascript 斑马线没有探测装置,javascript,zxing,Javascript,Zxing,rails应用程序正在调用 <div id="sourceSelectPanel" style="display:none"> <label for="sourceSelect">Change video source:</label> <select id="sourceSelect" style="max-width:400px">

rails应用程序正在调用

<div id="sourceSelectPanel" style="display:none">
  <label for="sourceSelect">Change video source:</label>
  <select id="sourceSelect" style="max-width:400px">
  </select>
</div>
<a class="button" id="resetButton">Stop</a>
<a class="button" id="startButton">Go</a>
这是一个建议的例子。注意:随着时间的推移,一行已从
codereder.getVideoInputDevices()
更改为
codereder.listVideoInputDevices()
。影响这一变化的是Sitl的两个错误

但其特点是,有时它可以工作,并显示设备(摄像头)列表,但大多数情况下不工作。当它这样做时,有时会对提交的
startButton
做出反应,相机的内容会出现在视频div中

    <video id="video" width="320" height="180" style="border: 1px solid gray"></video>

这里出了什么问题?下面是这个用例的javascript

  <script type="text/javascript">
window.addEventListener('load', function () {
  let selectedDeviceId;
  const codeReader = new ZXing.BrowserMultiFormatReader()
  console.log('ZXing code reader initialized')
  codeReader.getVideoInputDevices()
    .then((videoInputDevices) => {
      const sourceSelect = document.getElementById('sourceSelect')
      selectedDeviceId = videoInputDevices[0].deviceId
      if (videoInputDevices.length >= 1) {
        videoInputDevices.forEach((element) => {
          const sourceOption = document.createElement('option')
          sourceOption.text = element.label
          sourceOption.value = element.deviceId
          sourceSelect.appendChild(sourceOption)
        })

        sourceSelect.onchange = () => {
          selectedDeviceId = sourceSelect.value;
        };

        const sourceSelectPanel = document.getElementById('sourceSelectPanel')
        sourceSelectPanel.style.display = 'block'
      }

      document.getElementById('startButton').addEventListener('click', () => {
        codeReader.decodeFromVideoDevice(selectedDeviceId, 'video', (result, err) => {
          if (result) {
            console.log(result)
            document.getElementById('result').textContent = result.text
let formData = new FormData();
let CodeParams = {
  code_data: result.text,
  shop_id:  <%= current_shop.id %>
  };
formData.append("code_json_data", JSON.stringify(CodeParams));
$.ajax({
  url: "new_movement",
  type: "post",
  data: formData,
    processData: false,
    contentType: false,
 });
          }
          if (err && !(err instanceof ZXing.NotFoundException)) {
            console.error(err)
            document.getElementById('result').textContent = err
          }
        })
        console.log(`Started continous decode from camera with id ${selectedDeviceId}`)
      })

      document.getElementById('resetButton').addEventListener('click', () => {
        codeReader.reset()
        document.getElementById('result').textContent = '';
        console.log('Reset.')
      })

    })
    .catch((err) => {
      console.error(err)
    })
})

window.addEventListener('load',函数(){
让选择的设备ID;
const codereder=new ZXing.browsermultiformatrader()
console.log('ZXing代码读取器已初始化')
codeReader.getVideoInputDevices()
.然后((视频输入设备)=>{
const sourceSelect=document.getElementById('sourceSelect')
selectedDeviceId=videoInputDevices[0]。deviceId
if(videoInputDevices.length>=1){
videoInputDevices.forEach((元素)=>{
const sourceOption=document.createElement('option'))
sourceOption.text=element.label
sourceOption.value=element.deviceId
sourceSelect.appendChild(sourceOption)
})
sourceSelect.onchange=()=>{
selectedDeviceId=sourceSelect.value;
};
const sourceSelectPanel=document.getElementById('sourceSelectPanel')
sourceSelectPanel.style.display='block'
}
document.getElementById('startButton')。addEventListener('click',()=>{
codeReader.decodeFromVideoDevice(已选择设备ID“video”(结果,错误)=>{
如果(结果){
console.log(结果)
document.getElementById('result').textContent=result.text
设formData=new formData();
设CodeParams={
代码_数据:result.text,
店铺编号:
};
append(“code_json_data”,json.stringify(codeparms));
$.ajax({
网址:“新运动”,
类型:“post”,
数据:formData,
processData:false,
contentType:false,
});
}
if(err&!(err instanceof ZXing.NotFoundException)){
控制台错误(err)
document.getElementById('result')。textContent=err
}
})
log(`StartedContinuous decode from camera with id${selectedDeviceId}`)
})
document.getElementById('resetButton')。addEventListener('click',()=>{
codereder.reset()
document.getElementById('result')。textContent='';
console.log('Reset'))
})
})
.catch((错误)=>{
控制台错误(err)
})
})

事实证明,该脚本需要浏览器SSL连接。不仅在JS上,还有信封页面

在本地主机上运行的东西(有一个例外),但也有一部分(设备菜单将局部显示)和控制台状态
ZXing代码读取器已初始化
这两个事实是混淆的元素

  <script type="text/javascript">
window.addEventListener('load', function () {
  let selectedDeviceId;
  const codeReader = new ZXing.BrowserMultiFormatReader()
  console.log('ZXing code reader initialized')
  codeReader.getVideoInputDevices()
    .then((videoInputDevices) => {
      const sourceSelect = document.getElementById('sourceSelect')
      selectedDeviceId = videoInputDevices[0].deviceId
      if (videoInputDevices.length >= 1) {
        videoInputDevices.forEach((element) => {
          const sourceOption = document.createElement('option')
          sourceOption.text = element.label
          sourceOption.value = element.deviceId
          sourceSelect.appendChild(sourceOption)
        })

        sourceSelect.onchange = () => {
          selectedDeviceId = sourceSelect.value;
        };

        const sourceSelectPanel = document.getElementById('sourceSelectPanel')
        sourceSelectPanel.style.display = 'block'
      }

      document.getElementById('startButton').addEventListener('click', () => {
        codeReader.decodeFromVideoDevice(selectedDeviceId, 'video', (result, err) => {
          if (result) {
            console.log(result)
            document.getElementById('result').textContent = result.text
let formData = new FormData();
let CodeParams = {
  code_data: result.text,
  shop_id:  <%= current_shop.id %>
  };
formData.append("code_json_data", JSON.stringify(CodeParams));
$.ajax({
  url: "new_movement",
  type: "post",
  data: formData,
    processData: false,
    contentType: false,
 });
          }
          if (err && !(err instanceof ZXing.NotFoundException)) {
            console.error(err)
            document.getElementById('result').textContent = err
          }
        })
        console.log(`Started continous decode from camera with id ${selectedDeviceId}`)
      })

      document.getElementById('resetButton').addEventListener('click', () => {
        codeReader.reset()
        document.getElementById('result').textContent = '';
        console.log('Reset.')
      })

    })
    .catch((err) => {
      console.error(err)
    })
})