working personalizar personalizado not metodo ejemplo chrome beforeunload javascript

javascript - personalizar - Para detectar si el usuario está cerrando el navegador IE aparte del evento onunload, ya que se activa cuando el usuario actualiza, etc.



onbeforeunload personalizado (8)

Esta pregunta ya tiene una respuesta aquí:

Después de pasar por numerosos foros disponibles en la red durante los últimos 5 días, aún no puedo rastrear por completo el evento de cierre del navegador. Mi requisito es generar un mensaje emergente, cuando el usuario intenta cerrar el navegador.

He llamado a mi función javascript en el evento ''onbeforeunload'' del cuerpo. Y he codificado las condiciones para verificar las coordenadas del mouse para el botón rojo ''X'' del navegador, actualizar, cerrar archivo o Alt-F4.

Mi código funciona bien cuando la ventana del navegador está maximizada, pero falla si la reducimos después de un límite. Por favor, ayúdenme, si algún cuerpo ya ha encontrado la solución a un problema similar.

Gracias.

Respuestas agregadas de OP

De acuerdo, solo dígame si es posible detectar si un usuario ha hecho clic en el botón Actualizar del navegador. Además, Actualizar puede activarse haciendo clic con el botón derecho en Actualizar o Ctrl-R. Mi requisito es hacer una variable falsa en Refresh. Solo puedo hacerlo en F5, pero el resto de las formas aún están fuera de mi alcance. Lo mismo se aplicaría a Back buton.

Hola gente, gracias por todos los que respondieron al menos. He hablado con mis superiores sobre esto y ahora han entendido y se han comprometido con los botones del menú del navegador. Entonces ahora mi tarea se volvió fácil. Ahora, estoy usando una variable y la hago verdadera por defecto. Como mencioné anteriormente, solo tengo que atrapar el mensaje antes de descargar y mostrar un mensaje cuando el usuario intenta irse. El mensaje no aparecerá cuando el usuario navegue a otras páginas, ya que he hecho que la variable sea falsa en todos los enlaces de mi página usando el siguiente fragmento de código:

