跳到内容

Barcode Scanner Emulator

扫描器在 Notepad 中可用但在 POS 中不可用

这是报告最多的条码问题之一,而且几乎总是说明扫描器和连接都正常——缺陷在于应用如何处理键盘输入。

问题

扫进纯文本编辑器每次都能得到正确值,但扫进 POS 系统、Web 应用或内部工具时却一无所获、只有部分输入,或行为不正确。

可能原因

  • 扫描时目标字段没有键盘焦点,或者焦点在非输入元素上
  • keydown 处理程序以阻止字符输入的方式调用了 preventDefault()
  • 应用依赖 paste 或 input 事件,而扫描器按键并不会按你期望的方式自然触发它们
  • 输入掩码或校验正则拒绝了扫描载荷中的某个合法字符
  • ENTER/TAB 后缀触发了非预期动作(过早提交表单、关闭模态框、离开当前页面)
  • 扫描速度快于带防抖或节流的输入处理程序所能登记的每一次按键

诊断流程

  1. 在同一浏览器中打开键盘事件测试器并扫描条码。如果这里每个字符都正确记录,说明浏览器和操作系统正常收到事件,缺陷在应用的事件处理。
  2. 检查真实流程中、扫描发生之前输入框是否已聚焦(不只是测试时你手动点进去的情况)。
  3. 打开浏览器 DevTools 控制台,查看扫描期间抛出的 JavaScript 错误。处理程序中途抛错可能悄悄停止后续按键的处理。
  4. 暂时去掉输入掩码、校验或防抖逻辑再测,以隔离是哪一层丢掉了输入。
  5. 检查应用是否监听已弃用且对部分按键不可靠的 keypress,而不是 keydown/keyup。

如何修复

  • 每当流程期望扫描时,都以编程方式聚焦目标字段(例如刚添加一行之后)
  • 用 keydown/keyup 替换 keypress 监听器,因为 keypress 已弃用,并且对某些键处理不一致
  • 审查键盘处理程序中的 preventDefault() 调用,确保它们不拦截合法字符键
  • 放宽输入掩码和校验,使其接受条码码制可能产生的全部字符范围,然后校验组装后的值,而不是单个按键
  • 使扫描器后缀与表单预期一致(见ENTER 与 TAB 后缀)

相关工具

键盘事件测试器 · 条码输入测试器