2010-07-10 21 views
18

Si el usuario actualiza la página en cuestión se añadirá otro registro a la base de datos, así que quiero advertir al usuario a través de un cuadro de alerta si realmente quieren para actualizar la página y si hacen clic en Aceptar a continuación, la página debe ser refrescado lo contrario si hacen clic en cancelar, no será.¿Cómo se abre un cuadro de alerta cuando se hace clic en el botón de actualización del navegador?

Como hacer este tipo de cuadro de alerta aparece cuando se hace clic en el botón de actualización del navegador de una manera que es transversal navegador compatible?

Respuesta

33

Puede hacerlo de esta manera:

window.onbeforeunload = function() { 
    return "Data will be lost if you leave the page, are you sure?"; 
}; 

Esto mostraría un mensaje para el usuario que les permite cancelar. No es específico de actualización, pero para sus propósitos (como editar una pregunta en SO) que no parece importar, es la pérdida de información, no importa a dónde se vaya.

+0

Una pregunta, sin embargo, el mensaje "Los datos se perderán si sale de la página, ¿está seguro ? " aparece debajo de otro mensaje en el cuadro de alerta: "¿Está seguro de que desea navegar desde esta página?" y debajo aparece el mensaje "presione continuar para navegar o cancelar para permanecer en la página actual". ¿Hay alguna manera de personalizar estos otros 2 mensajes también? – Faber

+0

@Faber - No es que yo sepa ... esto es una cosa por navegador que variará, el evento 'onbeforeunload' es * muy * no estándar. –

+0

también estoy especulando aquí, pero ¿sería posible detectar la actualización de la página al verificar si la URL a la que se dirige coincide con la url de la página actual, de alguna manera con js? Porque ahora si los clics del usuario en la página de inicio o en alguna otra página no agregarán otra entrada al archivo db, este mensaje aparecerá. – Faber

7

No hay una manera de atarla a poco la acción de actualización, pero puede que desee ver en window.onbeforeunload. Esto le permitirá ejecutar una función que devuelve una cadena justo antes de que la página se descargue. Si esta cadena no está vacía, entonces aparecerá un cuadro de diálogo de confirmación emergente, que contiene esta cadena y otro texto repetitivo proporcionado desde el navegador.

Por ejemplo:

window.onbeforeunload = function() { 
    if (someConditionThatIndicatesIShouldConfirm) { 
     return "If you reload this page, your previous action will be repeated"; 
    } else { 
     return ""; 
    } 
} 

también, si la página actual se carga a través de una operación de POST, el navegador ya debería mostrar un cuadro de confirmación cuando el usuario intenta actualizarla. Como regla general, cualquier acción que cambie el estado de los datos en el servidor se debe hacer a través de una solicitud POST, en lugar de GET.

+0

Este comportamiento se trabajó para mí - cuando me fui a cabo retorno "" - parece devolver cualquier cadena dará lugar a una pronta – stackdump

1

Esto no es posible. Lo mejor que puede hacer es usar el evento onbeforeunload, pero eso disparará en cualquier evento que salga de la página actual. No es posible orientar el botón de actualización específicamente.

Véase p. this question on onforeforeload

Puede que sea mejor crear una verificación duplicada en su base de datos. Eso atrapará las presentaciones accidentales usando también el botón "Atrás".

Una alternativa sería mediante un token de una sola vez al azar que que se construye en la forma. Si se intentan dos operaciones utilizando el mismo token, lo detendría.

2

Hay dos posibles caminos a seguir con esto, ambos bastante diferentes.

Una forma sería tener un controlador de eventos obligado a onbeforeunload evento para que pueda detectar cuando el usuario está navegando distancia desde la página actual. Sin embargo, si mi memoria me sirve correctamente, onbeforeunload no es coherente en todos los navegadores (no creo que Opera responda a él IIRC, pero no tiene manera de probar actualmente). Por supuesto, esta solución falla si el usuario apaga JavaScript.

La segunda y más sólida sería implementar Post Redirect Get pattern que, cuando se utiliza, impide que los datos se vuelvan a publicar cuando un usuario actualiza la página.

+0

+ 1 para el redireccionamiento del mensaje Obtenga – Robert

0

puede usar jquery para esto ... para esto tiene que adjuntar el archivo js de jquery.

<script> 
var count=0; 
$(document).ready(function(){ 
    alert("hi" + (count++)); 
    confirm("sure?") 
}); 
</script> 
+1

preguntó sobre el botón de actualización – ppaulojr

Cuestiones relacionadas