Barcode Scanner Emulator
Funciona no Notepad mas falha no POS
Este é um dos problemas de códigos de barras mais comunicados e significa quase sempre que o leitor e a ligação estão bem. O erro está na forma como a aplicação trata a introdução pelo teclado.
Problema
Ler num editor de texto simples produz o valor certo de todas as vezes, mas ler no sistema de POS, na aplicação web ou numa ferramenta interna não produz nada, produz introdução parcial ou um comportamento errado.
Causas possíveis
- O campo de destino não tem foco de teclado no momento da leitura, ou o foco está num elemento que não é de introdução
- Um gestor de
keydownchamapreventDefault()de forma a bloquear a introdução de caracteres - A aplicação depende de eventos
pasteouinputque as premidas do leitor não desencadeiam como se espera - Uma máscara de introdução ou uma expressão regular de validação rejeita um carácter válido da carga lida
- O sufixo ENTER/TAB desencadeia uma ação indesejada (submeter o formulário cedo demais, fechar um modal, navegar para outro lado)
- A leitura é mais rápida do que um gestor com debounce ou throttle consegue registar cada premida
Fluxo de diagnóstico
- Abra o testador de eventos de teclado no mesmo navegador e leia o código. Se cada carácter for registado corretamente aqui, o navegador e o sistema operativo estão a receber os eventos, pelo que o erro está no tratamento de eventos da aplicação.
- Confirme se o campo de introdução tem foco imediatamente antes da leitura no fluxo real, e não apenas quando se clica nele à mão para testar.
- Abra a consola do DevTools do navegador e procure erros de JavaScript lançados durante a leitura. Um erro a meio do gestor pode parar em silêncio o processamento das premidas seguintes.
- Retire temporariamente a máscara, a validação ou a lógica de debounce e volte a testar para isolar a camada que está a descartar a introdução.
- Veja se a aplicação escuta
keypress(obsoleto e pouco fiável para algumas teclas) em vez dekeydown/keyup.
Como corrigir
- Garanta que o campo de destino recebe foco por programação sempre que o fluxo espera uma leitura (por exemplo logo após incluir uma linha)
- Substitua os ouvintes de
keypressporkeydown/keyup, porquekeypressestá obsoleto e trata algumas teclas de forma inconsistente - Reveja as chamadas a
preventDefault()nos gestores de teclado para não bloquearem teclas de carácter legítimas - Afrouxe máscaras e validação para aceitarem toda a gama de caracteres que as simbologias podem produzir e valide o valor composto, não cada premida
- Faça corresponder o sufixo do leitor ao que o formulário espera (ver Sufixos ENTER e TAB)
Ferramentas relacionadas
Testador de eventos de teclado · Testador de introdução de códigos de barras