Saltar al contenido

Barcode Scanner Emulator

El escáner funciona en Notepad pero no en el POS

Esta es una de las fallas de códigos de barras que más se reportan, y casi siempre quiere decir que el escáner y la conexión están bien. El bug está en cómo tu app maneja la entrada de teclado.

Problema

Escanear en un editor de texto plano da el valor correcto todas las veces. Escanear en el POS, en la app web o en la herramienta interna no da nada, da una entrada a medias o un comportamiento equivocado.

Causas posibles

  • El campo de destino no tiene el foco del teclado al momento del escaneo, o el foco está en un elemento que no es de entrada
  • Un manejador de keydown llama a preventDefault() de una forma que bloquea la entrada de caracteres
  • La app depende de eventos paste o input que los teclazos del escáner no disparan como esperas
  • Una máscara de entrada o una expresión de validación rechaza un carácter válido de la carga escaneada
  • El sufijo ENTER/TAB dispara una acción que no querías: enviar el formulario antes de tiempo, cerrar un modal o salir de la pantalla
  • El escaneo es más rápido de lo que un manejador con debounce o throttle alcanza a registrar en cada teclazo

Flujo de diagnóstico

  1. Abre el Inspector de eventos de teclado en el mismo navegador y escanea el código. Si ahí se registra cada carácter bien, el navegador y el sistema operativo están recibiendo los eventos. La falla está en el manejo de eventos de tu app.
  2. Revisa si el campo de entrada tiene el foco justo antes del escaneo en el flujo real, no solo cuando haces clic a mano para probar.
  3. Abre la consola de DevTools del navegador y busca errores de JavaScript lanzados durante el escaneo. Un error a mitad de un manejador puede cortar en silencio el resto de los teclazos.
  4. Quita por un momento la máscara, la validación o la lógica de debounce y vuelve a probar. Así aíslas qué capa está botando la entrada.
  5. Revisa si la app escucha keypress (obsoleto y poco confiable con algunas teclas) en lugar de keydown/keyup.

Cómo corregirlo

  • Asegúrate de que el campo de destino reciba el foco desde el código cada vez que el flujo espera un escaneo, por ejemplo justo después de agregar una línea
  • Cambia los listeners de keypress por keydown/keyup. keypress está obsoleto y trata algunas teclas de forma inconsistente
  • Revisa las llamadas a preventDefault() en los manejadores de teclado para que no bloqueen teclas de carácter válidas
  • Afloja las máscaras y la validación para que acepten todo el rango de caracteres que pueden producir tus simbologías, y valida el valor ya armado, no cada teclazo
  • Iguala el sufijo del escáner con lo que espera el formulario (mira Sufijos ENTER y TAB)

Herramientas relacionadas

Inspector de eventos de teclado · Verificador de entrada de códigos de barras