Barcode Scanner Emulator
掃描器在 Notepad 中可用但在 POS 中不可用
這是回報最多的條碼問題之一,而且幾乎總是說明掃描器與連線都正常——缺陷在於應用程式如何處理鍵盤輸入。
問題
掃進純文字編輯器每次都能得到正確值,但掃進 POS 系統、Web 應用程式或內部工具時卻一無所獲、只有部分輸入,或行為不正確。
可能原因
- 掃描時目標欄位沒有鍵盤焦點,或者焦點在非輸入元素上
keydown處理常式以阻止字元輸入的方式呼叫了preventDefault()- 應用程式依賴
paste或input事件,而掃描器按鍵並不會按你期望的方式自然觸發它們 - 輸入遮罩或驗證規則運算式拒絕了掃描承載資料中的某個合法字元
- ENTER/TAB 後綴觸發了非預期動作(過早送出表單、關閉強制回應視窗、離開目前頁面)
- 掃描速度快於帶去抖動或節流的輸入處理常式所能登記的每一次按鍵
診斷流程
- 在同一瀏覽器中開啟鍵盤事件測試器並掃描條碼。如果這裡每個字元都正確記錄,說明瀏覽器與作業系統正常收到事件,缺陷在應用程式的事件處理。
- 檢查真實流程中、掃描發生之前輸入欄位是否已取得焦點(不只是測試時你手動點進去的情況)。
- 開啟瀏覽器 DevTools 主控台,查看掃描期間擲出的 JavaScript 錯誤。處理常式中途擲錯可能悄悄停止後續按鍵的處理。
- 暫時拿掉輸入遮罩、驗證或去抖動邏輯再測,以隔離是哪一層丟掉了輸入。
- 檢查應用程式是否聆聽已淘汰且對部分按鍵不可靠的
keypress,而不是keydown/keyup。
如何修復
- 每當流程期望掃描時,都以程式方式讓目標欄位取得焦點(例如剛新增一列之後)
- 用
keydown/keyup取代keypress聆聽器,因為keypress已淘汰,並且對某些鍵處理不一致 - 審查鍵盤處理常式中的
preventDefault()呼叫,確保它們不攔截合法字元鍵 - 放寬輸入遮罩與驗證,使其接受條碼制式可能產生的全部字元範圍,然後驗證組裝後的值,而不是單一按鍵
- 使掃描器後綴與表單預期一致(見ENTER 與 TAB 後綴)