Foros del Web » Programando para Internet » Javascript »

Cerras todas las generaciones si la ventana madre es cerrada

Estas en el tema de Cerras todas las generaciones si la ventana madre es cerrada en el foro de Javascript en Foros del Web. hola a todos tengo una duda que quiza ya este resuelta (o quizas no ) yo tengo un codigo con el que se pueden abrir ...
  #1 (permalink)  
Antiguo 09/01/2004, 10:42
 
Fecha de Ingreso: diciembre-2003
Mensajes: 45
Antigüedad: 20 años, 4 meses
Puntos: 0
Pregunta Cerras todas las generaciones si la ventana madre es cerrada

hola a todos tengo una duda que quiza ya este resuelta (o quizas no )

yo tengo un codigo con el que se pueden abrir ventanas hijas por medio de un ventana madre, y si se cierra la madre susu hijas tambien se cierran.

Mi pregunta es existe un manera de generalizar esto por mas generaciones osea si se cierra la ventana inicial se cierran todas las demas (hijas, nietas, bisnietas, etc.)

Usando el codigo que tengo si cierro la madre se cierran las ventanas hijas pero las ventanas nietas (hijas de las hijas ) no se cierran que dando abiertas, si cierro la ventana hija las hijas de estas se cierran y la ventana madre queda abierta.

Si creen necesario que ponga el codigo mencinado por favor me lo dicen yo lo pongo. (Es que tengo que hacer el ejemplo)

espero me hayan entendido y me puedan orientar gracias
  #2 (permalink)  
Antiguo 09/01/2004, 11:01
 
Fecha de Ingreso: diciembre-2003
Mensajes: 45
Antigüedad: 20 años, 4 meses
Puntos: 0
Re: Cerras todas las generaciones si la ventana madre es cerrada

Cita:
Mensaje Original por ascar

Si creen necesario que ponga el codigo mencinado por favor me lo dicen yo lo pongo. (Es que tengo que hacer el ejemplo)
Ya encontre de donde fue que saque el codigo mencionado fue de aqui:

http://www.forosdelweb.com/showthrea...845#post502845

ascar
  #3 (permalink)  
Antiguo 09/01/2004, 11:11
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Boinas...

cómo abres las popup desde las popup, vuelves a copiar el script en cada documento que se abre en la popup?

Si es así te sugiero que mejor le pidas lo siguiente a las popups que abren popups

(esto en las popups pa abrir las nietas)

onclick="opener.abreVentana('tuPagina.html');retur n false"

prueba a ver si así te funciona (yo creo que sí)
  #4 (permalink)  
Antiguo 09/01/2004, 12:20
 
Fecha de Ingreso: diciembre-2003
Mensajes: 45
Antigüedad: 20 años, 4 meses
Puntos: 0
Sonrisa

Muchas gracias tunait me sirvio de maravilla ahora solo me quedan dos dudas.


1. Que es y para que sirve la palabra opener que le adicione.
2. Supongo que sirve para las bisnietas y mas alla, estoy en lo correcto?

ascar
  #5 (permalink)  
Antiguo 09/01/2004, 12:26
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Holas de nuevo

Opener hace referencia a la ventana que abrió a si misma.

Si abres una ventanita A desde una ventana madre, la madre es la opener de A.

Antes, al abrir una ventanita B desde la ventanita A, quedaba B como hija de A, así que la opener de B era A en vez de la madre, por lo tanto al cerrar desde la madre, se cerraban sus hijas (A) pero no las nietas (B)


Ahora al pedirle a A opener.funcion() lo que hacemos es pedirle a la Madre que también abra las nietas, de forma que las toma por hijas, por lo tanto tanto hijas como nietas comparten la misma madre (joer qué lio )

Digamos que todo el tiempo estás usando la función de la madre, así que todas las ventanitas son hijas de la ventana principal (madre absoluta del cordero)


Si me entendiste me lo dices que me parece que me he liao las patas....
  #6 (permalink)  
Antiguo 09/01/2004, 12:53
 
Fecha de Ingreso: diciembre-2003
Mensajes: 45
Antigüedad: 20 años, 4 meses
Puntos: 0
vuelve el agua al molino

GRACIAS TUNAIT
HABER ESTO SI ES COMPLICADO DE ESCRIBIRLO OJALA PUDIERA HACER DIBUJITOS.

Lo que hice fue algo asi:


madre abre ventana hija....


