ประวัติกล่องโต้ตอบ JavaScript
JavaScript เปิดตัวในปี 1995 และใน JavaScript เวอร์ชันแรกสุดเป็นเมธอดในออบเจ็กต์หน้าต่างที่ชื่อ alert()
confirm()
และ prompt()
แม้ว่ารูปแบบนี้จะเหมาะกับ JavaScript ในขณะนั้น แต่ API แบบซิงโครนัสก็เป็นปัญหาสำหรับเบราว์เซอร์ที่ทันสมัย เนื่องจากเครื่องมือ JavaScript จะต้องหยุดชั่วคราวจนกว่าจะได้รับการตอบสนองของผู้ใช้ กล่องโต้ตอบ JavaScript จึงเป็นโมดัลของแอป และเนื่องจากกล่องโต้ตอบเป็นโมดัลแอป จึงมัก (และน่าเสียดาย) ที่ถูกนำมาใช้เพื่อทำอันตราย ผู้ใช้
ด้วยเหตุนี้ ทีม Chromium จึงไม่แนะนำให้ใช้กล่องโต้ตอบ JavaScript
ตัวเลือกอื่นๆ
การแทนที่กล่องโต้ตอบมีตัวเลือกหลายรายการ
มีตัวเลือกหลายรายการสําหรับ alert()/confirm()/prompt()
สำหรับการแจ้งเตือนผู้ใช้เกี่ยวกับเหตุการณ์ (เช่น เว็บไซต์ปฏิทิน) ควรใช้ Notifications API ในการรับข้อมูลจากผู้ใช้ ควรใช้องค์ประกอบ HTML <dialog>
สำหรับการพิสูจน์แนวคิด XSS คุณสามารถใช้ console.log(document.origin)
ของ devtool
สำหรับ onbeforeunload
โปรดทราบว่ามีความเสถียรอยู่แล้ว ดังที่
Ilya Grigorik ได้บอกไว้ว่า
"คุณไม่สามารถอาศัยเหตุการณ์ pagehide
, beforeunload
และ unload
ให้เริ่มทำงานในแพลตฟอร์มอุปกรณ์เคลื่อนที่" หากต้องการบันทึกสถานะ คุณควรใช้
Page Visibility API
การเปลี่ยนแปลง
ความสามารถของหน้าเว็บในการระบุสตริง onbeforeunload
ได้ถูกนำออกใน Chrome 51
(และถูกลบโดย Safari ที่เริ่มต้นด้วย Safari 9.1 และใน Firefox 4)
กล่องโต้ตอบ alert()/confirm()/prompt()
เปลี่ยนจากการโมดัลแอปเป็นถูกปิดเมื่อสลับแท็บมาจาก การเปลี่ยนแปลงนี้เกิดขึ้นในทุกช่องในช่วงต้นเดือนพฤษภาคม 2017
กล่องโต้ตอบ beforeunload
ต้องใช้ท่าทางสัมผัสของผู้ใช้ในหน้าเว็บเพื่อแสดงการเริ่มต้นใช้งานใน Chrome 60
(การดำเนินการนี้จะไม่เปลี่ยนแปลงการส่งเหตุการณ์ beforeunload
) ซึ่งจะเป็นการปรับให้ Chromium สอดคล้องกับ Firefox ซึ่งทำการเปลี่ยนแปลงนี้ด้วย Firefox 44
การแสดงกล่องโต้ตอบ alert()/confirm()/prompt()
ขณะอยู่ในโหมดเต็มหน้าจอจะทำให้โหมดเต็มหน้าจอหายไป
นับตั้งแต่ Chrome 61 เป็นต้นไป
กล่องโต้ตอบ prompt()
ไม่เปิดใช้งานแท็บ หากมีการเรียก prompt()
จากแท็บพื้นหลัง การเรียกจะกลับมาทันทีและจะไม่มีกล่องโต้ตอบแสดงขึ้น
การเปลี่ยนแปลงนี้เกิดขึ้นในทุกช่องเมื่อต้นเดือนพฤษภาคม 2017
กล่องโต้ตอบ alert()
ไม่เปิดใช้งานแท็บ หากมีการเรียก alert()
จากแท็บพื้นหลัง การเรียกจะกลับมาแสดงทันที แท็บจะมีสัญญาณบอกสถานะอยู่
และผู้ใช้จะเห็นกล่องโต้ตอบนี้เมื่อสลับไปยังแท็บ การเปลี่ยนแปลงลักษณะการทำงานนี้
พบได้ใน Chrome 64
กล่องโต้ตอบ confirm()
ไม่เปิดใช้งานแท็บ หากมีการเรียก confirm()
จากแท็บพื้นหลัง การเรียกจะกลับมาทันทีและจะไม่มีกล่องโต้ตอบแสดงขึ้น
การเปลี่ยนแปลงลักษณะการทำงานนี้พบได้ใน Chrome 69
ด้วยการเปลี่ยนแปลงเหล่านี้ หากเว็บไซต์ใช้กล่องโต้ตอบ เราขอแนะนำอย่างยิ่งให้คุณเปลี่ยนไปใช้ทางเลือกที่พูดถึงก่อนหน้านี้เพื่อไม่ให้ได้รับผลกระทบจากการเปลี่ยนแปลงนี้