abr 05 06

window.opener – JavaScript para Mozilla

Tiempo estimado de lectura: 1,04 minutos

Es probable que si programás sitios webs, hayas visto la necesidad de programar una ventana pop up que interactúe con la ventana padre.

Para lograr esto en IE no es nada de otro mundo, ya que el ámbito de los objetos puede ser salteado. Pero para hacer lo mismo en Mozilla u Opera, esto tiene que ser algo mucho más preciso

Ejemplo:

Tenemos una ventana padre con un formulario con nombre "formulario"; dentro un campo de texto con nombre "resultado". y un link que abre una ventana pop up.

Y en el pop up: Un formulario llamado "formu", un campo de texto llamado "datos" y un link que pasa los datos del pop up a la ventana padre.

comunicacion entre ventanasEntonces, para hacer referencia al valor de “resultado” desde la ventana hija tenemos 4 instancias: window.opener (ventana padre), .document (documento html), .formulario (form), .resultado (input text) las cuales hay que respetar a rajatabla para que funcione en otro navegador que no sea IE.

Quedaría asi:
window.opener.document.formulario.resultado.value

Lo que faltaría ahora asignarle el valor del texto “dato” desde la ventana hija asi:
window.opener.document.formulario.resultado.value = window.document.formu.datos.value;

Ver el ejemplo funcionando (habiliten popups en sus navegadores para este ejemplo)

Acá les dejo el código, Vale aclarar que los campos de texto son sólo para el ejemplo, esto puede hacerse con cualquier objeto.

Ventana padre:

Ventana popup:

Si querés agregar algo te será agradecido, si querés más información acerca de como funciona Mozilla con JS esta página te puede servir.

