2011-12-30 8 views
6

Con el evento descarga de ventana, es posible mostrarle al usuario un cuadro de diálogo de confirmación, digamos en una situación en la que hay una solicitud en curso que está esperando terminar y navegar fuera de la página terminará esa solicitud.Cancelar/Anular/Confirmar un evento de cambio de estado HTML 5 (onpopstate)

¿Hay alguna manera de lograr esto con onpopstate de la API de historial de HTML5? O de otra manera con el mismo resultado?

Respuesta

0

Creo que se puede modificar el comportamiento de pushState solicite una confirmación antes de empujar un nuevo estado:

// Store original pushState 
var _pushState = window.history.pushState; 
// Some bad global variable to determine if confirmation is needed 
var askForConfirm = true; 
// Modify pushState behavior 
window.history.pushState = function() { 
    if(!askForConfirm || confirm('Are you sure you want to quit this page ?')) { 
     // Call original pushState 
     _pushState.apply(window.history,arguments); 
    } 
}; 
+0

Pero esto no se ocupa de las situaciones en las que el usuario ha provocado el evento para disparar (por ejemplo, al presionar el botón Atrás) – Mansour

+0

Hm. Bueno, entonces tal vez sea posible manejar esto en el evento onpopstate, almacenando el estado anterior y empujándolo hacia atrás en caso de cancelación ... Parece un poco complicado. –

0

No sé si le ayuda en su situación, pero Sammy.js, un hash populares -routing biblioteca tiene un controlador before. Lo he usado en mi aplicación para registrar el hash previamente accedido, y si es el hash que quiero evitar que se vayan, return false los mantendrá en esa página. Aún necesita volver a escribir la URL para mostrar la página anterior, pero parece estar funcionando.

Consulte my answer in this other thread para obtener más información.