Saat melakukan sedikit ekstensi chrome, saya menghadapi masalah yang sama dengan masalah tambahan: Kadang-kadang, halaman berubah tetapi tidak URL.
Misalnya, cukup buka Beranda Facebook, dan klik tombol 'Beranda'. Anda akan memuat ulang halaman tetapi URL tidak akan berubah (gaya aplikasi satu halaman).
99% dari waktu, kami mengembangkan situs web sehingga kami bisa mendapatkan acara tersebut dari Kerangka seperti Angular, React, Vue dll.
TAPI , dalam kasus ekstensi Chrome saya (di Vanilla JS), saya harus mendengarkan acara yang akan memicu untuk setiap "perubahan halaman", yang umumnya dapat ditangkap oleh URL yang diubah, tetapi kadang-kadang tidak.
Solusi buatan saya adalah sebagai berikut:
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);
}
Jadi pada dasarnya solusi leoneckert, diterapkan pada window history, yang akan berubah ketika suatu halaman berubah dalam satu aplikasi halaman.
Bukan ilmu roket, tetapi solusi terbersih yang saya temukan, mengingat kita hanya memeriksa kesetaraan bilangan bulat di sini, dan bukan objek yang lebih besar atau seluruh DOM.