Interceptar evento de salida de página

Resuelto Chris Ballance asked hace 15 años • 4 respuestas

Al editar una página dentro de mi sistema, un usuario puede decidir navegar a otro sitio web y, al hacerlo, podría perder todas las ediciones que no haya guardado.

Me gustaría interceptar cualquier intento de ir a otra página y pedirle al usuario que se asegure de que quiere que esto suceda, ya que podría perder su trabajo actual.

Gmail hace esto de una manera muy similar. Por ejemplo, redacte un nuevo correo electrónico, comience a escribir en el cuerpo del mensaje e ingrese una nueva ubicación en la barra de direcciones (digamos twitter.com o algo así). Le preguntará "¿Está seguro?"

¿Ideas sobre cómo replicar esto? Mi objetivo es IE8, pero también me gustaría ser compatible con Firefox y Chrome.

Chris Ballance avatar Nov 10 '09 05:11 Chris Ballance
Aceptado

Similar a la respuesta de Ghommey, pero también es compatible con versiones antiguas de IE y Firefox.

window.onbeforeunload = function (e) {
  var message = "Your confirmation message goes here.",
  e = e || window.event;
  // For IE and Firefox
  if (e) {
    e.returnValue = message;
  }

  // For Safari
  return message;
};
Eli Grey avatar Nov 10 '2009 00:11 Eli Grey

Vea este artículo. La característica que estás buscando es onbeforeunload.

Código de muestra:

  <script language="JavaScript">
  window.onbeforeunload = confirmExit;
  function confirmExit()
  {
    return "You have attempted to leave this page.  If you have made any changes to the fields without clicking the Save button, your changes will be lost.  Are you sure you want to exit this page?";
  }
</script>
jantimon avatar Nov 09 '2009 22:11 jantimon