ในขณะที่ทำการขยายโครเมี่ยมเล็กน้อยฉันประสบปัญหาเดียวกันกับปัญหาเพิ่มเติม: บางครั้งหน้าเปลี่ยนไป แต่ไม่ใช่ URL
ตัวอย่างเช่นเพียงไปที่หน้าแรกของ Facebook และคลิกที่ปุ่ม 'หน้าแรก' คุณจะโหลดหน้าซ้ำ แต่ URL จะไม่เปลี่ยนแปลง (สไตล์แอปหนึ่งหน้า)
99% ของเวลาเราเป็นผู้พัฒนาเว็บไซต์เพื่อให้เราสามารถรับเหตุการณ์เหล่านั้นได้จาก Frameworks เช่น Angular, React, Vue เป็นต้น
แต่ในกรณีของส่วนขยาย Chrome (ใน Vanilla JS) ฉันต้องฟังเหตุการณ์ที่จะก่อให้เกิด "การเปลี่ยนหน้า" แต่ละครั้งซึ่งโดยทั่วไปแล้ว URL อาจถูกจับได้ แต่บางครั้งก็ไม่เป็นเช่นนั้น
โซลูชันโฮมเมดของฉันคือต่อไปนี้:
listen(window.history.length);
var oldLength = -1;
function listen(currentLength) {
if (currentLength != oldLength) {
// Do your stuff here
}
oldLength = window.history.length;
setTimeout(function () {
listen(window.history.length);
}, 1000);
}
ดังนั้นโดยทั่วไปแล้วโซลูชัน leoneckert จะนำไปใช้กับประวัติหน้าต่างซึ่งจะเปลี่ยนไปเมื่อหน้ามีการเปลี่ยนแปลงในแอปหน้าเดียว
ไม่ใช่วิทยาศาสตร์จรวด แต่เป็นวิธีการแก้ปัญหาที่สะอาดที่สุดที่ฉันพบเพราะเรากำลังตรวจสอบความเสมอภาคจำนวนเต็มเท่านั้นไม่ใช่วัตถุที่ใหญ่กว่าหรือ DOM ทั้งหมด