Copame! Digg it Digg it Reddit Del.icio.us

    59 Comentarios

  1. Patricio


    Muy bueno che …. saludos.

  2. Funk


    Excelente post!!!. Muy interesante.
    Saludos

  3. Federico


    Mis conocimientos de JS apestan así que pregunto: ¿O sea que hay que declarar la “ruta completa” a un objeto?

  4. aro


    adiero che, est muy bueno

  5. Lucas


    Gracias a todos.
    Fede: Si, tenés que explicitar cada objeto instanciado dentro de la ventana, la diferencia con IE es que sino indicas todos, no te lo reconoce.

  6. Federico


    Que curioso IE haciendonos la vida más fácil. Sería interesante si, con ese criterio, es posible connfundirlo con respecto a qué objeto en particular te referís.

  7. Lucas


    Si, la vida más facil pero más ineficiente, más insegura y todos los mases que quieras ponerle.

  8. Merovingio


    Pronto voy a probar estos truquitos!. Excelente post!.-

  9. jose


    y como hago para pasarle varios valores a un <select>?

  10. Lucas


    Jose, tendrías que hacer un bucle for o while con un document.writeln entonces si te referis al documento que esta en la ventana padre tendrías que usar:

    window.opener.document.writeln("cadena");

    dentro de un bucle para que se repita todas las veces que quieras.

  11. Edgard


    Hola, esta magnifico. Dime como seria en IE

  12. Lucas


    Edgar, es exactamente igual, ese ejemplo sirve para los dos.

  13. Andrés


    que tal, soy un tipo novel en esto del JavaScript, y quiero saber si es posible, después de abrir un ventana nueva por medio de window.open(), cerrar la anterior, es decir la que tiene el código y dejar abierta solamente la ventana nueva.

    saludos

  14. Lucas


    Andrés, se puede hacer con: window.opener.close() desde la ventana hija.

  15. Yuanga


    Muchas gracias, ¡me ha ido de maravilla!

  16. NoCode Weblog


    Artículos para el fin de semana 10
    Algunos artículos para leer durante el fin de semana:

    Developing sites for users with Cognitive disabilities and learning difficulties
    A totally non-techie explanation of what you need to know about rss
    Consejos para escribir un blog
    Encuesta p…

  17. Rodrigo


    Hola, me gustaría saber como puedo obtener el valor de un input de la ventana nueva, pero leyendola desde la que la abrió, ya que no tengo el dominio de la ventana nueva.
    Gracias.

  18. Yerba


    Muy buena, funciona bien.

  19. Juan


    Bueno yo tengo la siguiente pregunta…
    Es posible ejecutar desde la ventana hija un codigo contenido en la ventana padre?
    EL problema es que estoy haciendo una pagina en el cual la pagina padre se llama index. Dentro de este index coloque un iframe y dentro de este iframe tengo una pagina html llamada menu, este menu tiene 4 opciones y se supone que al elegir alguna de las cuatro debo mostrar en la pagina padre (index) otro menu hecho en javascript…si alguien sabe como hacerlo le agradezco de antemano

  20. pablo


    Muy bueno.

  21. saul


    sabes gracias amigo tu codigo me sirvio bastante pude arreglar por fin mi problema con el php y el window opener nos vemos bueno yo programo php con postgresql estoy q hago mi tesina y gracias nos vemos
    < html xmlns="http://www.w3.org/1999/xhtml">
    < head >
    < meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    < title>Ejemplo de Popup< /title >
    < script >
    function pasarvalor(valor){
    window.opener.document.formulario.resultado.value = valor;

    }
    < /script >
    < /head >
    < body >

    < ? php
    $a='0010';
    $b='0012';
    /*echo"

    “;*/?>
    < table border='1' >
    < tr >

    codigo< /td >< td >nombre< /td >
    < /tr >
    < tr >
    < td >< a href="JavaScript:close();" title="pasar valor"
    onClick="javascript:pasarvalor('‘)”>< ?echo "$a"; ? >< /a >< /td >
    < td >< ?echo"$b";? >< /td >
    < /tr >

    < /body >
    < /html>

  22. javier


    Alguien sabe como hacer
    esto que anda en IE para refrescar la ventana padre
    window.opener.formulario.submit();
    pero en firefox

    Agradezco cualquier ayuda

  23. mar


    Excelente post, me vino al pelo recien! (un tiempo despues de posteado, claro)

  24. G@rGam€l_GO


    Excelente, cae como anillo al dedo…., una explicación sencilla y práctica… vaya que me habia complicado un poco cuando intente hacer algo parecido :-< tratar de enviar desde el hijo, un hidden por POST a un campo del padre! ;-)

  25. Sarah


    Hola
    Tengo un problemita: tengo una pagina padre y abro una pagina hija y en la hija tengo un select dinamico y debe consultar a la Base de datos por lo que recargo la pahina hija segun lo selecionado, pero en ella misma hago una operacion y el valor lo debo enviar a la pagina padre(la inicial que abrio a la hija) uso: window.opener.document.form1.formula.value=document.form1.formula.value;
    pero no me envia el valor lo que hace es irse a la promer pagina hija que se abrio.
    ¿COMO PUEDO ENVIARLA A LA PAGINA PADRE?
    Se me ocurrio obtener el nombre de la pagina padre; ¿como puedo saber el nombre de la pagina padre?

  26. Sarah


    hola. tengo un pregunta que no tiene que ver son javascript para quiezas alguien me pueda ayudar: como puedo seleccionar el ultimo registro de una tabla con sentencias SQL que postgres pueda interpretar, ya probe: SELECT LAST (maximo) FROM tarifa_ir; pero el interprete de postgres no reconoce la palabras LAST, alguien saba como hacerlo……..

  27. carlos


    eta buenisima,usto lo que buscaba para un trabajo que estoy realizando

  28. Estuardo


    hola me gustaria saber como paso un link a la pagina padre desde el popup tediendo en cuenta que el popup es (showModalDialog)…gracias de antemano

  29. Monica


    Hola, alguien podria ayudarme, necesito mostrar un listado con checkbox de lo que se seleccione de un selec, gracias

  30. Mario Zaizar


    Hola, una duda necesito tener una popup que al cargarse cierre a otras popups abiertas. Es decir que no se pueda tener mas de una popup en determinado momento. Alguna idea?

  31. Cristy


    Oye.. se q manera se puede utilizar un showModalDialog y en la pagina hija agarrar los datos.. con un windows.opener.document.form.object.value?

    gracias

  32. Gaston


    como ago para pasar los datos de una array que esta en el formulario padre, al formulario hijo; mostrando dicho dato,solo al a ser clic en un boton..¿es casi similar al ejemplo…visto?…gracias

  33. miguel marin


    hola esta bueno pero como realizo una funcion general donde solo le pase el objeto donde quiero que regrese el valor

  34. Jesús


    Me gusta mucho este script en lo cual me ha solucionado mucho….
    Pero me gustaria para un Select que esta PHP, como hago para actualizarlo en la página padre… Muchas Gracias.

  35. Salva


    Hola amigos. Cree una funcion para IE i no me funciona en mozilla. la funcion tendria que ir a una URL especificado en el value de un selec al canviar de valor, es decir, que al seleccionar una opcion ir directamente a la URL (onChange()). la funcion en IE funciona… alguien sabe xq en mozilla no?? aki os la dejo amigos!

    function goto(form) {
    var myindex=selec.tipus.selectedIndex
    if (selec.tipus.options[myindex].value != “0″) {
    location=selec.tipus.options[myindex].value;}
    }

    Gracias!

  36. emilio


    no se como hacer para que con scon la propiedad nested image de struts, me funcione un explorador de window al hacer click en la imagen. si algunos saben dede ya gracias.

  37. chuybar


    Que tal!
    Tengo el siguiente caso (creo interesante tal vez sea un excepcion)

    Quiero hacer eso mismo del window.opener para obtener los datos de la pagina padre.

    El detalle es que primero tengo una pagina htm con 2 frames.

    En el primer frame abro la pagina padre y la pagina padre abre la pagina hija en el segundo frame.

    Cuando la pagina hija quiere hacer referencia a un objeto de la pagina padre no funciona, marca que window.opener.document no es un objeto.

    Cuando lo corro sin el htm si funciona.

    ¿Habra que indicarle otra ruta?

    Espero que me haya explicado.

    Gracias.

  38. Marcelo


    Sarah, queria preguntarte si solucionaste tu problema con el popup, ya que yo estoy teniendo el mismo problema (sepierde la referencia al padre), y no logro hacerlo funcionar en firefox, el tema de guardar en algun lado el nombre del padre es imposible, ya que es una referencia a memoria y se pierde al retornar de la busqueda en el popup, si lo solucionaste te pido por favor que me cuates de que manera lo hiciste ya que no se me ocurre nada, desde ya muchas gracias.

  39. Jason


    Gente tengo un problema con esto de ventanas pop up, estoy haciendo una pagina en la cual se realimenta por ventanas pop, el problema me surge cuando la ventana hija me regresa con los datos, ya que limpia el resto de texbox en la ventana padre, ahh esta programada en asp.net

  40. Raul


    Hola he probado tu script y en firefox 2.0 no me funciona alguien sabe por que?

  41. cristhian


    exelente explicacion estaba justo atariado con algo asi

    Raul si funciona en Firefox 2.0

  42. Antonino


    Muy bueno! Yo lo tenia para hacerlo en IE, es bueno tenerlo ahora para mozilla, haciendo mi sitio más compatible!
    Saludos y gracias!

  43. Raul


    Hola como les digo el ejemplo que esta en esta pagina no me funciona en firefox 2.0 me sale objeto padre no tiene propiedades algo asi :(

  44. Gastón


    Excelente!!! lo estaba buscando hace ya un tiempo!!!

  45. Raul


    Para que me funcione en firefox 2.02 solo puse document.opener sin el document.nombre_de_formulario y funciono

  46. Walter


    Una pregunta…si la ventana padre del popups tiene frames…como accedo a los elementos de cada frame?

  47. Walter


    Una pregunta…si la ventana padre del popups tiene frames…como accedo a los elementos de cada frame desde la ventana hija?

  48. Juan Fuentes


    Gracias, por tu gran aporte, es una excelente ayuda

  49. joarpoga


    si deseo validar los cambios presentes en el campo del padre este no me genera cambio cuando se realiza con el popup, como si no se hiciese cambio, agradezco la colaoracion

  50. Laura


    Hola acabo de leer el siguiente mensaje

    Jason dijo:

    Gente tengo un problema con esto de ventanas pop up, estoy haciendo una pagina en la cual se realimenta por ventanas pop, el problema me surge cuando la ventana hija me regresa con los datos, ya que limpia el resto de texbox en la ventana padre, ahh esta programada en asp.net

    Me pasa exactamente lo mismo, yo programo con jsp ¿Encontraste la solución? Ya no sé que hacer para que funcione, el caso es que en IE todo va perfecto el problema viene al utilizar Mozilla

  51. Lucas


    Laura, Jason:

    ¿Qué es lo que necesitan hacer?, porque si la ventana hija devuelve el resultado hacia un campo en particular, lo va a sobreescribir. Si lo que quieren es sumar el contenido de la hija al campo y no sobreescribirlo, en vez de asignarlo lo concatenan. Sino pueden usar campos hidden o variables para almacenar ese dato.

    PD. El lenguaje servidor que usen carece de importancia, esto se interpreta y ejecuta en el lado del cliente.

    Saludos

  52. Enrique


    hola… yo lo quise probar con una pagina aspx y cuando le doy para que vaya a la pagina padre, se cierra la hija pero no carga la informacion en la pagina padre que puede ser?

  53. Rossy


    Hola:
    Muy buen post, pero me gustaría saber como puedo pasar 3 valores desde el popup hasta la ventana padre, y no solo 1 como lo hiciste en tu ejemplo?
    Gracias y Saludos.

  54. Lucas


    Rosy, es practimante lo mismo, sólo tenes que agregar dos campos y repetir en el link que tambien pase el valor de ese campo nuevo que agregaste. Saludos

  55. Arturo


    ME sirve ese script solo que alguione me podria decir como le hago para que envie muchos valores(tengo varios checkboxs) concatenados y no me los REMPLACE. Como se Concatena????

  56. Arturo


    Perdon creo escribi mal, necesito concatenar muchos valores, como modifico el script para que no me sustituya lo escrito anteriormente. osea que me lo vaya concatenando, gracias por su ayuda!!!

  57. Petronio


    Hola, tal vez me podáis ayudar.
    Tengo un programa escrito en php con un evento onchange, que funciona perfecto en los navegadores de windows, pero en fedora 5 no funciona (ni en Firefox Mozilla ni en Konqueror). ¿Me está faltando habilitar algo quizás? ¿O me conviene instalar otro navegador?
    Ya probé poniendo document.opener (como sugiere Raúl), pero no pasa naranja.
    Mil gracias a quien me responda!

  58. diegpric


    Interesante el codigo , pero si lo que quiero es pasar no solo una variable si no 2 como seria el codigo???

  59. Nandhi


    Hola muy util gracias. Pero si se requiere realizar en caso contrario ?? por ejemplo si quiero asignar a una variable hija un valor desde la variable padre, como se podria realizar ??

Deja un Comentario

Tags permitidos:

  • <a href="" title="">
  • <abbr title="">
  • <acronym title="">
  • <blockquote cite="">
  • <code>
  • <em>
  • <strong>