Barcode Scanner Emulator
الماسح يعمل في Notepad لكنه لا يعمل في POS
هذه من أكثر مشكلات الباركود إبلاغًا، وهي تعني دائمًا تقريبًا أن الماسح والاتصال سليمان: الخلل في كيفية تعامل تطبيقك مع إدخال لوحة المفاتيح.
المشكلة
ينتج المسح في محرر نص عادي القيمة الصحيحة في كل مرة، لكن المسح في نظام POS أو تطبيق الويب أو الأداة الداخلية لا ينتج شيئًا، أو إدخالًا جزئيًا، أو سلوكًا غير صحيح.
الأسباب المحتملة
- الحقل المستهدف لا يملك تركيز لوحة المفاتيح وقت المسح، أو التركيز على عنصر ليس حقل إدخال
- يستدعي معالج
keydownالدالةpreventDefault()بطريقة تمنع إدخال الأحرف - يعتمد التطبيق على أحداث
pasteأوinputالتي لا تطلقها ضغطات الماسح بالطريقة التي تتوقعها - يرفض قناع إدخال أو تعبير تحقق حرفًا صالحًا في الحمولة الممسوحة
- تطلق لاحقة ENTER/TAB إجراءً غير مقصود (إرسال النموذج مبكرًا، أو إغلاق نافذة، أو مغادرة الصفحة)
- يحدث المسح أسرع مما يستطيع معالج مزيل للارتداد أو مقيّد للمعدل تسجيل كل ضغطة
سير التشخيص
- افتح فاحص أحداث لوحة المفاتيح في المتصفح نفسه وامسح الباركود. إذا سُجّل كل حرف هنا بشكل صحيح، فالمتصفح ونظام التشغيل يستقبلان الأحداث جيدًا، والخلل في معالجة أحداث تطبيقك.
- تحقق مما إذا كان حقل الإدخال مركّزًا قبل المسح مباشرة في سير العمل الحقيقي (لا فقط عندما تنقر عليه يدويًا للاختبار).
- افتح وحدة تحكم DevTools في المتصفح وابحث عن أخطاء JavaScript أثناء المسح: خطأ في منتصف المعالج قد يوقف معالجة الضغطات التالية بصمت.
- أزل مؤقتًا أي قناع إدخال أو تحقق أو منطق إزالة ارتداد وأعد الاختبار لعزل الطبقة التي تسقط الإدخال.
- تحقق مما إذا كان تطبيقك يستمع إلى
keypress(مهجور وغير موثوق لبعض المفاتيح) بدلkeydown/keyup.
كيف تصلح
- تأكد من أن الحقل المستهدف يُركَّز برمجيًا كلما توقع سير العمل مسحًا (مثلًا فور إضافة بند)
- استبدل مستمعي
keypressبـkeydown/keyup، لأنkeypressمهجور ويعامل بعض المفاتيح بشكل غير متسق - راجع استدعاءات
preventDefault()في معالجات لوحة المفاتيح حتى لا تمنع مفاتيح الأحرف المشروعة - خفّف الأقنعة والتحقق لقبول نطاق الأحرف الكامل الذي يمكن أن تنتجه ترميزات الباركود، ثم تحقق من القيمة المجمّعة لا من الضغطات المنفردة
- طابق لاحقة الماسح مع ما يتوقعه نموذجك (انظر لاحقات ENTER وTAB)