Barcode Scanner Emulator
הסורק עובד ב-Notepad אבל לא ב-POS
זו אחת מבעיות הברקוד המדווחות ביותר, והיא כמעט תמיד אומרת שהסורק והחיבור תקינים — הבאג הוא באופן שבו האפליקציה מטפלת בקלט מקלדת.
הבעיה
סריקה לעורך טקסט פשוט מפיקה בכל פעם את הערך הנכון, אבל סריקה למערכת ה-POS, לאפליקציית האינטרנט או לכלי הפנימי לא מפיקה כלום, מפיקה קלט חלקי או התנהגות שגויה.
סיבות אפשריות
- לשדה היעד אין מיקוד מקלדת בזמן הסריקה, או שהמיקוד על רכיב שאינו קלט
- מטפל
keydownקורא ל-preventDefault()באופן שחוסם הזנת תווים - האפליקציה נשענת על אירועי
pasteאוinput, שהקשות הסורק לא מפעילות כפי שציפיתם - מסכת קלט או ביטוי רגולרי לאימות דוחים תו תקין במטען שנסרק
- סיומת ENTER/TAB מפעילה פעולה לא מכוונת (שליחת טופס מוקדמת, סגירת חלון מודאלי, ניווט החוצה)
- הסריקה מהירה יותר ממטפל קלט עם השהיה או הגבלה שיכול לרשום כל הקשה
תהליך אבחון
- פתחו את בודק אירועי מקלדת באותו דפדפן וסרקו את הברקוד. אם כל תו נרשם כאן נכון, הדפדפן ומערכת ההפעלה מקבלים אירועים, ולכן הבאג בטיפול באירועים של האפליקציה.
- בדקו אם שדה הקלט במיקוד ממש לפני שהסריקה מתרחשת בתהליך האמיתי (לא רק כשלוחצים עליו ידנית לבדיקה).
- פתחו את מסוף DevTools של הדפדפן וחפשו שגיאות JavaScript שנזרקות במהלך הסריקה — שגיאה באמצע מטפל יכולה לעצור בשקט את עיבוד ההקשות הבאות.
- הסירו זמנית מסכת קלט, אימות או לוגיקת השהיה ובדקו שוב כדי לבודד איזו שכבה מפילה את הקלט.
- בדקו אם האפליקציה מאזינה ל-
keypress(מיושן ולא אמין לחלק מהמקשים) במקום ל-keydown/keyup.
איך לתקן
- ודאו ששדה היעד מקבל מיקוד באופן תכנותי בכל פעם שהתהליך מצפה לסריקה (למשל מיד אחרי הוספת שורה)
- החליפו מאזיני
keypressב-keydown/keyup, כיkeypressמיושן ומטפל בחלק מהמקשים באופן לא עקבי - עברו על קריאות
preventDefault()במטפלי מקלדת כדי לוודא שהן לא חוסמות מקשי תו לגיטימיים - רככו מסכות ואימות כדי שיקבלו את כל טווח התווים שהסימבולוגיות יכולות להפיק, ואז אמתו את הערך המורכב ולא הקשות בודדות
- התאימו את סיומת הסורק למה שהטופס מצפה לו (ראו סיומות ENTER מול TAB)