en hija se habre asi opener.abreVentana lo que indica que estoy llamando la fucion abreVentana de la madre y abriendo otra hija para la madre ok

entonces si cierro la madre se cierran hijas, nietas,.... tatara.....nietas, en fin todas.


Pero creo que con este concepto que acabo de entender si cierro la hija no se cierra la nieta es decir:

A abre a B
desde B abro C
pero C es hija de A, como tambien lo es B

Pero si cierro B, C se me quedara abierta y tampoco quiero eso.

es decir si cierro una ventana la que sea se debe cerrar toda su descendencia.

Ahora con este nuevo problemilla que se puede hacer?

Voy a echarle cabeza haber que me sale pero si se te ocurre algo me dices, si alguien mas sabe algo por favor digalo.

Gracias

ascar
  #7 (permalink)  
Antiguo 09/01/2004, 13:00
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Bien, veo que pillaste la idea

ahora claro, si yá entra tanta familia tal vez pudieras simplemente copiar el mismo código en todas las ventanas y ventanitas (excepto en la última generación) sin usar opener ni nada y ponerles a todas, excepto a la última generación, la misma instrucción que a la madre.

madre abre a A; A abre a B y C abre a D

tanto la madre, como A como B tienen un body onunload="cerrar()"

Así la madre cerrará sus hijas (ventanas de generación A), que al activarse su onload cerrará también a sus hijas (generación B, nietas de la madre) que al cerrarse cerrará sus hijas (última generación que no cierra nada)

Prueba a ver si te sirve hacerlo así
  #8 (permalink)  
Antiguo 09/01/2004, 14:51
 
Fecha de Ingreso: diciembre-2003
Mensajes: 45
Antigüedad: 20 años, 4 meses
Puntos: 0
Gracias mi querida Tunait ahora si funciono perfecto.

Gracias de nuevo.

ascar
  #9 (permalink)  
Antiguo 12/01/2004, 05:03
 
Fecha de Ingreso: octubre-2003
Mensajes: 40
Antigüedad: 20 años, 6 meses
Puntos: 0
Tengo una duda sobre este tema.

Yo lo he utilizado usando los script de Tunait, y me funciona perfectamente, pero mi problema es que cuando se cierra la ventana madre con el aspa del navegador, no se cierran las hijas, imagino que el evento onUnload no funciona si se cierra con el aspa, o hay algo que se me escapa.

Si me lo podeis aclarar, os lo agradecería.
  #10 (permalink)  
Antiguo 13/01/2004, 09:24
 
Fecha de Ingreso: diciembre-2003
Mensajes: 45
Antigüedad: 20 años, 4 meses
Puntos: 0
Pues a mi si me funciona asi, debe haber algo mal por ahi, en onunload debe ir la funcion que cierra las hijas.

Si pusieras el codigo seria mas sencillo ayudarte y saber que es.

ascar
  #11 (permalink)  
Antiguo 13/01/2004, 10:24
 
Fecha de Ingreso: octubre-2003
Mensajes: 40
Antigüedad: 20 años, 6 meses
Puntos: 0
Yo he utilizado el codigo de Tunait con alguna modificación acorde con mis necesidades, pero me he fijado que en la dirección que tu indicas, que es el codigo de Tunait que yo uso, sucede lo mismo.

http://www.forosdelweb.com/showthre...2845#post502845

Me abre las ventanas correctamente, y si las cierro con "cerrar todas las ventanas " tambien funciona bien, pero si cierro con el aspa no.

Si a ti te funciona, solo se me ocurre que puede ser, bien por el tipo de navegador, en mi caso IE6, o por alguna opción del mismo.

De todas formas el código es este:

<html>
<head>
<title>Cerrar todas las ventanas abiertas</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript">
//cerrar todas las ventanas. Script por tunait!
//http://javascript.tunait.com/
//[email protected]
var cont = 0
function abreVentana(pagina)
{
cont++
eval('ventana'+ cont + "=window.open(pagina,'ventana'+cont,'')")
}

function cerrar()
{
for(m=1;m<=cont;m++)
{
if(eval('ventana' + m))
{
eval('ventana' + m + ".close()")
}
}
cont=0
}
</script>
<link href="../estcodigos.css" rel="stylesheet" type="text/css">
</head>

