Angular2: ¿Cómo prevenir / anular la manipulación del historial al implementar 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 navegadorback botón o cualquier otrohistory.back() desencadenar,

entonces no mantiene el historial intacto y desencadenapopState en cada disparador y eventualmente navega a la página de inicio del navegador (probado en Chrome).

EDITAR:

Guarde la URL del componente actual en una variablecurrentLocation y

trató de manipularhistory conhistory api pero

simplemente no podía entender el orden correcto de llamadas de API requeridas 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 ?");
  }

Respuestas a la pregunta(1)

Su respuesta a la pregunta