从Java脚本捕获条形码读取器(键盘按钮)事件
我正在开发一个Web应用程序,必须在运行Android 4.4的霍尼韦尔Dolphin 75e设备上使用。 集成条形码读取器可以在"键盘楔形"模式下运行,但仅当文本字段具有焦点时才能运行。
使用桌面浏览器,我可以使用该代码捕获条形码阅读器事件:
var BarcodesScanner = {
barcodeData: '',
deviceId: '',
symbology: '',
timestamp: 0,
dataLength: 0
};
function onScannerNavigate(barcodeData, deviceId, symbology, timestamp, dataLength){
BarcodesScanner.barcodeData = barcodeData;
BarcodesScanner.deviceId = deviceId;
BarcodesScanner.symbology = symbology;
BarcodesScanner.timestamp = timestamp;
BarcodesScanner.dataLength = dataLength;
$(BarcodesScanner).trigger('scan');
}
BarcodesScanner.tmpTimestamp = 0;
BarcodesScanner.tmpData = '';
$(document).on('keypress', function(e){
e.stopPropagation();
var keycode = (e.keyCode ? e.keyCode : e.which);
if (BarcodesScanner.tmpTimestamp < Date.now() - 500){
BarcodesScanner.tmpData = '';
BarcodesScanner.tmpTimestamp = Date.now();
}
if (keycode == 13 && BarcodesScanner.tmpData.length > 0){
onScannerNavigate(BarcodesScanner.tmpData, 'FAKE_SCANNER', '', BarcodesScanner.tmpTimestamp, BarcodesScanner.tmpData.length);
BarcodesScanner.tmpTimestamp = 0;
BarcodesScanner.tmpData = '';
} else if (e.charCode && e.charCode > 0) {
BarcodesScanner.tmpData += String.fromCharCode(e.charCode);
}
});
$(BarcodesScanner).on('scan', function(e){
alert();
});
不幸的是,它在Android上不起作用。 是否有允许我捕获这些事件的API? 或其他处理此问题的浏览器?
编辑:
我能够使用文本字段作为缓冲区截取条形码阅读器的事件。
但在这种情况下,我不能在应用程序中使用任何需要焦点的控件。这是一个相当大的障碍。
BarcodesScanner.tmpInput = $('<input />', {
type: 'text',
style: 'position: fixed; top: 0; right: 0; width: 0; height: 0;'
});
$('body').append(BarcodesScanner.tmpInput);
setInterval(function(){
BarcodesScanner.tmpInput.focus();
}, 500);
BarcodesScanner.tmpInput.on('input', function(e){
if (BarcodesScanner.tmpInput.val().length > 0){
onScannerNavigate(BarcodesScanner.tmpInput.val(), 'FAKE_SCANNER', 'WEDGE', Date.now(), BarcodesScanner.tmpInput.val().length);
BarcodesScanner.tmpInput.val('')
}
});
解决方案
我终于收到了霍尼韦尔支持人员的功能响应:
终端必须使用最新版本的系统才能看到"Wedge as Key"字段。 别忘了设置" "作为后缀。我怀疑应用程序希望以Keydown/的形式接收数据 快捷键事件。
您能测试一下吗?
在作为关键点设置的楔形上: 9,10,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127
由于手动操作可能需要15分钟,因此我创建了以下内容 您可以在作为关键字的楔形窗口项中读取的代码: 阅读代码后,请等待10秒后保存并检查 如果通过退出和正确地将数据保存到该字段中 正在重新进入扫描仪设置。最后,禁用并重新启用扫描仪(或重新启动设备)。
然后,扫描仪应该可以处理您的应用程序。
希望这能有所帮助。
这样,JS代码将为:
var BarcodesScanner = {
barcodeData: '',
deviceId: '',
symbology: '',
timestamp: 0,
dataLength: 0
};
function onScannerNavigate(barcodeData, deviceId, symbology, timestamp, dataLength){
BarcodesScanner.barcodeData = barcodeData;
BarcodesScanner.deviceId = deviceId;
BarcodesScanner.symbology = symbology;
BarcodesScanner.timestamp = timestamp;
BarcodesScanner.dataLength = dataLength;
$(BarcodesScanner).trigger('scan');
}
BarcodesScanner.tmpTimestamp = 0;
BarcodesScanner.tmpData = '';
$(document).on('keypress', function(e){
e.stopPropagation();
var keycode = (e.keyCode ? e.keyCode : e.which);
if (BarcodesScanner.tmpTimestamp < Date.now() - 500){
BarcodesScanner.tmpData = '';
BarcodesScanner.tmpTimestamp = Date.now();
}
if (keycode == 13 && BarcodesScanner.tmpData.length > 0){
onScannerNavigate(BarcodesScanner.tmpData, 'FAKE_SCANNER', 'WEDGE', BarcodesScanner.tmpTimestamp, BarcodesScanner.tmpData.length);
BarcodesScanner.tmpTimestamp = 0;
BarcodesScanner.tmpData = '';
} else if (e.charCode && e.charCode > 0) {
BarcodesScanner.tmpData += String.fromCharCode(e.charCode);
}
});
现在,您可以收听扫描事件:
$(BarcodesScanner).on('scan', function(e){
alert(BarcodesScanner.barcodeData);
});
我希望这能帮助其他人。
相关文章