2011-08-23 7 views
6

El problemabeforeunload rarezas

Usando $(window).bind("beforeunload", ...[snip] para preguntar si un usuario desea salir de la página produce algunos resultados extraños en algunos navegadores. El diálogo aparece y le pregunta si desea permanecer en la página o salir de la página. Si hace clic en la opción de permanecer en la página, Google Chrome (último - 13.0.782.215 m) y WinIE7 muestra la última página de historial en el botón "Atrás".

Para ilustrar este punto, la historia sesión actual consiste en visitar las siguientes páginas:

  • Page 3
  • Página 2
  • Página 1

decide abandonar la página 3 y el evento beforeunload se desencadena. Eliges permanecer en la página actual.

Vuelve a hacer clic en el botón Atrás y esta vez decide abandonar la página. Debería encontrarse en la página 2, pero en su lugar se encuentra en la página 1. Sin embargo, puede navegar de nuevo hacia la página 2.

La pregunta

¿Cómo puedo evitar que el navegador desde la eliminación de estas páginas desde el botón de retroceso cuando elegimos la opción "permanecer en la página actual"? ¿Es posible?

Ejemplo del problema

El uso de Google Chrome, en una nueva ventana, la cabeza a http://stackoverflow.com y navegar por una serie de preguntas sin tener que volver. Luego presiona el botón Preguntar. Comience a escribir en el cuadro de diálogo. Presiona Atrás en tu navegador. Seleccione permanecer en la página. Vuelva a presionar en el navegador y esta vez seleccione la opción de dejar la página. Ahora has retrocedido dos páginas en la historia. En esencia, puede volver a varias páginas si hace clic en permanecer en la página más de una vez.

¿Por qué esto importa ?!

No quiero confundir a mis usuarios. No son del tipo experto en informática.

Mi código (no es que sea relevante)

$(window).bind("beforeunload", function(){ 
    if (in_edit > 0){ 
     return "You are currently editing this job.\n\nAre you sure you wish to exit the page?"; 
    } 
}); 
+0

Interesante - Puedo reproducir esto en Chrome 11 (por ejemplo), pero no en Canarias (versión 15). Supongo que esto es/era un error, pero no puedo encontrarlo en http://www.crbug.com. –

+0

Pude reproducirlo en Canarias. crbug.com id 93858 – dan

+0

Acabo de probar en Canary otra vez y la primera vez que pienso * Logré que salga mal, pero ahora no puedo reproducir :( –

Respuesta

0

Se podría tratar de incluir un iframe oculto en la página y luego en la función onbeforeunload cambiar el src en ese marco flotante. Eso probablemente podría incluir otra URL en la historia que podría eliminarse de la pila de historial en lugar de la página actual en la que se encuentra.

Así que la historia es así:

Page3 
Page2 
Page1 

onbeforeunload cambia el iframe:

Dummy 
Page3 
Page2 
Page1 

Pero esto es sólo una conjetura que podría funcionar, tendrá que probar este ...

Cuestiones relacionadas