image
Inicio » Foros » JavaScript

JavaScript

Capturar el evento al cerrar la ventana

Volver al foro | Responder | Añadir nuevo tema


De: jesus
Fecha: 08/09/2005
Mensaje:

como puedo saber como capturar el evento al cerrar la ventana del navegador.

Actualmente utilizo onunload el cual si me da el resultado, pero lo malo esta en que también al oprimir un viculo que me direcciona a la misma pagina se activa el evento. Lo que yo deseo es distingir cuando pulso el boton cerrar la ventana y el de pulsar un link.

Gracias, agradezco sus comentarios.


Quizás le interese
De: ZeroKilled
Util para: 31 personas

Fecha: 09/09/2005
Mensaje:

Bueno, yo lo solucione de la siguiente forma. Simple pero a la vez me parece algo un poco informal:

- En la pagina padre tengo estas dos funciones

function time(){
setTimeout('check()', 100);
}

function check(){
  if(w.closed){
  alert('closed');
  window.opener = self;
  self.close();
  }

  else{
  alert('not closed');
  }
}

- En la ventana hija (popup) tengo declaro lo siguiente en el body:

<body onunload='window.opener.time()'>

Lo que realiza este ejemplo es cuando se cierra la ventana hija tambien se cierra la ventana padre. Ahora, ¿por qué dos funciones en el padre en lugar de una funcion? La verdad es que se me complica hacerlo en una sola función porque es algo por cuestión de tiempo. Cuando la ventana hija estaba abierta y cambiaba de enlace, no habia problema; en cambio cuando cerraba la ventana hija era cuando me daba problema. Si sustituimo la función time() por check(), resulta ser que al cerrarse la ventana hija, la funcion se ejecuta ran rápido que a esta funcion no le da tiempo determinar si la ventana hija esta realmente cerrada o no.

Por último, tres detalles sumamente importante:

  • es importante que el documento que contenga la ventana hija sea de usted, puesto que para todos documentos requiere que añadas la instruccion <body onunload='window.opener.time()'>, así al cambiar de enlace no hay problema en determinar si la ventana se cerró.
  • (puesto que realmente no se para que lo usaras), si al cambiar la dirección del documento de la ventana hija a una dirección de una carpeta, este actual como si lo cerrarás.
  • la ventana padre no puede cambiar de documento mientras la ventana hija este abierta. Si por alguna razón cambia, entonces la función de la ventana hija no funcionará.




De: ZeroKilled
Util para: 7 personas

Fecha: 15/09/2005
Mensaje:

Se me quedarón unos detalles que no quedan muy claros en el script.

Es sabido que la página padre es quien se encarga de abrir el popup. En el script, la variable 'w' en la funcion 'check()' corresponde a la ventana popup. Para efecto del script presentado, seria asi:

w = window.open(url, nombre, parametros);

Obviamente tienes que personalizar el script a su gusto, puedes usar otro nombre para la variable o para las funciones. En la funcion 'check()' va el bloque de instrucciones que usted quiere que realice al momento de verificar si la ventana esta cerrada. Especificamente va dentro de la condicion 'if'.

- En la pagina padre:

function time(){
setTimeout('check()', 100);
}

function check(){
  if(w.closed){ /* La variable 'w' corresponde al objeto window que devuelve el metodo window.open(); Dentro de esta condición ubicas las instrucciones si la ventana esta cerrada. */
  alert('closed');
  window.opener = self;
  self.close();
  }

  else{ /* Dentro de esta condicion ubicas las instrucciones si la ventana no esta cerrada.*/
  alert('not closed');
  }
}

El texto en color rojo son las instrucciones que usted debe de eliminar o modificar a su gusto. Un ultimo detalle: si de casualidad, en la re-estructuracion del script usted ubica el 'setTimeout' en el evento 'onunload', debo decirle que en Internet Explorer no funciona correctamente como debe. Sucede que en lugar de esperar el tiempo asignado para ejecutar la sentencia, éste se ejecuta sin tomar en consideración el tiempo asignado. No sé si sucede igual con Mozilla, NetScape y demás navegadores.





Volver al foro | Responder | Añadir nuevo tema

Quizás le interese:

WebEstilo.com no se hace responsable de las opiniones que los usuarios puedan verter en cualquiera de los foros existentes.

Si te solucionó el problema pulsa en G+1


Gracias!






Comparte



Última modificación:31 de Agosto de 2017. Spain - Espa�a.
© 1998-2004 por . Todos los derechos reservados.