<body bgcolor="#FFFFFF" text="#000000" onunload="cerrar()"
>
<div align="center"><a href="#" onClick="abreVentana('');return false">abrir</a>&nbsp;| &nbsp;<a href="#" onClick="alert(cont);return false">info
ventanas abiertas</a> | <a href="#" onClick="cerrar();return false">cerrar todas las ventanas</a>
</div>
</body>
</html>
  #12 (permalink)  
Antiguo 13/01/2004, 11:11
 
Fecha de Ingreso: diciembre-2003
Mensajes: 45
Antigüedad: 20 años, 4 meses
Puntos: 0
Pregunta

Pues ahi si no se mi querido amigo copie tu codigo y lo ejecute tal cual. y funciono bien lo probe con la X , con archivo -> cerrar y con ambas me ha funcionado bien.

la version de mi explorer es 6.0.2800.1106 (la vi por ayuda -> acerca de micros.....)

Eso viene siendo IE6

Asi que la verdad no se por que sea que no te funcione alla donde lo corres.

Si puedes pruebalo en otra parte para que veas que no miento

ascar
  #13 (permalink)  
Antiguo 13/01/2004, 11:40
 
Fecha de Ingreso: octubre-2003
Mensajes: 40
Antigüedad: 20 años, 6 meses
Puntos: 0
Efectivamente, no mientes.

En el ordenador de al lado, con la misma versión de IE que la mia (y la tuya), funciona bien.

Solo me queda pegarme con las opciones del explorador. Cosa poco agradable, al menos para mi.
Bueno, por lo menos me consuela que a los usuarios "normales" si les funcionará.

Voy a ello, y ya te contaré si doy con la solución.

Gracias por todo.
  #14 (permalink)  
Antiguo 13/01/2004, 11:57
 
Fecha de Ingreso: octubre-2003
Mensajes: 40
Antigüedad: 20 años, 6 meses
Puntos: 0
!!! INCREIBLE !!!

Jamás había tenido una iluminación como esta.

Cuando comenzaba a pegarme con las opciones del navegador he visto la barra de herramientas de Google y me ha pasado ese tipo de cosas que nunca ocurren, y me hado por investigar un poco... consecuencia, si tienes activada la opción de bloquear las pop-ups, al cerrar con el aspa no funciona el script.

Solucionado en 3 min. Que alegría dan estas iluminaciones.

Otra vez ZenQ por todo .
  #15 (permalink)  
Antiguo 15/01/2004, 08:55
 
Fecha de Ingreso: diciembre-2003
Mensajes: 45
Antigüedad: 20 años, 4 meses
Puntos: 0
Volviendo con este tema quisiera saber en este script de tunait para cerrar todas las ventanas:

function cerrar()
{
for(m=1;m<=cont;m++)
{
if(eval('ventana' + m))
{
eval('ventana' + m + ".close()")
}
}
cont=0
}

que es lo que hace esta condicion:

if(eval('ventana' + m))

es que necesito saber en que casos se ejecuta el cuerpo de es if y en que casos no.

Si alguien sabe por favor responder, lo mas pronto posible.

gracias

ascar
  #16 (permalink)  
Antiguo 15/01/2004, 09:03
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
'nass....



if(eval('ventana' + m))

Para abrir una ventana popup no es necesario asignarle un nombre, pero sí es necesario si luego queremos referenciarla desde la madre, en este caso, para cerrarlas.

Si se ha de abrir más de una ventana asignándole un nombre es necesario que cada nueva que se abra tenga un nombre distinto, o se abrirían todas las url en la misma popup en vez de lanzar una nueva en cada ocasión.

Así se les asigna un nombre fijo "ventana" y se le añade detrás un número consecutivo.

si le pedimos if('ventana'm) lo tomará como una cadena y no comprenderá lo que le estamos pidiendo que compruebe, así que usamos el método eval() para que evalúe su contenido y lo tome por objeto, y así es como lo identifica como el nombre de una ventana.

El condicional if(ventanaNumero) pregunta si ese objeto existe. Si está abierta, existe y devuelve true, con lo que se ejecutan las sentencias del if.

Si se ha cerrado, devuelve false y no se ejecutan las sentencias.

Si no se preguntara primero si existe el objeto, y se le pudiera que lo cierre, daría error del tipo "ventanaNmumero no está definido" o algo así.

Espero haberme explicoteado
  #17 (permalink)  
Antiguo 15/01/2004, 10:07
 
Fecha de Ingreso: diciembre-2003
Mensajes: 45
Antigüedad: 20 años, 4 meses
Puntos: 0
Ok Tunait te entendi perfecto pero segun eso en mi programa eso no parece ser lo que esta haciendo...


lo que pasa es que yo tengo dos ventanas, Ventana A y su hija la ventana B.

La ventana B se abre desde un boton en la ventana A. Cuando la ventana B se abre, el boton de la ventana A se deshabilita.

la ventana B se puede cerrar desde un boton cerrear en la ventana B, la X de la ventana B o si se cierra la ventana A.

Si cierro la ventana B el boton de la ventana A se vuelve a habilitar. Entonces para habilitarlo cuando se cierre por la X yo coloque una funcion que habilita dicho boton de la ventana A en el atributo onunload del body de la ventana B. Esto me crea un problema cuando cierro la ventana B desde el boton de cerrar debido a que para habilitar el boton de la ventana A yo hago un opener.forms[0]....., y si lo cierro desde el boton el valor de opener a cambiado.

Este es el codigo del boton cerrar:

function cerrar()
{
var ventana = window.self;
ventana.opener = window.self;
ventana.close();
}

El asunto es que no me funcionaba entonces lo que hice fue crear una variable global con el valor de 1 y decir en la funcion que corre en el onunload que si el valor es 1 entonces habilite, por otra parte si se cierra con el boton de cerrar en aquella funcion cerrar habilito el boton y le cambio el valor de esta variable a 2, evitando que corra dicho codigo.

De esta manera me funciono cerra la ventana B con la X y con el boton cerrar y habilitaba el boton en ambos casos si errores.

Luego me di cuenta que si se cierra la ventana A se debe cerrar la B, pero lo que hace es cerrar la ventana A y una vez esta este cerrada, cerrar la hijas o la ventana B, el punto esta en que cuando cierro la ventana A esta se cierra y cierra la ventana B pero me corre la funcion del onunload de la ventana B que lo que hace es habilitar un boton de la ventana A pero esta ya ha sido cerrada luego me arroja este error:

Error: El destinatario (servidor [no una aplicacion de servidor]) no esta dosponible ni presente; las conexiones no son validas. La llamada no se ejecuto

Señalandome esta linea de codigo if(eval('ventana' + m))

Entonces lo que hice fue crear en la ventana B una funcion que lo unico que hace es cambiar el valor de la variable global con el fin de que no corra lo del onunload de la ventana B y hacer colocar dentro del cuerpo del if(eval('ventana' + m)) la siguiente linea de codigo:
eval('ventana' + m + ".cambio()") /*cambio es la funcion que cambia el valor de la variable*/

La coloque que antes de la linea que cierra la ventana.

Y listo funciono cierro la ventana A y se cierra la B sin problemas.

Pero ah sorpresa me lleve cuando fui a cerrar la B y luego cerre la A salio de nuevo el error señalandome la misma linea.

Entonces quede reconfundido.

En otra ventana hice lo mismo y funciona todo perfecto pero lo que pasa es que es una unica ventana luego no necesito la funcion eval() sino que le digo vent1.cambio() y ya, en este caso no puedo hacerlo asi.

Espero no te hayas aburrido leyendo este libro y que me hayas entendido.

cualquier ayuda es bienvenida.

ascar
  #18 (permalink)  
Antiguo 15/01/2004, 17:37
 
Fecha de Ingreso: diciembre-2003
Mensajes: 45
Antigüedad: 20 años, 4 meses
Puntos: 0
Por favor alguien ayudeme y digame que significa este error

Error: El destinatario (servidor [no una aplicacion de servidor]) no esta disponible ni presente; las conexiones no son validas. La llamada no se ejecuto

ascar
  #19 (permalink)  
Antiguo 16/01/2004, 16:22
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Uf... lo he releído como 7 veces y aún y así me cabe la duda de si he entendido lo que pretendes y cuál es el problema.

A ver.... prueba con estas dos páginas y me dices si el tema va por ahí:

página 1 ascar1.htm

<html>
<head>
<title>pepe</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/javascript">
function cierra(){
ventana.close()
}
function habilita(){
document.getElementById('botoncito').disabled = false
}
window.onunload=cierra
</script>
</head>

<body>
<input type="submit" name="botoncito" id="botoncito" value="abrir" onclick="ventana = window.open('ascar2.htm','ventana','width=200,heig ht=200');this.disabled = true">
</body>
</html>




