Mientras hacía una pequeña extensión de Chrome, enfrenté el mismo problema con un problema adicional: veces, la página cambia pero no la URL.
Por ejemplo, solo vaya a la página de inicio de Facebook y haga clic en el botón 'Inicio'. Volverá a cargar la página, pero la URL no cambiará (estilo de aplicación de una página).
El 99% del tiempo, estamos desarrollando sitios web para que podamos obtener esos eventos de Frameworks como Angular, React, Vue, etc.
PERO , en mi caso de una extensión de Chrome (en Vanilla JS), tuve que escuchar un evento que se disparará para cada "cambio de página", que generalmente puede ser detectado por el cambio de URL, pero a veces no.
Mi solución casera fue la siguiente:
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);
}
Básicamente, la solución de Leoneckert, aplicada al historial de ventanas, que cambiará cuando una página cambie en una sola aplicación de página.
No encontré la ciencia de cohetes, sino la solución más limpia, teniendo en cuenta que aquí solo estamos verificando una igualdad de enteros, y no objetos más grandes o todo el DOM.