บางครั้งคุณอาจต้องการแจ้งให้เซิร์ฟเวอร์ทราบว่าผู้ใช้กำลังออกจากเพจ สิ่งนี้มีประโยชน์ตัวอย่างเช่นในการล้างข้อมูลรูปภาพที่ไม่ได้บันทึกที่จัดเก็บไว้ชั่วคราวบนเซิร์ฟเวอร์เพื่อทำเครื่องหมายผู้ใช้นั้นเป็น "ออฟไลน์" หรือเพื่อบันทึกเมื่อเสร็จสิ้นเซสชัน
ในอดีตคุณจะส่งคำขอ AJAX ในbeforeunload
ฟังก์ชัน แต่มีปัญหาสองประการ หากคุณส่งคำขอแบบอะซิงโครนัสไม่มีการรับประกันว่าคำขอจะดำเนินการอย่างถูกต้อง หากคุณส่งคำขอแบบซิงโครนัสจะน่าเชื่อถือกว่า แต่เบราว์เซอร์จะหยุดทำงานจนกว่าคำขอจะเสร็จสิ้น หากเป็นการร้องขอที่ช้าผู้ใช้จะไม่สะดวกอย่างมาก
navigator.sendBeacon()
โชคดีที่ตอนนี้เรามี ด้วยการใช้sendBeacon()
วิธีนี้ข้อมูลจะถูกส่งแบบอะซิงโครนัสไปยังเว็บเซิร์ฟเวอร์เมื่อ User Agent มีโอกาสที่จะดำเนินการดังกล่าวโดยไม่ทำให้การยกเลิกการโหลดล่าช้าหรือส่งผลต่อประสิทธิภาพของการนำทางถัดไป วิธีนี้ช่วยแก้ปัญหาทั้งหมดในการส่งข้อมูลการวิเคราะห์: ข้อมูลถูกส่งอย่างน่าเชื่อถือส่งแบบอะซิงโครนัสและไม่ส่งผลกระทบต่อการโหลดหน้าถัดไป นี่คือตัวอย่างการใช้งาน:
window.addEventListener("unload", logData, false);
function logData() {
navigator.sendBeacon("/log.php", analyticsData);
}
sendBeacon()
จะได้รับการสนับสนุนใน:
- ขอบ 14
- Firefox 31
- Chrome 39
- Safari 11.1
- โอเปร่า 26
- iOS Safari 11.4
ขณะนี้ยังไม่รองรับใน:
- Internet Explorer
- โอเปร่ามินิ
นี่คือpolyfill สำหรับ sendBeacon ()ในกรณีที่คุณต้องการเพิ่มการรองรับสำหรับเบราว์เซอร์ที่ไม่รองรับ หากวิธีการดังกล่าวไม่มีอยู่ในเบราว์เซอร์ก็จะส่งคำขอ AJAX แบบซิงโครนัสแทน