Cargar ventana...

¿Cómo se puede hacer que la primera pantalla que cargue mi servlet salga con las propiedades que le especifique?
He probado a hacerlo así, pero hay un problema, y es que siempre se me está cargando la página porque entra en un bucle infinito:
<script>
function Comunicado(str) {
searchWin = window.open(str,'comunicado','scrollbars=no,resizable=no,width=900,height=600,status=no,location=no,toolbar=no')}
<BODY onload=\"Comunicado('http://127.0.0.1:8080/servlet/Vacunacion?opcion=1')\">
¿Puedes decirme cómo conseguir esto?

2 Respuestas

Respuesta
1
Cuando tu llamas a un servlet, este genera una página html, que se abre en una ventana. Por eso, lo que debes hacer es que antes de llamar al servlet, abres la ventana. Es decir, te creas una pagina de inicio que lo que hará es abrir una ventana nueva (en javascript con window.open), luego en el servlet, tendrás que cerrar la ventana donde estaba la pagina inicial. De esta forma->
Pagina de inicio.html:
<html>
<head>
<title>inicio</title>
<script>
function abreventana()
{
window.open("URLdelServlets","nombredelanuevaventana",paramtros);}
</script>
</head>
<body onload="abreventana();"></body>
El servlet, generará una página normal, en la que no te tienes que preocupar de la ventana. Lo único que tienes que hacer es, igual que en la anterior, en el body, llamar a una función que cierre la primera ventana(con window. Close()).
Lo que estabas haciendo era un bucle porque estabas llamando a una ventana nueva cada vez que se abría, es decir, abrir ventana, en su onload, abre otra, en el onload de la 2ª, abra otra, etc...
Es que solo tengo un servlet, con lo cual solo hay un body y un onload, no puedo llamar a distintos javascripts en el mismo evento, ¿no?.
Mira a ver si encuentras una solución para eso. Muchas gracias.
Creo que no me has entenddo. Lo que te dije, es que te crees una página de inicio, antes de llamar al servlet, que es la que llamara al servlet. Es decir, donde haces la llamada al servlet, pones la llamada a esta nueva página. Ella será la encargada de llamar al serlet, con los paramaetros de la nueva ventana. ¿Me etiendes? Así consigues que la página de inicio sea la que dé las propiedades a la ventana y que cargue el servlet en esa ventana. El problema es que si lo hacías como lo tenías al principio se mete en un bucle, porque cuando cargas el servles, le estas diciendo que cargue otra vez lo mismo (¿en el "onload"), así infinitamente, lo ves?
La otra pregunta que haces: "se pueden hacer varias llamadas?". Si, solo tienes que poner las llamadas a las funciones javascript en el evento que quieras separadas por punto y coma (;). Así:
onload="abreVentana();cargaBotones();cierraVentan();..."
Dime si tienes alguna duda, ¿vale?
Por supuesto que sé que se mete en un bucle, te lo he dicho yo.
Voy a probar lo que me dices a ver si se ve bien. Luego te cuento...
Vale, porque ya me has dejado con la intriga!
Muy bien, pero ¿cómo cierro la ventana padre?
Para cerrarla, utiliza la esto en el método "onload" del body de la nueva ventana:
window.opener.close();
Esto cerrará la ventana que hizo la acción de "window.open".
Si hacerlo, lo hace pero te pregunta antes que si quieres cerrar la página, y eso no queda muy profesional, ¿no?.
Si sabes hacerlo de otra manera te agradecería que me lo dijeras.
Thanks.
Cada vez lo complicamos un poquito más...
A ver, te cuento, el alert que sale, solo aparece cuando no es una ventana abierta mediante javascript, es decir, con el icono del explorer y netscape.
Solucion, si quieres quitar el alert, la ventana que llama al servlet, tiene que haberse abierto por javascript. Luego, es necesario hacer un paso anterior a la pagina de inicio que será donde se abra la ventana que tiene la de inicio. Es decir;
default.html -> inicio.html -> servlet.
El problema que tiene es que se quedará siempre una ventana abierta, luego para esto se me ocurre otra cosa y que no hace faltan más ventanas
La idea es que, como nunca se podrá cerrar la ventana original, lo que se me ocurre es que la muevas a una posición que no se ve en la pantalla. Así sólo quedará en la barra de tareas, pero al activarla no se verá. Para ello, utiliza en el servlet, en vez del "close", "moveBy(PixelsHaciaLaDerechaDeMas, PixelsHaciaAbajoDeMas);". Utiliza números altos, para que, con independencia de la resolución, no se llegue a ver nunca.
Quedaría así:
<body onload="window.opener.moveBy(5000,5000);">
No hay más soluciones para este problema, es la única posibilidad de solucionarlo.
Espero haberte ayudado, has conseguido que me estruje la cabeza bastante.
Respuesta
1
Los bucles infinitos en el onload son algo común :)
Puedes hacer na cosa, y es pasar un parámetro semáforo, que te ejecute lo que quieras la primera vez, y luego no haga nada.
Ten en cuenta que puedes poner código javascript en cualquier parte de la página, por lo tanto, no necesariamente has de poner la llamada en el onload.
Como consejo, prueba de abrir la ventana, y que te muestre lo que quieres mediante una acción controlada: click de botón, enlace, etc...
Luego, cambialo.
Otra cosa, no puedes cerrar por código la página que no abras vía código, bueno, puedes pero te da un aviso.
En todo caso, si no sabes cómo resolver el tema avísame.
Pues dime cómo puedo cerrarla sin que me de el aviso, porque yo no tengo ni idea...
Gracias.
Desgraciadamente no se puede cerrar, es por motivos de seguridad, piensa en lo que te podrían hacer o podría hacerse si pudieras cerrar la página que quieres ver y mandarte a otra...
Es una vieja pregunta que corre por internet. No way, tío, lo siento.
Iv

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas