Роблячи невелике розширення з хромом, я зіткнувся з тією ж проблемою і з додатковою проблемою: Іноді сторінка змінюється, але не URL.
Наприклад, просто перейдіть на домашню сторінку Facebook і натисніть кнопку «Головна». Ви перезавантажите сторінку, але URL-адреса не зміниться (стиль однієї сторінки додатка).
У 99% часу ми розробляємо веб-сайти, щоб ми могли отримати такі події з Рамок, як 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.