Beforeunload en Chrome
Hola,
Lo que he estoy intentando realizar es capturar los eventos:
-F5 (refresh)
-back
-cerrar la ventana
-ir a otra opcion de menu
Es decir todo evento de "usuario" que me saque de la ventana actual
Para esto en una primera instancia he intentado con esto:
Ext.EventManager.on(window, 'beforeunload', function(){
miRpc.miMetodo(valor);
}, this, {single: true});
Esto funcionó para algunos casos.
Luego he leído que debe ser una llamada asincrónica, entonces:
Ext.EventManager.on(window, 'beforeunload', function(){
Ext.Ajax.request({
url: 'router.php',
method: 'GET',
params: {
extAction: 'miRpc',
extMethod: 'miMetodo',
extTID: 9999,
job_id: valor
},
async: false
});
}, this, {single: true});
Esto ultimo funciona bien y para todos los casos en:
-IE
-Mozilla
Pero en Chrome no funciona cuando cierro la ventana del navegador o cuando voy a otra opcion de menu. Esto es curioso por que cuando pruebo haciendo lo siguiente y quiero cerrar chrome, salta el aviso. He leído tambien que en Opera tampoco funciona 'beforeunload'.
window.beforeunload = function() { return "Sure?"; }
Espero puedan ayudarme.
Gracias, saludos.
Encontré cual es el problema de fondo, el tiempo que lleva llamar al Server y ejecutar la sentencia ordenada es claramente mayor a lo que demora javascript en "refrescar la pantalla" o "ir a menu principal", esto es creo debido al asincronismo...entonces ahora tengo que ver la manera de retardar las ejecuciones de "refresss" o "ir menu principal" para luego de que haya vuelto del server lanzarlas.
a mi esto me funciona en todos los navegadores:
salir = false; //esto es porque tengo un botón para salir de la aplicación y allí le asigno true y sale sin preguntar
window.onbeforeunload = function(e){
if (salir === false){
textosalir = 'Al salir o refrescar perdera los cambios que no haya guardado';
a = e || window.event;
if (a) {
a.returnValue = textosalir;
}
return textosalir;
}
};
espero te sirva
¿Conoces a alguien que pueda responder esta pregunta? Comparte el link en Twitter o Facebook
Es necesario registrarse para poder participar en el foro! Si ya tienes una cuenta puedes entrar y comentar en este foro.