12

¿Hay alguna manera de capturar el resultado de la ventana antes de descargar el cuadro de diálogo de confirmación como el de Stack Overflow (esto sucede al salir de la página 'Ask Question' sin publicar la pregunta)?Capturar el resultado de la ventana. Antes de descargar el diálogo de confirmación

Así es como aparece en Chrome, creo que es ligeramente diferente en otros navegadores, pero siempre tiene algún tipo de botones sí/no.

window.onbeforeunload confirmation dialog

Es de suponer que si todavía están en la página ofensiva después de que el evento ha sido disparado eligieron quedarse y que probablemente podría resolver esto observando la secuencia de js. Sin embargo, me gustaría saber cómo determinar si hicieron clic en "Salir de esta página"?

he implementado este, como a continuación:

// concept taken from SO implementation 
function setConfirmUnload(showMessage, message) { 
    window.onbeforeunload = showMessage ? (message ? message : "this is a default message") : null; 
} 

// pseudo code 
listen to changes on inputs 
if any inputs fire a change event 
    call setConfirmUnload(true, 'My warning message') 

nota estoy usando jQuery dentro de mi sitio.

Básicamente trato de implementar una implementación de borrador de Gmail, en la que si un usuario deja una página con un formulario al que le han hecho cambios sin guardarla, se calienta con un cuadro de diálogo similar. Si eligen descartar que son cambios y abandonan la página, necesito limpiar algunos registros temporales de la base de datos (estoy pensando en una llamada AJAX, o simplemente enviar el formulario con una bandera delete) y luego enviarlos en su dirección .

Mi pregunta también se refiere a:

jQuery AJAX call in onunload handler firing AFTER getting the page on a manual refresh. How do I guarantee onunload happens first?

Respuesta

3

usted puede tener la confirmación de salida usando window.onbeforeunload pero no hay manera de saber qué botón, el usuario ha hecho clic en.

Para citar una respuesta más temprana de jvenema from this thread:

El propósito principal de la beforeunload es para cosas como permitiendo a los usuarios la opción de guardar los cambios antes de perder sus cambios.

Además, si los usuarios están dejando, que ya es demasiado tarde [...]

+5

Para probar lo que hizo clic el usuario: he encontrado una solución exitosa usando '' 'window.onfocus()' ''. Esa función se activará cuando el usuario haga clic en ESTANCIA, y se devuelve a la página. Sin embargo, tenga en cuenta que onfocus() también se activará al cambiar pestañas, ventanas, etc. Establezca una variable global en onforeforeload() para poder verificar/capturar desde el lugar al que se dirige el usuario. Si el usuario QUIERE salir de la página, puede hacer algunas cosas finales en '' 'window.onunload()' '' – GDmac

+0

El truco window.onfocus no funcionó en Firefox y Chrome para mí (solo IE) pero yo descubrió que el uso de setTimeout en el controlador 'beforeunload' (para ejecutar ejecutar algún código si un usuario opta por permanecer en la página) funcionó. Puede ver un ejemplo de trabajo aquí: https://jsfiddle.net/nathanbedford/uscobrm0/10/ –

7

¿Qué tal esto:

$(window).bind('beforeunload' , function(event) { 
    setTimeout(function() { 
     alert('Hi againe!'); 
    }); 
    return ''; 
}).bind('unload', function(event) { 
    alert('Goodby!'); 
}); 
+0

Eso realmente no lo corta ... incluso en un servidor local, en su mayoría toma más de un tic entre 'beforeunload' y' descargar'. Incluso una demora de 500 ms puede ser demasiado corta en una conexión lenta. – Sjeiti

Cuestiones relacionadas