Angular2: ¿Cómo prevenir / anular la manipulación del historial al implementar el routerCanDeactivate?

routerCanDeactivate() evita con éxito la navegación fuera del componente.

 routerCanDeactivate(nextInstruction: ComponentInstruction, prevInstruction: ComponentInstruction) { return confirm("Do you want to discard unsaved changes ?"); } 

Pero si la navegación es causada por el botón de back navegador o cualquier otro disparador de history.back() ,

entonces no mantiene el historial intacto y activa popState en cada disparo y, finalmente, navega a la página de inicio del navegador (probado en Chrome).


EDITAR:

Guardé la URL del componente actual en una variable currentLocation y

Trató de manipular la history con history api pero

Simplemente no se pudo averiguar el orden correcto de las llamadas de API necesarias para mantenerlo intacto.

 routerCanDeactivate(nextInstruction: ComponentInstruction, prevInstruction: ComponentInstruction) { history.replaceState(null,null, this.currentLocation); history.forward(); return confirm("Do you want to discard unsaved changes ?"); } 

Debido a la activación de window.onpopstate en cada clic del botón de retroceso,

Pensé que se pushState un pushState . Pero ese no fue el caso, y el siguiente código funciona perfectamente.

 routerCanDeactivate(nextInstruction: ComponentInstruction, prevInstruction: ComponentInstruction) { if(confirm("Do you want to discard unsaved changes ?")){ return true; } else { history.forward(); return false; } } 

Pero sería bueno si alguien pudiera explicar lo que está sucediendo porque no tengo mucho conocimiento de la history api .