คอมโพเนนต์แถบนำทางของ BBC พังตามจอนอกที่ใช้งาน
(joshtumath.uk)-
บั๊กในคอมโพเนนต์แถบนำทางของ BBC
- เมื่อไม่นานมานี้ทีมได้แก้บั๊กประหลาดตัวหนึ่ง มีเพียงสมาชิกในทีมคนเดียวที่ทำให้เกิดซ้ำได้ และเกิดขึ้นเฉพาะตอนอยู่ที่บ้าน
-
สาเหตุของบั๊ก
- เมื่อคลิกปุ่ม 'เพิ่มเติม' บนเว็บไซต์ BBC เมนูควรจะเปิดขึ้นมา แต่บนจอนอกกลับไม่ทำงาน
- ปัญหานี้เกิดขึ้นเฉพาะบนจอนอกเท่านั้น และใน Safari ไม่มีปัญหา
-
การทำให้ปัญหาเกิดซ้ำ
- พบว่าบั๊กจะเกิดขึ้นก็ต่อเมื่อวางจอนอกไว้เหนือโน้ตบุ๊กเท่านั้น
- สามารถทำให้ปัญหาเกิดซ้ำได้ด้วยการปรับตำแหน่งจอภาพในตั้งค่าของระบบปฏิบัติการ
-
กระบวนการสืบสวน
- เบาะแสแรก: ใน Safari บั๊กไม่เกิดขึ้น
- เบาะแสที่สอง: จะเกิดขึ้นก็ต่อเมื่อจอนอกอยู่ด้านบนและด้านซ้ายของจอหลัก
- เบาะแสที่สาม: ใน Chrome และ Firefox ค่า
screenXและscreenYเป็นค่าติดลบ - เบาะแสที่สี่: บั๊กจะเกิดขึ้นเฉพาะเมื่อ
screenXและscreenYเป็นค่าติดลบ - เบาะแสที่ห้า: ใน Chrome และ Firefox มุมซ้ายบนของจอหลักคือพิกัด (0,0)
-
วิธีแก้
- เปลี่ยนในฟังก์ชัน
isInvokedByMouseให้ตรวจสอบว่าscreenXและscreenYไม่ใช่ 0 - แม้ปัญหาจะซับซ้อน แต่ทางแก้กลับเรียบง่าย
- โค้ดยังควรต้องรีแฟกเตอร์ แต่แนวทางแก้ปัจจุบันก็เพียงพอแล้ว
- เปลี่ยนในฟังก์ชัน
-
บทเรียนที่ได้
- ควรระวังการตั้งสมมติฐานเกี่ยวกับวิธีการทำงานของ API
- แม้จะมีการทดสอบหลากหลายรูปแบบ แต่ก็ยังไม่พบบั๊กนี้
- ทำให้ได้เรียนรู้ว่าการตั้งค่าจอภาพสามารถทำให้ประสบการณ์ผู้ใช้แตกต่างกันได้
-
แก้ไข 2024-11-19: มีความสับสนเกี่ยวกับการใช้
screenXและได้รีแฟกเตอร์คอมโพเนนต์นำทางแล้ว โดยจะอธิบายกระบวนการรีแฟกเตอร์และตอบคำถามต่าง ๆ ในบล็อกโพสต์ถัดไป
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
อธิบายเหตุผลที่เมนูบนเว็บไซต์ของ BBC ทำงานต่างกันเมื่อเปิดด้วยคีย์บอร์ดและพอยน์เตอร์
clickมีประโยชน์เพราะไม่ขึ้นกับอุปกรณ์เสนอวิธีแก้
isInvokedByMouseโดยตรวจสอบว่าscreenXและscreenYไม่เท่ากับ 0ชื่นชมการลงทุนด้านการเข้าถึงของ BBC และการค้นพบบั๊กนี้
พยายามแก้ปัญหาโดยใช้ server-side template, CSS framework และ JS ให้น้อยที่สุด
ชี้ว่านี่เป็นบั๊กที่เกิดจาก heuristic ที่ผิดพลาด
screenXและscreenYควรเช็กค่าติดลบด้วย ไม่ใช่แค่ค่าบวกตั้งข้อสงสัยว่าเหตุใดเว็บไซต์จึงต้องใช้พิกัดหน้าจอเพื่อหาตำแหน่งเมาส์
clickเพียงอย่างเดียวก็ให้ข้อมูลเพียงพอแล้วสงสัยว่าทำไมเบราว์เซอร์จึงรายงานพิกัดต่างกันตามมอนิเตอร์ที่ใช้อยู่
ถามถึงวิธีที่ถูกต้องในการแยกแยะการคลิกด้วยเมาส์กับการคลิกผ่านคีย์บอร์ด
mousedownและkeydownเห็นว่าควรใช้พิกัด viewport แทนพิกัดหน้าจอ
ประทับใจที่มีการเขียนบล็อกนี้โดยไม่ต้องรอการอนุมัติจากฝ่ายบริหารและฝ่ายกฎหมายของ BBC