document.onclick = function() { //To check if user is navigating from the page by clicking on a hyperlink. if (event.srcElement.tagName == ''A'') blnShowMsg = false; //To not popup the warning message else blnShowMsg = true; //To popup the warning message }

En mi caso, el mensaje se muestra cuando el usuario actualiza, retrocede o va a cualquier enlace en Favoritos, etc.

Gracias amigo, pero ya he pasado por eso y no encontré mucha ayuda allí también. Mis superiores no están contentos con esa solución, ya que poner una bandera en el enlace evry de mi aplicación es un trabajo complicado y temen romper la aplicación. Cualquier otra sugerencia sería apreciada. Gracias una vez más.

¿¡No hay nadie que pueda pensar en una solución aquí! ¿Dónde están todos los expertos?


"Gracias amigo, pero ya he pasado por eso y no encontré mucha ayuda allí. Mis mayores no están contentos con esa solución, ya que poner una bandera en el enlace evry de mi aplicación es un trabajo complicado y temen romper la aplicación Cualquier otra sugerencia sería apreciada. Gracias una vez más ".

Si usa jQuery, puede agregar marcadores de enlace automáticamente. La forma en que manejaría su problema es cuando el usuario realiza las acciones "peligrosas", itera todos los enlaces de página que son "peligrosos" y luego vincula eventos a ellos.

$("#dangerbutton").click(function(){ $("a").not( safeList ).click(function() { var dest = $(this).attr(''href''); someWarningFunction(function(){ /* Stay where we are because user opted to stay */ },function(){ /* Continue Following Link because user didn''t mind */ window.location= dest; }); return false; }); });

De esta forma solo se activarán los clics de enlace en su página. Los usuarios deben acostumbrarse al hecho de que la lógica "cerrar ventana == cancelar todo", porque muchos usan y confían en esa facilidad.


La pregunta no es inusual. Sin embargo, después de 5 días buscando en Internet todavía no ha encontrado una respuesta satisfactoria. Eso en sí mismo debería ser un indicador bastante claro.

Lo que he encontrado en la web es que hay una aversión seria a la respuesta de ''no puedo hacerlo''. Cuando algo no se puede hacer, la respuesta normal es no dar respuesta.

La conclusión no es solo que lo que estás intentando no se puede hacer, no se debe hacer.

Creo que debe volver con sus superiores y explicarles que una IU web es un huésped alojado por un navegador en una máquina cliente. Este estado de invitado es importante.

¿Le gustaría que un invitado en su hogar tenga el poder de forzarlo a alertarlo cuando quiera ir al baño? ¿No?

De forma similar, el navegador limita a qué información tiene acceso la IU de invitado. Incluso si encuentra una solución para el hecho de que los navegadores no están renunciando a esta información de forma voluntaria, tales hacks inteligentes son frágiles y es probable que sean fuente constante de errores.

Dado que es probable que la aplicación se diseñó originalmente para ser entregada a través del navegador antes de que se cortara cualquier código, la falla consiste en incluir el requisito en primer lugar.

Todo lo que podemos hacer es simpatizar contigo al pedirte que lleves a cabo un requisito casi imposible y ciertamente no sensato.


En tu función:

document.onclick = function() { //To check if user is navigating from the page by clicking on a hyperlink. if (event.srcElement.tagName == ''A'') blnShowMsg = false; //To not popup the warning message else blnShowMsg = true; //To popup the warning message }

blnShowMsg será verdadero para cualquier clic en su página, excepto algunas veces cuando el usuario hace clic en un enlace. Digo algunas veces porque si event.srcElement.tagName no funciona en algún navegador, siempre será verdadero. Y tiene que agregar muchos casos para permitir el uso de controles de formulario, etc. Algunos navegadores incluso pueden volver a cargar automáticamente una página, y no estoy seguro de si los eventos de carga se ejecutarán o no.

Pero hacer estallar una advertencia sobre dejar la página (o algo similar) todo el tiempo seguramente molestará a mucha gente, y probablemente se irán de forma permanente ...

Si está creando, por ejemplo, un programa en línea donde es fundamental que se guarde algo antes de irse, diré que atrapar el evento antes de la descarga es un poco tarde, mejor hacer algún tipo de autoguardado (ver Gmail) y / o algún tipo de advertencia no molesta cuando el usuario pasa el ratón sobre los menús de navegación sin guardar.

Pero no puedes obligar a los usuarios estúpidos a no hacer nada estúpido, en una interfaz web esto es aún más cierto porque tienes menos control: si el usuario desea finalizar el programa antes de guardarlo , encontrará una manera de hacerlo, y lo llamará y se quejará cuando desaparezcan los datos no guardados; P


Tengo un método que es un poco torpe pero funcionará en la mayoría de los casos.

Cree una página emergente "Retener" que contenga un FRAMESET con una, FRAMEET 100% simple y coloque los controladores de eventos onUnload y onbeforeUnload normales en HEAD.

<html> <head> <script language="Javascript" type="text/javascript"> window.onbeforeunload = exitCheck; window.onunload = onCloseDoSomething; function onCloseDoSomething() { alert("This is executed at unload"); } function exitCheck(evt) { return "Any string here."} </script> </head> <frameset rows="100%"> <FRAME name="main" src="http://www.yourDomain.com/yourActualPage.aspx"> </frameset> <body> </body> </html>

Con este método, puede utilizar la página real que desea ver, publicarla y hacer clic en hipervínculos sin que se desencadene el marco externo en la descarga o el evento onbeforeUnload.

Si el marco exterior se actualiza o se cierra, los eventos se dispararán.

Como dije, no es a prueba total, pero se redondeará el lanzamiento del evento en cada devolución.


Creo que hubo algunas formas de hacer esto en algunos navegadores (y probablemente no con mucha fiabilidad) hace algunos años. Porque recuerdo esas espantosas y masivas ventanas emergentes de spam que engendraron más ventanas emergentes al cerrar una. Pero es por eso que no es una buena idea permitir que los scripts detecten esto, y por qué los navegadores deberían evitarlo y la mayoría de los navegadores modernos probablemente sí lo hagan.

Me pidieron que hiciera algo similar para una secuencia de comandos de invitación a la encuesta; querían preguntar al visitante si les gustaría responder una encuesta sobre su sitio web, y luego la encuesta debería aparecer cuando salen del sitio. La solución que encontré fue (repetidamente) explicarle a la gerencia que esto probablemente era imposible, o en el mejor de los casos muy poco confiable; y, en su lugar, la encuesta debe aparecer inmediatamente (si el visitante aceptó realizar la encuesta) y la página de introducción debe decirle al visitante que deje abierta esta ventana y vuelva a ella después de revisar la página.


Es posible que haya visto en muchas páginas de formularios web advertir al usuario antes de cerrar la página. Cuando alguien actualiza la página, existe la posibilidad de perder todos los datos. En ese caso, es muy útil.

El ciclo de vida de la página incluye dos eventos como onunload y onbeforeunload. Para este caso, debe vincular la función de script en la ventana. Antes de descargar, para que se llame cuando la página se descargue.

Una vez más, esta advertencia no debe activarse cuando realmente está enviando la página. Para eso, establezca un valor booleano (por ejemplo, shouldsubmit) para enviar la página.


Agregue este script a su HTML:

window.onbeforeunload = function (e) { e = e || window.event; var y = e.pageY || e.clientY; if (y < 0){ return "Do You really Want to Close the window ?" } else { return "Refreshing this page can result in data loss."; } }


onunload y onbeforeunload no son para esto, por lo que naturalmente no serán confiables.

Una mejor solución es cambiar el problema. Haga que el cliente envíe un latido, diciéndole periódicamente al servidor que la página aún está activa. Cuando el tiempo de audición se detiene, sabes que puedes limpiar el servidor.

Puede encontrar esto interesante: https://.com/a/3586772/1483977

O esto: identificar entre refrescar y cerrar acciones del navegador