เมื่อฉันใช้ปุ่มย้อนกลับบน Firefox เพื่อไปยังหน้าที่เยี่ยมชมก่อนหน้านี้สคริปต์ในหน้านั้นจะไม่ทำงานอีก
ถูกต้องและนั่นเป็นสิ่งที่ดี
เมื่อคุณกดลิงก์ใน Firefox (และ Safari และ Opera) จะไม่ทำลายเพจของคุณทันทีเพื่อไปยังหน้าถัดไป มันทำให้หน้ายังคงอยู่เพียงแค่ซ่อนไม่ให้เห็น หากคุณกดปุ่มย้อนกลับมันจะนำหน้าเก่ากลับมาดูโดยไม่ต้องโหลดเอกสารอีกครั้ง ซึ่งเร็วกว่ามากทำให้การเปลี่ยนหน้าย้อนกลับ / ไปข้างหน้าราบรื่นขึ้นสำหรับผู้ใช้
คุณลักษณะนี้เรียกว่าbfcache bfcache
เนื้อหาใด ๆ ที่คุณเพิ่มลงในเพจระหว่างการโหลดและการใช้งานก่อนหน้านี้ของผู้ใช้จะยังคงอยู่ที่นั่น ตัวจัดการเหตุการณ์ที่คุณแนบกับองค์ประกอบของหน้าจะยังคงแนบอยู่ การหมดเวลา / ช่วงเวลาที่คุณตั้งไว้จะยังคงทำงานอยู่ จึงแทบไม่มีเหตุผลใด ๆ ที่คุณจำเป็นต้องรู้ว่าคุณถูกซ่อนและแสดงอีกครั้ง มันจะผิดที่จะโทรonload
หรือโค้ดสคริปต์แบบอินไลน์อีกครั้งเนื่องจากการเชื่อมโยงและการสร้างเนื้อหาใด ๆ ที่คุณทำในฟังก์ชันนั้นจะดำเนินการเป็นครั้งที่สองในเนื้อหาเดียวกันซึ่งอาจทำให้เกิดผลเสียหายได้ (เช่นdocument.write
ในสคริปต์แบบอินไลน์จะทำลายหน้านี้โดยสิ้นเชิง)
เหตุผลที่เขียนถึง window.onunload
มีผลคือเบราว์เซอร์ที่ใช้ bfcache ได้ตัดสินใจว่า - เพื่อความเข้ากันได้กับเพจที่จำเป็นต้องรู้จริง ๆ ว่าจะถูกทิ้งเมื่อใด - หน้าใด ๆ ที่แจ้งว่ามีความสนใจที่จะรู้ว่าonunload
เกิดขึ้นเมื่อใดจะทำให้ bfcache ปิดการใช้งาน หน้านั้นจะโหลดใหม่เมื่อคุณกลับไปที่หน้านั้นแทนที่จะดึงมาจาก bfcache
ดังนั้นหากคุณตั้งค่า window.onunload= function() {};
สิ่งที่คุณกำลังทำคือจงใจทำลาย bfcache ซึ่งจะส่งผลให้หน้าเว็บของคุณใช้งานได้ช้าและไม่ควรใช้ยกเว้นเป็นทางเลือกสุดท้าย
หากคุณต้องการทราบเมื่อผู้ใช้ออกจากหรือกลับมาที่เพจของคุณโดยไม่ทำให้ bfcache วุ่นวายคุณสามารถดักจับonpageshow
และonpagehide
เหตุการณ์แทน
window.onload=window.onpageshow= function() {
alert('Hello!');
};