Javascript 斑马线没有探测装置
rails应用程序正在调用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">
<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)
})
})