Ir para o conteúdo

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 keydown chama preventDefault() de um jeito que bloqueia a entrada de caracteres
  • O app depende de eventos paste ou input que 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

  1. 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.
  2. 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.
  3. 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.
  4. Remova temporariamente máscara, validação ou lógica de debounce e teste de novo para isolar qual camada está descartando a entrada.
  5. Veja se o app escuta keypress (obsoleto e pouco confiável para algumas teclas) em vez de keydown/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 keypress por keydown/keyup, porque keypress está 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