dominios y alojamiento web en hostalia

Acceso desde el popup a la ventana principal

04 de marzo de 2003
Valoración del artículo:
Aprendemos a acceder a las propiedades de una página desde una ventana secundaria que ha sido abierta en esa página, es decir, acceso desde el popup a la ventana principal que lo abrió.
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
También podemos acceder desde un popup a la ventana que lo abrió, para acceder a los métodos y propiedades de la ventana, o hacer lo que deseemos con Javascript.

Referencia: Este texto viene del manual de control de ventanas secundarias con Javascript

Para ello, en el popup hay una variable declarada que es opener. En realidad es una propiedad del objeto window del popup, que hace referencia al objeto window de la ventana "abridora" (opener).

Para ilustrar el funcionamiento de opener vamos a hacer un ejemplo que consiste en una página principal, que tiene un formulario donde, entre otros campos, debemos introducir un teléfono con su prefijo internacional. En caso de que no conozcamos los prefijos internacionales nos permite pulsar sobre un botón y mostrar una ayuda. La ayuda se ofrece a través de un popup que contiene la lista de los prefijos internacionales para que seleccionemos uno de ellos. En el momento que se selecciona se debe actualizar el formulario de la ventana padre y cerrar la ventana secundaria.

Vamos por partes. Lo primero que podemos ver es el ejemplo en funcionamiento para aclarar posibles dudas.

Ahora vamos a echar un vistazo a la página principal, que contiene el formulario donde se debe escribir el prefijo y el número. Al lado del campo de texto donde se coloca el prefijo hemos puesto un botón que sirve para mostrar el popup de ayuda. Al pulsar el botón llamamos a la función abreVentana() que será la encargada de abrir el popup con la lista de prefijos.

<html>
<head>
    <title>Formulario prefijos</title>
<script>
var miPopup
function abreVentana(){
    miPopup = window.open("prefijos.html","miwin","width=300,height=150,scrollbars=yes")
    miPopup.focus()
}
</script>
</head>
<body>

<form name=formul>
<table cellspacing="3" cellpadding="3" border="0">
<tr>
    <td align="center">Prefijo</td>
    <td align="center">Número</td>
</tr>
<tr>
    <td align="center">
       <input type=text name=prefijo value="+" size=3 maxlength=3>
       <input type="Button" value="?" onclick="abreVentana()">
    </td>
    <td align="center">
       <input type=text name=numero value="" size=10 maxlength=10>
    </td>
</tr>
</table>
</form>

</body>
</html>


La función abreVentana se tiene que entender perfectamente, ya que hemos hecho anteriormente una función similar. El resto de la página es un simple formulario HTML metido dentro de una tabla para que quede mejor maquetado.

Ahora veamos la página HTML del popup, que es la que utiliza la referencia opener a la ventana "abridora", para actualizar el campo del formulario donde hay que colocar el prefijo.

<html>
<head>
    <title>Prefijos internacionales</title>
<script>
function ponPrefijo(pref){
    opener.document.formul.prefijo.value = pref
    window.close()
}
</script>
</head>

<body>
<h1>Lista de prefijos internacionales</h1>
<form name=fprefijos>
España:
<input type="Button" value="+34" onclick="ponPrefijo('+34')">
<br>
Holanda:
<input type="Button" value="+31" onclick="ponPrefijo('+31')">
<br>
Gran Bretaña:
<input type="Button" value="+44" onclick="ponPrefijo('+44')">
<br>
Estados Unidos:
<input type="Button" value="+01" onclick="ponPrefijo('+01')">
<br>
Bélgica:
<input type="Button" value="+32" onclick="ponPrefijo('+32')">
<br>
Grecia:
<input type="Button" value="+30" onclick="ponPrefijo('+30')">
</form>

</body>
</html>


Tenemos un formulario con una serie de botones para seleccionar el prefijo. Todos llaman a la función ponPrefijo() pasándole el prefijo seleccionado.

La función ponPrefijo() debe poner en un campo del formulario de la ventana que abrió el popup el valor del prefijo que ha recibido por parámetro. Para ello accede a la propiedad opener del objeto window, para tener acceso a la ventana principal (abridora) y desde allí accede a su documento, al formulario y a la propiedad value del campo de texto donde hay que escribir el prefijo. Por último cierra el popup con el método close() del objeto window.

Esperamos que haya resultado fácil de entender y sirva para ilustrar el modo de acceso desde el popup a la ventana padre. Recordar que podéis ver en marcha el ejemplo en una página aparte.

Compartir en redes sociales

Comentarios
Fueron enviados 11 comentarios al artículo
7 comentarios no revisados
4 comentarios revisados:
Por: Miguel Angel Alvarez
09/8/2005
Me acaban de preguntar si es correcto esto de window.opener, porque al utilizar esta función le sale al usuario el mensaje:

windows.opener has no propierties

Quería asegurar que window.opener es correcto.

El error típico es que estés intentando acceder al opener cuando esa ventana no tiene un opener.

Una ventana que has abierto tú mismo, haciendo clic en el icono del programa como cualquier otra aplicación, no tiene opener definido.

Las que sí tienen opener son las ventanas que se han abierto mediante javascript, siempre y cuando permanezca abierta la página abridora (desde la que se hizo el window.open).


jamsys
Ventanas Secundarias
27/4/2009
Solo queria agradecerles el gran trabajo que tienen, no tengo mucha experiencia pero he aprendido de ustedes bastante, a traves de los mensajes que recibo y sus contenidos como de los manuales, muchas gracias, he resuelto un pequeño problema que tenia con las ventanas secundarias...

manuel_...
Acceso desde el popup a la ventana principal
06/4/2010
A mi tambien me pasa pasa lo mismo, si la variable es numerica me lo adminte pero si es alfabetica se queda colgado.

Por otro lado que pasa cuando quieres pasar mas campos.
Un saludo

carlos_...
Necesito ayuda
09/4/2010
oye me parecio estupendo el artículo pero yo tengo una duda, ahí tu regresas valores definidos de un boton pero y si yo lo quiero regresar pero en lugar del valor del boton que ya lo tienes predefinido, quisiera regresar toda una linea o row de un gridview, como sería la opción, me ayudarías en mucho si me lo pudieras contestar

muhas graxias

Manuales relacionados
Categorias relacionadas
El autor
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...