ข้ามไปยังเนื้อหา

Barcode Scanner Emulator

เครื่องสแกนใช้ได้ใน Notepad แต่ใช้ไม่ได้ใน POS

นี่เป็นปัญหาบาร์โค้ดที่ถูกรายงานบ่อยที่สุดอย่างหนึ่ง และแทบจะหมายความเสมอว่าเครื่องสแกนและการเชื่อมต่อใช้ได้ บั๊กอยู่ที่วิธีที่แอปจัดการอินพุตแป้นพิมพ์

ปัญหา

การสแกนลงในโปรแกรมแก้ไขข้อความธรรมดาให้ค่าที่ถูกทุกครั้ง แต่การสแกนลงในระบบ POS เว็บแอป หรือเครื่องมือภายในไม่ให้อะไร ให้เพียงบางส่วน หรือพฤติกรรมผิด

สาเหตุที่เป็นไปได้

  • ช่องเป้าหมายไม่มีโฟกัสแป้นพิมพ์ตอนสแกน หรือโฟกัสอยู่ที่องค์ประกอบที่ไม่ใช่ช่องป้อนข้อมูล
  • ตัวจัดการ keydown เรียก preventDefault() ในแบบที่บล็อกการป้อนอักขระ
  • แอปพึ่งเหตุการณ์ paste หรือ input ซึ่งการกดแป้นของเครื่องสแกนไม่ได้กระตุ้นตามที่คุณคาด
  • มาสก์อินพุตหรือนิพจน์ปกติสำหรับตรวจสอบปฏิเสธอักขระที่ถูกต้องในข้อมูลที่สแกน
  • ส่วนต่อท้าย ENTER/TAB กระตุ้นการกระทำที่ไม่ตั้งใจ (ส่งฟอร์มก่อนเวลา ปิดหน้าต่างโมดัล นำทางออก)
  • การสแกนเร็วกว่าตัวจัดการอินพุตที่มี debounce หรือ throttle จะลงทะเบียนการกดแป้นทุกครั้งได้ทัน

ขั้นตอนวินิจฉัย

  1. เปิด ตัวทดสอบเหตุการณ์แป้นพิมพ์ ในเบราว์เซอร์เดียวกันแล้วสแกนบาร์โค้ด หากทุกอักขระถูกบันทึกถูกต้องที่นี่ เบราว์เซอร์และระบบปฏิบัติการรับเหตุการณ์ได้ดี บั๊กจึงอยู่ที่การจัดการเหตุการณ์ของแอป
  2. ตรวจว่าช่องป้อนข้อมูลมีโฟกัสทันทีก่อนสแกนในเวิร์กโฟลว์จริงหรือไม่ (ไม่ใช่แค่ตอนคุณคลิกเองระหว่างทดสอบ)
  3. เปิดคอนโซล DevTools ของเบราว์เซอร์แล้วหาข้อผิดพลาด JavaScript ที่ถูกโยนระหว่างสแกน ข้อผิดพลาดกลางตัวจัดการอาจหยุดประมวลผลการกดแป้นถัดไปอย่างเงียบ ๆ
  4. ถอดมาสก์อินพุต การตรวจสอบ หรือตรรกะ debounce ชั่วคราวแล้วทดสอบใหม่เพื่อแยกชั้นที่ทิ้งอินพุต
  5. ตรวจว่าแอปฟัง keypress (เลิกใช้แล้วและไม่น่าเชื่อถือกับบางแป้น) แทน keydown/keyup หรือไม่

วิธีแก้

  • ให้ช่องเป้าหมายได้รับโฟกัสจากโปรแกรมทุกครั้งที่เวิร์กโฟลว์คาดว่าจะมีการสแกน (เช่น ทันทีหลังเพิ่มรายการ)
  • แทนที่ตัวฟัง keypress ด้วย keydown/keyup เพราะ keypress เลิกใช้แล้วและจัดการบางแป้นไม่สม่ำเสมอ
  • ตรวจการเรียก preventDefault() ในตัวจัดการแป้นพิมพ์ว่าไม่บล็อกแป้นอักขระที่ถูกต้อง
  • ผ่อนมาสก์และการตรวจสอบให้รับช่วงอักขระเต็มที่สัญลักษณ์บาร์โค้ดของคุณสร้างได้ แล้วตรวจสอบค่าที่ประกอบแล้วแทนการกดแป้นทีละครั้ง
  • จับคู่ส่วนต่อท้ายของเครื่องสแกนกับที่ฟอร์มคาดไว้ (ดู ส่วนต่อท้าย ENTER และ TAB)

เครื่องมือที่เกี่ยวข้อง

ตัวทดสอบเหตุการณ์แป้นพิมพ์ · ตัวทดสอบอินพุตบาร์โค้ด