página 2 ascar2.htm

<html>
<head>
<title>Perico</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/javascript">
window.onunload = opener.habilita
</script>
</head>

<body>
<input type="submit" name="Submit" value="cerrar" onclick="self.close()">
</body>
</html>

dime si va por ahí la cosa o qué
  #20 (permalink)  
Antiguo 17/01/2004, 13:25
 
Fecha de Ingreso: diciembre-2003
Mensajes: 45
Antigüedad: 20 años, 4 meses
Puntos: 0
Ok si por ahi va la cosa pero le agregue una cosas mas para que veas por donde si va la cosa

La ventana ascar1.htm tiene un boton nuevo que se llama cerrar y cierra la ventana sin confirmación y ademas tiene un boton mas para abrir ventanas (pueden ser mas botones)

codigos:

ascar1.htm
<html>
<head>
<title>pepe</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/javascript">
function cerrar() {
var ventana = window.self
cierra()
ventana.opener = window.self
ventana.close()}

function cierra(){
ventana.close()
ventana1.close()
}
function habilita(){
document.getElementById('botoncito').disabled = false
document.getElementById('botoncito1').disabled = false
}
window.onunload=cierra
</script>
</head>

<body>
<input type="submit" name="botoncito" id="botoncito" value="abrir" onclick="ventana = window.open('ascar2.htm','ventana','width=200,heig ht=200');this.disabled = true">
<input type="submit" name="botoncito" id="botoncito1" value="abrir" onclick="ventana1 = window.open('ascar2.htm','ventana1','width=200,hei ght=200');this.disabled = true">
<input type="button" name="boton" value="cerrar" onclick="cerrar()">
</body>
</html>

ascar2.htm
<html>
<head>
<title>Perico</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/javascript">
window.onunload = opener.habilita
</script>
</head>

<body>
<input type="submit" name="Submit" value="cerrar" onclick="self.close()">
</body>
</html>

Nota lo que yo tengo no permite que cierres la ventana principal con la X del navegador.

Problemas:
Si se cierra la ventana principal sin abrir las subventanas sale y ventana es indefinida, y luego ventana1 es indefinida.

Si se cierra la ventana principal y no se habre una de las 2 subventanas sale ventanax es indefinida.

Si se cierra con el boton de cerrar de la ventana principal salen los mismos errores anteriores y cierra la ventana principal y no cierra la subventana.

Si se cierra la subventana como se le hace para decirle que boton deshabilitar en caso de que la otra subventana quede abierta?

No hay mas problemas...

Preguntas:

Por que la instruccion self.close() en las subventana cierra la ventana sin confirmación y por que la misma instrucción para la ventana principal si pide confirmación? que es lo que significa el self?

Me puedes explicar paso a paso que es lo que se hace en esta función? Podre signos de ointerrogación donde no entiendo ni papa...

function cerrar() {
var ventana = window.self ?????
ventana.opener = window.self ?????
ventana.close()} +/-???

Perdon tanta molestia pero es que estoy aprendiendo

ascar
  #21 (permalink)  
Antiguo 17/01/2004, 14:44
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Por partes:

Cita:
Preguntas:

Por que la instruccion self.close() en las subventana cierra la ventana sin confirmación y por que la misma instrucción para la ventana principal si pide confirmación? que es lo que significa el self?
No se trata del self, si no de que sólo se puede cerrar una ventana sin confirmación si es hija de otra y ha sido abierta mediante javascript.

Creo que en NS no pide confirmación, pero IExplorer sí la pide.

Tu pon la misma instrucción de cerrar en una ventana madre y en una hija y verás que una no pide confirmación y la otra sí.

self significa "sí misma". Se puede omitir y poniendo sólo close() funciona igual, pero si quisieras cerrar una popup que contiene una página con frames, entonces sí necesitas indicarle la ventana (en el caso de frames, habrías de poner top.close() )
Yo pongo siempre self porque así lo aprendí y por costumbre, pero se puede omitir tranquilamente.

Cita:
Me puedes explicar paso a paso que es lo que se hace en esta función? Podre signos de ointerrogación donde no entiendo ni papa...

function cerrar() {
var ventana = window.self ?????
ventana.opener = window.self ?????
ventana.close()} +/-???
Es un truco para hacer creer a la ventana madre que es una ventana hija y así que se cierre sin pedir confirmación.

He leído que funciona, pero a partir de explorer 6. Desde luego, yo que sigo agarrada a explorer 5.0 nunca he logrado que eso me funcione.

Y ahora te dejo algunos añadidos que le he puesto a esas páginas para que funcione correctamente y sin que devuelva errores. te marco en engritas lo nuevo que añadí.

Lo que no entiendas, pues me preguntas nomás.


ascar1.htm
<script language="JavaScript" type="text/javascript">
var abierta=false, abierta1=false
function cerrar() {
var ventana = window.self
cierra()
ventana.opener = window.self
ventana.close()}

function cierra(){
if(abierta){
ventana.close()}
if(abierta1){
ventana1.close()}
}
function habilita(cual){
if(cual.name == "ventana"){
abierta = false

document.getElementById('botoncito').disabled = false
}
else{
abierta1 = false

document.getElementById('botoncito1').disabled = false
}
}
window.onunload=cerrar
</script>
</head>

<body>
<input type="submit" name="botoncito" id="botoncito" value="abrir" onclick="ventana = window.open('ascar2.htm','ventana','width=200,heig ht=200');abierta=true;this.disabled = true">

<input type="submit" name="botoncito1" id="botoncito1" value="abrir" onclick="ventana1 = window.open('ascar2.htm','ventana1','width=200,hei ght=200');abierta1=true;this.disabled = true">
<input type="button" name="boton" value="cerrar" onclick="cerrar()">
</body>
</html>


ascar2.htm

<script language="JavaScript" type="text/javascript">
window.onunload = function(){opener.habilita(this)}
</script>
</head>

<body>
<input type="submit" name="Submit" value="cerrar" onclick="self.close()">
</body>
</html>


A ver qué te parece....
  #22 (permalink)  
Antiguo 17/01/2004, 15:24
 
Fecha de Ingreso: diciembre-2003
Mensajes: 45
Antigüedad: 20 años, 4 meses
Puntos: 0
Esta muy bien aun no las he probado pero confio en que funcina perfecto en IE6 (hasta ahora todo el codigo que me has pasado ha sido confiable) pero tengo una duda segun lo que vi en el codigo tendria que crear tantas variables abierta como ventanas se puedan abrir.

Ahora que pasa si le adicionamos un boton que abre una ventana y no es necesario deshabilitarlo? (Osea que con el boton se pueden abrir n de las misma ventanas) ahi que se debe hacer?

Yo propondria usar la funcion de cerrar hijas que se menciono antes.

Ahora para meter mas problemas al asunto metamos de nuevo las nietas, A abre B, B abre C si cierro C se cierra B y si se cierra A se cierra B yC, y si se abre C se deshabilita el boton de B que abre la ventana C y si se cierra C habilita el boton en B.

Yo ya lo he hecho pero la verdad esta de una forma tan complicada que si alguien viniese en el futuro a hacer algo con ese codigo seguro y quedaria se volveria diria :-p y se guro que si me ve me y me dejaria y la verdad no quiero eso , por esta razon me gustaria hayar una manera más sencilla de hacerlo y tu me estas ayudando mucho cosa de la cual estoy muy agradecido.

tratare de adaptar este codigo a la porqueria que tengo yo y luego vere como modificar la parte que falta.

de nuevo gracias,

ascar
  #23 (permalink)  
Antiguo 19/01/2004, 15:58
 
Fecha de Ingreso: diciembre-2003
Mensajes: 45
Antigüedad: 20 años, 4 meses
Puntos: 0
Bueno te cuento que el script que pusiste no me ha podido funcionar (en IE6) funciona de todas las formas de cerrar menos cuando abro una y solo una ventana y le digo cerrar ventana madre no me funciona ni con la X ni con el boton cerrar. Tampoco me funciona cuando abro las 2 ventanas y cierro la ventana madre con la X.

El error me sale en el archivo ascar2.htm en la linea 5 osea esta:

<script language="JavaScript" type="text/javascript">

Osea que el error esta en la linea siguiente, esta;

window.onunload = function(){opener.habilita(this)}

Pienso yo que es por que la ventana madre ha sido cerrada y la ventana hija trata de deshabilitar el boton de la ventana madre pero esta ya no esta.

Yo lo solucione usando uan variable que me dijeran cuando cerraba con X, Cuando con el boton y cuando con la madre, asi lo dirijo a ejecutar las funciones que debe ejecutar para cada caso. Pero como te mencione esta forma es :-p

