Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

214
Vistas
ASP.NET: cómo detectar que el usuario presiona la cruz para cerrar la ventana frente a la devolución de datos en los navegadores modernos

Tenemos una aplicación que se acerca a los 20 años y que se basa en ventanas emergentes para editar registros de usuario, cada una de las cuales tiene un objeto de estado de sesión y se basa en el código completo de devolución de datos ASP.NET C#. El problema que estamos teniendo (similar a ¿Quiero detectar cuándo el usuario cierra la ventana del navegador? Pero quiero evitar necro-ear una publicación de hace 13 años) es que en los navegadores que no son IE, la solución que teníamos para detectar al hacer clic en la cruz frente a un devolución de datos ya no funciona. Esto se basó en onbeforeunload y el uso de event.clientY para verificar la posición del mouse (un truco feo pero lo único que funcionó) que no existe, por ejemplo, en Chrome.

El problema es que no parece posible distinguir entre hacer clic en la cruz y hacer una devolución de datos, ya que ambos se tratan como si estuvieran descargando el formulario. ¿Hay alguna manera de hacer esto en los navegadores modernos? Hemos intentado lo siguiente (haciendo una llamada asíncrona al servidor para marcar que el objeto de la sesión debe eliminarse):

onbeforeunload - aparece el mensaje '¿cambiando de sitio?' cuadro en cualquier acción de devolución de datos (así como la cruz).

onunload: se activa en cualquier devolución de datos, así como en la cruz.

onvisibilitychange comprobando lo mismo que onunload. p.ej:

 document.onvisibilitychange = handleWindowClose; function handleWindowClose(e) { var v = document.visibilityState; if (v === "hidden") { CallServer("Cancel"); // ajax call to server to close session } }

Verificando IsPostBack / IsCallBack y usando un indicador en el estado de la sesión para rastrear la diferencia. Al hacer clic en un control de devolución de datos, el servidor llegará dos veces, una para el evento de control y luego la llamada ajax, lo que causa aún más problemas, ya que el código que depende del estado de la sesión se romperá cuando se elimine; tenemos más de 200 páginas con las que lidiar, así que esto no es una opción para nosotros.

Existe la opción de un latido mencionado en la publicación de 2009 para comprobar si hay identificadores de ventanas muertas desde la ventana principal, pero esto no funcionará si esa ventana está cerrada, por ejemplo (tenemos ventanas que abren otras ventanas, etc.)

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda