Barcode Scanner Emulator
Funciona no Notepad, mas não no POS
Este é um dos problemas de código de barras mais relatados e quase sempre significa que o leitor e a conexão estão bem. O bug está na forma como o aplicativo trata a entrada de teclado.
Problema
Ler num editor de texto simples produz o valor certo toda vez, mas ler no sistema de POS, no app web ou numa ferramenta interna não produz nada, produz entrada parcial ou um comportamento errado.
Causas possíveis
- O campo de destino não tem foco de teclado na hora da leitura, ou o foco está num elemento que não é de entrada
- Um tratador de
keydownchamapreventDefault()de um jeito que bloqueia a entrada de caracteres - O app depende de eventos
pasteouinputque os pressionamentos do leitor não disparam do jeito que você espera - Uma máscara de entrada ou uma regex de validação rejeita um caractere válido da carga lida
- O sufixo ENTER/TAB dispara uma ação indesejada (enviar o formulário cedo demais, fechar um modal, navegar para outro lugar)
- A leitura é mais rápida do que um tratador com debounce ou throttle consegue registrar cada pressionamento
Fluxo de diagnóstico
- Abra o testador de eventos de teclado no mesmo navegador e leia o código. Se cada caractere for registrado certo aqui, o navegador e o sistema operacional estão recebendo os eventos bem, então o bug está no tratamento de eventos do app.
- Confira se o campo de entrada está com foco logo antes da leitura no fluxo real, e não só quando você clica nele na mão para testar.
- Abra o console do DevTools do navegador e procure erros de JavaScript lançados durante a leitura. Um erro no meio do tratador pode parar em silêncio o processamento dos pressionamentos seguintes.
- Remova temporariamente máscara, validação ou lógica de debounce e teste de novo para isolar qual camada está descartando a entrada.
- Veja se o app escuta
keypress(obsoleto e pouco confiável para algumas teclas) em vez dekeydown/keyup.
Como corrigir
- Garanta que o campo de destino receba foco por código sempre que o fluxo esperar uma leitura (por exemplo logo depois de incluir um item de linha)
- Troque ouvintes de
keypressporkeydown/keyup, porquekeypressestá obsoleto e trata algumas teclas de forma inconsistente - Revise chamadas de
preventDefault()nos tratadores de teclado para elas não bloquearem teclas de caractere legítimas - Afrouxe máscaras e validação para aceitar toda a faixa de caracteres que as simbologias podem produzir e valide o valor montado, não cada pressionamento
- Case o sufixo do leitor com o que o formulário espera (veja Sufixos ENTER e TAB)
Ferramentas relacionadas
Testador de eventos de teclado · Testador de entrada de código de barras