วิธีเดียวที่จะทำสิ่งนี้ได้อย่างแท้จริง (และเป็นวิธีการที่ 'realsimplehistory' ทำอย่างนี้) คือการกำหนดช่วงเวลาที่คอยตรวจสอบแฮชปัจจุบันและเปรียบเทียบกับสิ่งที่เคยเป็นมาก่อนเราทำสิ่งนี้และให้สมาชิกสมัครสมาชิกเพื่อเปลี่ยน เหตุการณ์ที่เราเริ่มต้นหากแฮชเปลี่ยนไป .. มันไม่สมบูรณ์ แต่เบราว์เซอร์ไม่รองรับเหตุการณ์นี้โดยกำเนิด
อัปเดตเพื่อให้คำตอบใหม่อยู่เสมอ:
หากคุณกำลังใช้ jQuery (ซึ่งวันนี้ควรจะเป็นพื้นฐานสำหรับคนส่วนใหญ่) วิธีแก้ปัญหาที่ดีก็คือการใช้ abstraction ที่ jQuery ให้คุณโดยใช้ระบบกิจกรรมเพื่อฟังเหตุการณ์ hashchange บนวัตถุหน้าต่าง
$(window).on('hashchange', function() {
//.. work ..
});
สิ่งที่ดีที่นี่คือคุณสามารถเขียนโค้ดที่ไม่จำเป็นต้องกังวลเกี่ยวกับการสนับสนุน hashchange แต่คุณต้องทำเวทมนต์ในรูปแบบของคุณสมบัติ jQuery ที่รู้จักกันน้อยกว่าjQuery กิจกรรมพิเศษกิจกรรมพิเศษ
ด้วยคุณสมบัตินี้คุณจะต้องเรียกใช้รหัสการตั้งค่าสำหรับเหตุการณ์ใด ๆ เป็นครั้งแรกที่มีคนพยายามใช้เหตุการณ์ในลักษณะใด ๆ (เช่นผูกกับเหตุการณ์)
ในรหัสการตั้งค่านี้คุณสามารถตรวจสอบการสนับสนุนเบราว์เซอร์ดั้งเดิมและหากเบราว์เซอร์ไม่ได้ใช้สิ่งนี้คุณสามารถตั้งค่าตัวจับเวลาเดี่ยวเพื่อสำรวจความเปลี่ยนแปลงและเรียกใช้เหตุการณ์ jQuery
นี้อย่างสมบูรณ์ unbinds รหัสของคุณจากต้องเข้าใจปัญหานี้สนับสนุนการดำเนินงานของกิจกรรมพิเศษชนิดนี้เป็นที่น่ารำคาญ (ง่ายที่จะได้รับรุ่นที่ทำงาน 98%) แต่ทำไมทำอย่างนั้นเมื่อมีคนอื่นที่มีอยู่แล้ว