Barcode Scanner Emulator
اسکنر در Notepad کار میکند اما در POS نه
این یکی از پرگزارشترین مشکلات بارکد است و تقریباً همیشه یعنی اسکنر و اتصال سالماند — اشکال در شیوه مدیریت ورودی صفحهکلید توسط برنامه شماست.
مشکل
خواندن در ویرایشگر متن ساده هر بار مقدار درست میدهد، اما خواندن در سامانه POS، برنامه وب یا ابزار داخلی هیچ، ورودی ناقص، یا رفتار نادرست تولید میکند.
علتهای ممکن
- فیلد مقصد هنگام اسکن فوکوس صفحهکلید ندارد، یا فوکوس روی عنصری است که ورودی نیست
- گرداننده
keydownتابعpreventDefault()را طوری فراخوانی میکند که ورود نویسه را میبندد - برنامه به رویدادهای
pasteیاinputتکیه دارد که ضربهکلیدهای اسکنر آنطور که انتظار دارید بهطور طبیعی راه نمیاندازند - ماسک ورودی یا عبارت منظم اعتبارسنجی یک نویسه معتبر در محموله خواندهشده را رد میکند
- پسوند ENTER/TAB عملی ناخواسته راه میاندازد (ارسال زودهنگام فرم، بستن مودال، رفتن به جای دیگر)
- اسکن سریعتر از آن است که گرداننده ورودی با تأخیر یا محدودسازی بتواند هر ضربهکلید را ثبت کند
گردشکار تشخیص
- آزمایشگر رویداد صفحهکلید را در همان مرورگر باز کنید و بارکد را بخوانید. اگر هر نویسه اینجا درست ثبت شود، مرورگر و سیستمعامل رویدادها را درست میگیرند، پس اشکال در مدیریت رویداد برنامه شماست.
- بررسی کنید در گردشکار واقعی، درست پیش از اسکن، فیلد ورودی فوکوس دارد (نه فقط وقتی برای آزمون دستی روی آن کلیک میکنید).
- کنسول DevTools مرورگر را باز کنید و خطاهای جاوااسکریپت پرتابشده هنگام اسکن را ببینید — خطایی در میانه گرداننده میتواند پردازش ضربههای بعدی را بیصدا متوقف کند.
- ماسک ورودی، اعتبارسنجی یا منطق تأخیر را موقتاً بردارید و دوباره بیازمایید تا لایه حذفکننده ورودی جدا شود.
- بررسی کنید برنامه بهجای
keydown/keyupبهkeypressگوش میدهد یا نه (keypressمنسوخ است و برای برخی کلیدها نامطمئن).
چگونه رفع کنیم
- مطمئن شوید هرگاه گردشکار انتظار اسکن دارد، فیلد مقصد بهصورت برنامهای فوکوس میگیرد (مثلاً بلافاصله پس از افزودن یک سطر)
- شنوندگان
keypressرا باkeydown/keyupعوض کنید، چونkeypressمنسوخ است و برخی کلیدها را ناسازگار مدیریت میکند - فراخوانیهای
preventDefault()در گردانندههای صفحهکلید را مرور کنید تا کلیدهای نویسه مشروع را نبندند - ماسکها و اعتبارسنجی را شل کنید تا تمام بازه نویسهای را که نمادشناسیهای بارکد میتوانند بسازند بپذیرند، سپس مقدار سرهمشده را اعتبارسنجی کنید نه ضربهکلیدهای جدا را
- پسوند اسکنر را با آنچه فرم انتظار دارد جور کنید (نگاه کنید به پسوندهای ENTER در برابر TAB)