Barcode Scanner Emulator
Il lettore funziona in Notepad ma non nel POS
È uno dei problemi di codici a barre più segnalati e significa quasi sempre che lettore e connessione vanno bene: il bug sta nel modo in cui l'applicazione gestisce l'input da tastiera.
Problema
La lettura in un editor di testo semplice produce ogni volta il valore corretto, ma la lettura nel sistema POS, nell'app web o nello strumento interno non produce nulla, un input parziale o un comportamento errato.
Cause possibili
- Il campo di destinazione non ha il focus della tastiera al momento della lettura, oppure il focus è su un elemento che non è un input
- Un gestore
keydownchiamapreventDefault()in un modo che blocca l'inserimento dei caratteri - L'app si affida agli eventi
pasteoinput, che le pressioni del lettore non attivano come ti aspetti - Una maschera di input o una regex di validazione rifiuta un carattere valido del payload letto
- Il suffisso ENTER/TAB attiva un'azione non voluta (invio anticipato del modulo, chiusura di una modale, navigazione altrove)
- La lettura arriva più in fretta di quanto un gestore di input con debounce o throttle riesca a registrare ogni pressione
Flusso diagnostico
- Apri il tester degli eventi tastiera nello stesso browser e leggi il codice a barre. Se ogni carattere viene registrato correttamente qui, browser e sistema operativo ricevono gli eventi: il bug è nella gestione degli eventi della tua app.
- Controlla se il campo di input ha il focus subito prima della lettura nel flusso reale (non solo quando ci fai clic a mano per il test).
- Apri la console DevTools del browser e cerca errori JavaScript lanciati durante la lettura: un errore a metà di un gestore può fermare in silenzio l'elaborazione delle pressioni successive.
- Rimuovi temporaneamente maschera di input, validazione o logica di debounce e riprova per isolare quale livello perde l'input.
- Controlla se l'app ascolta
keypress(deprecato e inaffidabile per alcuni tasti) invece dikeydown/keyup.
Come correggere
- Assicurati che il campo di destinazione riceva il focus da programma ogni volta che il flusso si aspetta una lettura (per esempio subito dopo l'aggiunta di una riga)
- Sostituisci i listener
keypressconkeydown/keyup, perchékeypressè deprecato e gestisce alcuni tasti in modo incoerente - Rivedi le chiamate a
preventDefault()nei gestori tastiera perché non blocchino i tasti carattere legittimi - Allenta maschere e validazione perché accettino l'intero intervallo di caratteri che le tue simbologie possono produrre, poi valida il valore assemblato invece delle singole pressioni
- Allinea il suffisso del lettore a ciò che il modulo si aspetta (vedi Suffissi ENTER e TAB)
Strumenti correlati
Tester degli eventi tastiera · Tester di input dei codici a barre