2009-04-29 10 views
5

En IE y FF, puedo adjuntar un controlador de eventos a onBeforeUnload, y al pasar una cadena a una propiedad del evento, el usuario verá un diálogo preguntándole si desea continuar con la "descarga" (ya sea cerrando el ventana o navegando lejos).¿Puedo mostrar un cuadro de diálogo de confirmación cuando el usuario cierre la ventana en Safari/Chrome?

Safari y Chrome no admiten onBeforeUnload, y onUnload parece ser demasiado tarde. ¿Hay alguna forma de replicar la misma funcionalidad en Safari/Chrome?

NOTA: No estoy intentando mantener al usuario como rehén. Sé que esto es molesto y desagradable. De hecho, mi sitio hace todo lo posible para que el usuario pueda usar libremente y tener todo en su lugar cuando regresen. Sin embargo, estoy alojando otros sitios dentro de IFrames, y algunas veces estos deciden deshacerse de mí y tomar el control del navegador, que es lo que trato de evitar.

Gracias!

+0

Tenga en cuenta que, en general, se considera de mala educación coloque los sitios de otras personas en sus propios marcos, y hubo una gran protesta cuando Digg lo hizo recientemente. –

+0

Lo sé, y gracias por la sugerencia. Sin embargo, tenemos un objetivo MUY diferente al de Digg, y (creemos al menos) que tenemos una buena razón para hacerlo, sí proporciona una funcionalidad real. –

Respuesta

7

Esto funciona perfectamente para mí, tanto en Chrome y Safari:

<html><body><p>Test</p> 
<script>window.onbeforeunload = function() { return "Sure?"; }</script> 
</body></html> 

Cuando intento para cerrar la ventana, me sale el indicador.

+0

Hmmmmmmm. Eso es extraño ... Mi código no funcionaba en Safari. Quizás es porque estaba usando Prototype's Event.observe() para adjuntar el controlador ... De todos modos, ¡muchas gracias! ¡Acabas de hacer mi vida mucho más fácil! –

+0

@RichieHindle ¿Puedo llamar a la ventana primaria para actualizar cuando cierre al niño usando este método? o puedo dejar que esto llame a otra función js en lugar de confirmación? – raym0nd

+0

@ raym0nd: el controlador 'onbeforeunload' tiene un montón de restricciones sobre lo que puede hacer. No estoy exactamente seguro de qué son, y es probable que varíen entre los navegadores. Debería probarlo, pero dudaría que funcione en todas partes, ahora y en el futuro. – RichieHindle

2

stackoverflow sí utiliza onbeforeunload, y funciona muy bien para mí en Safari:

function setConfirmUnload(a){window.onbeforeunload=a?function(){return a}:null} 
2

he comprobado en cromo y parece estar funcionando bien utilizando este:

<body onunload="alert('x');" onbeforeunload="test1();"> 
+0

La pregunta original dice que 'onUnload parece ser demasiado tarde'. –

Cuestiones relacionadas