Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   .NET (https://www.clubdelphi.com/foros/forumdisplay.php?f=17)
-   -   Salir de una página web (https://www.clubdelphi.com/foros/showthread.php?t=54793)

altp 31-03-2008 12:12:16

Salir de una página web
 
Buenos dias.

Estoy trabajando con Delphi 2006 en ASP.NET, mi pregunta es:

¿como puedo controlar que un usuario ha salido de la página dándole a la x del navegador?

Por más que busco no encuentro nada, y sé que hace tiempo lo he visto.

Gracias.

dec 31-03-2008 12:39:57

Hola,

Esto parece funcionar en Internet Explorer, Firefox y Safari. Sin embargo en Opera parece que no funciona como se espera. Tal vez ahí tengas que investigar un poco más.

Código:

<body onbeforeunload="return 'Todo tu trabajo se perderá';">

altp 31-03-2008 12:57:36

Buenas.

No encuentro onbeforeunload, me da error, lo más parecido es onunload, pero ese evento se dispara siempre que cambiamos de página.

A ver si me puedes echar un cable.

dec 31-03-2008 13:02:09

Hola,

Pues, realmente hay bastante información, en esta página, por ejemplo.

Lo que pasa es que, aunque lo que he dicho arriba funciona, no me queda claro si es la forma correcta, puesto que parece que "onbeforeunload" es un método del objeto "window", no un atributo del elemento "body". Sin embargo, tanto lo de arriba, como esto otro:

Código:

<script type="text/javascript">
window.onbeforeunload = function (evt) {
  var message = 'Are you sure you want to leave?';
  if (typeof evt == 'undefined') {
    evt = window.event;
  }
  if (evt) {
    evt.returnValue = message;
  }
  return message;
}
</script>

Funciona como se espera. Eso sí... parece que tampoco esto último funciona en Opera. No sé porqué. Habría que buscar un poco y ver qué ocurre con eso...

altp 31-03-2008 13:05:13

Gracias por responder.

A pesar de mostrarme error en el body en Delphi 2006, me ha dejado ejecutarlo, pero no funciona como yo esperaba, pues el mensaje aparece siempre que le doy a alguna opción de menú.

Yo solo quiero que me aparezca cuando le doy a la x del navegador.

dec 31-03-2008 13:09:39

Hola,

Según leo aquí lo que ocurre con Opera es que trata de distinta forma (que otros navegadores) los eventos "onload" y "unload". Por otro lado, parece que "onbeforeunload" no es un evento estándar, y Opera no lo soporta. De este modo, la verdad es que sólo se me ocurre una cosa: no podríamos fiarnos de estos eventos para tareas críticas. Podrían valer a modo de advertencia, pero, nuestra aplicación no puede depender de estos eventos para algo que pudiera resultar en problemas.

Respecto de esto último que dices, no sé hasta qué punto podrías lograr desde tu página enterarte de cuando se cierre el navegador, sino es como hemos comentado aquí. A lo mejor tienes que replantearte el asunto, si, como dices, no va como tú esperas.

altp 31-03-2008 13:17:20

Gracias dec.

Mi idea es intentar poner session.Abandon cuando el usuario se salga de una página web.

Estoy dando palos de ciego por un problema que tengo con algunas páginas y estoy intentando eliminar todas las sesiones después de muchas otras cosas.

Ya de paso te digo cual es mi problema, en algunas páginas me da TimeOut Exceeded, lo he buscado en internet, he hecho cambios, pero nada, me sigue saliendo, por si te interesa saberlo, estoy utilizando Firebird 2.0 y el provider 1.7 que es para el framework 1.1

Si me puedes echar una mano es esto te lo agradecería.

Gracias de nuevo.

dec 31-03-2008 13:23:43

Hola,

Cita:

Mi idea es intentar poner session.Abandon cuando el usuario se salga de una página web.
No sé muy bien para qué quieres hacer algo así, pero, creo que puedes controlar la sesión de usuario cuando este acceda a una determinada página, independientemente de que estuviera antes en ella o no. Ya digo, lo lamento mucho, pero, lo único que se me ocurre es decir lo de antes: que no creo que pueda basarse en los eventos mencionados algo que sea "crítico" para nuestra aplicación.

Si tienes que hacer algo con la sesión de usuario, hazlo cuando esté en tu página. Sin saber más poco puedo decir, sino que, si me lo permites, puedes tener un "problema de diseño", y creas que tienes que hacer algo de una determinada forma, cuando en realidad no es necesario, o puede hacerse de otra en todo caso.

Cita:

Ya de paso te digo cual es mi problema, en algunas páginas me da TimeOut Exceeded, lo he buscado en internet, he hecho cambios, pero nada, me sigue saliendo, por si te interesa saberlo, estoy utilizando Firebird 2.0 y el provider 1.7 que es para el framework 1.1
¿Ves? Sin saber es lo que pasa. No sé relacionar una cosa con la otra. El "TimeOut Exceeded" supongo que querrá decir que el servidor está tardando demasiado en responder, puesto que el error te lo da el cliente (navegador). Pero no sé a qué puede ser debido, porque no sé qué se supone que hace tu aplicación en ese punto. Además, lo mío, y muy limitadamente, es PHP, no ASP, menos ASP .NET.

En PHP existe la posibilidad de determinar el tiempo máximo para la ejecución de un "script", que, "por defecto" es de 30 segundos, si no me equivoco. Esto puede cambiarse, como digo, programáticamente (desde el código fuente) o mediante cierta instrucción en el archivo de configuración. Tal vez tú tendrías que llevar a cabo algo parecido, pero, no tengo ni idea de cómo conseguir esto en tu caso, puesto que yo hablo de PHP.

Y además ignoro ahora mismo si en esto también tiene que ver el servidor HTTP. Es decir, si bastaría, hablando de PHP, con cambiar el "tiempo límite" ahí, o también el servidor Apache, por poner un ejemplo, tiene su propia opción de configuración para "limitar" el tiempo de proceso de un "script". Creo que no exactamente, al menos no de la misma forma en que se hace con PHP, para los scripts PHP, pero, tampoco estoy seguro.

altp 31-03-2008 13:29:32

Gracias de nuevo.

La verdad es que el error "Timeout Exceeded" me está volviendo loco, y como te he comentado, he modificado cosas que he ido leyendo, y como me sigue dando pues estaba con el tema de las sesiones, solo por ver si eso tenía algo que ver, yo utilizo sesiones para varias variables, no solo para controlar el usuario.

De todas formas te agradezco tu ayuda desinteresada pero con mucho ánimo de ayudar.

Sigue así compañero

Gracias

fer21unmsm 01-04-2008 21:01:27

Hola, ese mensaje de tiempo excedido, te sale en alguna pagina en particular?, tienes algo de codigo que puedas mostrar

saludos

altp 02-04-2008 09:25:38

El mensaje sale cuando le da la gana.

A lo mejor pasan unas horas, como que pasan unos dias.
La solución que realizo es volver a copiar la DLL del proyecto, desde ese momento ya vuelve a funcionar.
Como he probado varias cosas, estaba con el tema de las sesiones a ver si eso tenía algo que ver.

Si sabes algo del tema, te agradecería que lo comentaras.

Gracias.


La franja horaria es GMT +2. Ahora son las 05:35:13.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi