Barcode Scanner Emulator
Скенерът работи в Notepad, но не в POS
Това е един от най-често съобщаваните проблеми с баркодове и почти винаги означава, че скенерът и връзката са наред — грешката е в начина, по който приложението обработва въвеждането от клавиатура.
Проблем
Сканирането в обикновен текстов редактор всеки път дава правилната стойност, но сканирането в POS системата, уеб приложението или вътрешния инструмент не дава нищо, дава частично въвеждане или грешно поведение.
Възможни причини
- Целевото поле няма фокус на клавиатурата в момента на сканирането, или фокусът е върху елемент, който не е за въвеждане
- Обработчик на
keydownвикаpreventDefault()по начин, който блокира въвеждането на знаци - Приложението разчита на събития
pasteилиinput, които натисканията на скенера не задействат както очаквате - Входна маска или израз за валидиране отхвърля валиден знак в сканирания полезен товар
- Наставката ENTER/TAB задейства нежелано действие (преждевременно изпращане на формуляр, затваряне на модален прозорец, напускане на страницата)
- Сканирането е по-бързо, отколкото обработчик с антидребезг или ограничение може да регистрира всяко натискане
Диагностичен процес
- Отворете тестера за клавишни събития в същия браузър и сканирайте баркода. Ако тук всеки знак се записва правилно, браузърът и операционната система получават събитията добре, така че грешката е в обработката на събития в приложението.
- Проверете дали полето за въвеждане има фокус точно преди сканирането в реалния процес (не само когато щракнете върху него ръчно за теста).
- Отворете конзолата DevTools на браузъра и потърсете грешки в JavaScript по време на сканирането — грешка по средата на обработчик може тихо да спре обработката на следващите натискания.
- Временно махнете входната маска, валидирането или логиката за антидребезг и тествайте отново, за да изолирате кой слой изпуска въвеждането.
- Проверете дали приложението слуша
keypress(остаряло и ненадеждно за някои клавиши) вместоkeydown/keyup.
Как да го поправите
- Уверете се, че целевото поле получава фокус програмно винаги когато процесът очаква сканиране (например веднага след добавяне на ред)
- Заменете слушателите на
keypressсkeydown/keyup, защотоkeypressе остаряло и обработва някои клавиши непоследователно - Прегледайте извикванията на
preventDefault()в обработчиците на клавиатурата, за да не блокират валидни знакови клавиши - Освободете маските и валидирането, за да приемат пълния набор от знаци, който симбологиите могат да дадат, и валидирайте сглобената стойност, а не отделните натискания
- Съгласувайте наставката на скенера с това, което формулярът очаква (вижте Наставки ENTER и TAB)