Я разрабатываю веб-приложение, которое должно использоваться на устройствах Honeywell Dolphin 75e под управлением Android 4.4. Встроенный считыватель штрих-кодов может работать в режиме «клавиатуры», но только в том случае, если текстовое поле имеет фокус.Capture barcode reader (клавиатура-клин) события из javascript
С настольных браузеров я могу использовать этот код, чтобы захватить считыватель штрих-кода события:
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, позволяющий мне захватить эти события? Или другой браузер, который обрабатывает это?
EDIT:
я смог перехватить события считывания штрих-кода с помощью текстового поля в качестве буфера.
Но в этом случае я не могу использовать элементы управления, для которых требуется фокус в моем приложении. Это довольно затруднительно.
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('')
}
});
Спасибо, что поделились, это замечательный материал, и я смотрел на то же самое. Hower, в моем приложении клавиатура появляется каждый раз, когда я делаю сканирование. С этим тоже случается? любые советы о том, как избавиться от него? – user1051218
Обычно клавиатура отображается только на входных полях, так что вы используете решение для захвата, отображаемое в этом ответе, или буфер текстового поля из редактирования исходного вопроса? Вы можете деактивировать его с помощью приложения, такого как Null Keyboard (https://play.google.com/store/apps/details?id=com.wparam.nullkeyboard&hl=fr). Какое у вас устройство? –
Для пользователей Dolphin 75e без опции «Wedge as keys» вам необходимо обратиться в службу поддержки Honeywell, чтобы получить последнюю версию прошивки, поскольку она недоступна на их сайте из-за проблем с лицензированием. Соответствующий файл - 'PARISAD_56.01.13.0173.zip'. – SystemParadox