Espero haberme hecho explicar.

ascar
  #24 (permalink)  
Antiguo 19/01/2004, 17:24
 
Fecha de Ingreso: diciembre-2003
Mensajes: 45
Antigüedad: 20 años, 4 meses
Puntos: 0
Y yo sigo insistiendo con este tema....

Tengo una duda sobre el script de cerrar todas las ventanas que hay en el indice tematico hecho por Tunait.

Lo que pasa es que a mi parecer la sentencia if(eval('ventana' + m)) no hace lo que debe de hacer (por lo menos no en IE6), hice dos paginas sencillas para mostrar el ejemplo:

cerrartodas.html

<html>
<head>
<script language="JavaScript">
//cerrar todas las ventanas. Script por tunait!
//http://javascript.tunait.com/
//[email protected]
var cont = 0
function abreVentana(pagina)
{
cont++
eval('ventana'+ cont + "=window.open(pagina,'ventana'+cont,'')")
}

function cerrar()
{
for(m=1;m<=cont;m++)
{
if(eval('ventana' + m))
{alert(eval('ventana'+m))
alert(m)
eval('ventana' + m + ".close()")
}
}
}
cont=0

function cerrarmadre() {
var ventana = window.self
ventana.opener = window.self
ventana.close()}

function mostrarmensaje()
{var pagina = "botoncerrar.html"
abreVentana(pagina)
}

</script>
</head>
<body onunload = "cerrar()">
<input type="button" name = "abrir" value="Abrir" onclick = "mostrarmensaje()">
<input type="button" name = "cerrar" value="cerrar" onclick = "cerrarmadre()">
</body>
</html>

y este otro,

botoncerrar.html

<html>
<head>
<script type="text/javascript">
function cerrar() {
var ventana = window.self
ventana.opener = window.self
ventana.close()}
</script>
</head>
<body>
<input type="button" name = "cerrar" value="cerrar" onclick = "cerrar()">
</body>
</html>

lo que hace es que se abre la ventana cerrartodas.html tiene dos botones una que cierra la ventana y otra que abre una ventana hija, la ventana hija es la ventana botoncerrar.html que contiene un simple boton para cerrar.

Lo que tiene de especial es que en la funcion cerrar del la pagina cerrar todas me muestra un alert con el numero de la ventana a cerrar y el resultado de la sentencia eval('ventana'+m).

Lo que entiendo es que la sentencia if(eval('ventana' + m)) me dice si la ventana esta abierta o no devolviendo true si esta y false si no lo esta, pero si abren una ventana, la cierran y luego cierran la ventana madre veran que igual el entra y ejecuta las lineas de código de ese if cerrando la ventana que esta cerrada osea que devuelve true cuando la ventana esta cerrada.

Eso me ha dejado muy confundido y no se si es que le hace falta algo o que y de verdad me serviria muchisimo si esa linea de código funcionara.

Bueno ahi les dejo la inquietud...

ascar

P.D: Tunait lamento mucho contradecir tu código, pero ojala y el equivocado sea yo y me muestres que si funciona.
  #25 (permalink)  
Antiguo 20/01/2004, 08:59
 
Fecha de Ingreso: diciembre-2003
Mensajes: 45
Antigüedad: 20 años, 4 meses
Puntos: 0
De acuerdo

listo creo que ya encontre un manera mejor, en ves de colocar


if(eval('ventana' + m))

coloco

if(!(eval('ventana' + m+".closed"))) --Si ventana m no esta cerrada haga....

(Creo que pueden sobrar unos parentesis)

Pero asi ya me ha funcionado, y lo de evitar llamar funciones o modificar objetos de a una ventana que esta cerrada use una variable la cual es una bandera que me dice si la la ventana esta cerrada o no.

Muchas gracias, la solucion la encontre en una Faq que hace otra cosa pero que tenia esta linea de código y esta FAQ me mostro el camino.

FAQ: http://www.forosdelweb.com/showthrea...erta+o+cerrada

Gracias.

ascar
  #26 (permalink)  
Antiguo 18/02/2004, 15:44
 
Fecha de Ingreso: febrero-2004
Ubicación: Mérida
Mensajes: 2
Antigüedad: 20 años, 2 meses
Puntos: 0
Pregunta

Tenog un pequeño problema con éste código. Pues al momento de hacer:

if (eval('ventana'+m)) me dice que ventana1 no está definido, esto me sucede cuando aun no ha abierto ninguna ventana hija, y es contradictorio porque se supone que uno está preguntando si existe.

Gracias y disculpen la ignorancia, poco he trabajado con Javascript
  #27 (permalink)  
Antiguo 19/02/2004, 12:43
 
Fecha de Ingreso: diciembre-2003
Mensajes: 45
Antigüedad: 20 años, 4 meses
Puntos: 0
De acuerdo

Hola ljcl79

En la respuesta anterior a la que tu hiciste yo propuse cambiar:

if(eval('ventana' + m))

por

if(!(eval('ventana' + m+".closed"))) --Si ventana m no esta cerrada haga....

funciona un poco mejor ya que si esta cerrada la ventana no hace lo del if, en cambio en la primera este abierta o cerrada entra al if (aun no se porque)

Con mi propuesta si ventana nunca se abrio es como si estuviera cerrada, luego no entra al if. Si la ventana esta cerrada y entra al if el hace la siguiente instruccion, eval('ventana' + m + ".close()"), luego si no hay ventana pues te saldra indefinida.

Otra cosa esta funcion cerrar solo puede llamarse en el momento en que se de el evento de cerrar la ventana madre.

en fin yo tengo este codigo y me funciona....


cerrartodas.html

<html>
<head>
<script language="JavaScript">
//cerrar todas las ventanas. Script por tunait!
//http://javascript.tunait.com/
//[email protected]
var cont = 0
function abreVentana(pagina)
{
cont++
eval('ventana'+ cont + "=window.open(pagina,'ventana'+cont,'')")
}

function cerrar()
{
for(m=1;m<=cont;m++)
{
if(!(eval('ventana' + m+".closed")))
{alert(eval('ventana'+m))
alert(m)
eval('ventana' + m + ".close()")
}
}
}
cont=0

function cerrarmadre() {
var ventana = window.self
ventana.opener = window.self
ventana.close()}

function mostrarmensaje()
{var pagina = "botoncerrar.html"
abreVentana(pagina)
}

</script>
</head>
<body onunload = "cerrar()">
<input type="button" name = "abrir" value="Abrir" onclick = "mostrarmensaje()">
<input type="button" name = "cerrar" value="cerrar" onclick = "cerrarmadre()">
</body>
</html>

botoncerrar.html

<html>
<head>
<script type="text/javascript">
function cerrar() {
var ventana = window.self
ventana.opener = window.self
ventana.close()}

function right(e) {
var msg = " no podras ver mi codigo >8) ";
if (navigator.appName == 'Netscape' && e.which == 3) {
alert(msg); // Delete this line to disable but not alert user
return false;
}
else
if (navigator.appName == 'Microsoft Internet Explorer' && event.button==2) {
alert(msg); // Delete this line to disable but not alert user
return false;
}
return true;
}
document.onmousedown = right;
</script>
</head>
<body>
<input type="button" name = "cerrar" value="cerrar" onclick = "cerrar()">
</body>
</html>

Estos dos codigos hacen lo que creo necesitas. Tiene adicionalmente que si le haces clic derecho a la pagina te sale un mesaje, creo que estaba haciendo esa prueba ahi alguna vez de pronto te sirva tambien.

Oscar
  #28 (permalink)  
Antiguo 31/01/2005, 02:24
 
Fecha de Ingreso: noviembre-2004
Mensajes: 1
Antigüedad: 19 años, 5 meses
Puntos: 0
Buenas,

te comento ascar,

lo que hace es lo siguiente,

tu compones una cadena de texto que es:

ventana + un numero, que lo tienes e una variable.
ventana1
ventana2
...

por ahora no es mas que eso, un texto.

al hacer el eval lo que obtienes es el objeto que tiene por nombre esa cadena de texto.

dentro del if, te devuleve verdadero si existe dicho objeto y falso si no existe.

espero haberte sido de ayuda.



La duda que tengo yo es:

tengo una aplicación bastante grande y no se en un momento dado que ventanas están abiertas, porque puede haberse cambiado de página y haber perdido los valores de las variables js.
por otro lado intento no tener que modificar las páginas que ya tengo hechas, así que lo que necesito no se si se puede hacer.

La cosa es, puedo de alguna manera saber cuantas ventanas hijas están abiertas? o mejor, cuales son? hay algo inverso a oppener? así no tendría que modificar el código, guardar valores en sesion,...

gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:01.