Comunidad de diseño web y desarrollo en internet online

window.parent.opener

Citar            
MensajeEscrito el 12 Jun 2008 03:18 pm
Buenas, supongo que será una tonteria (o eso espero), se puede saber el valor que contiene el window.parent.opener de algún modo es que necesita cambiarlo o saber que contiene.

Al ponerlo en un alert me pone [object window] pero yo necesita saber el valor real.


Un Saludo.

Por germano

4 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Jun 2008 03:55 pm

germano escribió:

[...] window.parent.opener [...] Al ponerlo en un alert me pone [object window] pero yo necesita saber el valor real.
Ese es el valor real.
Si lo cambiaras, por qué cosa lo cambiarías?
xD

window.parent.opener, es la referencia a la ventana que abrió la ventana padre del marco que ves.
¿qué quieres obtener de él?


PD: es un elemento informativo, es decir, de "sólo lectura"

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 13 Jun 2008 07:32 am
Es que con window.open abro un popup que tiene dos botones que recargan la ventana dependiendo de cual eligas y la recargarla el window.parent.opener no me funciona en firefox (en IE aunque parezca mentira si), tengo este codigo:

Código :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" href="css/popup.css" />
<!--[if IE]><link rel="stylesheet" href="css/style-ie.css" /><![endif]-->
<title>Archivo de expedientes</title>
</head>
<body>

<script type="text/javascript" src="js/tree-clases.js"></script>

<script type="text/javascript">

   var Tree = new Array;
   // Tree[element] = "nodeId | parentNodeId | nodeName | nodeUrl"

   Tree[0]  = "1|0|Documento|javascript: seleccionarClase('Documento');";

   Tree[1]  = "1.1|1|Expediente|javascript: seleccionarClase('Expediente');";

   Tree[2]  = "1.1a|1.1|Expediente papel|javascript: seleccionarClase('Expediente papel');";

   Tree[3]  = "2|1|Resolución|javascript: seleccionarClase('Resolución');";

   function seleccionarClase(opc){
      window.parent.opener.document.forms[0].nombreClase.value = opc;
      window.close();
   }
   
   cadena = location.search.substring(1,location.search.length);
   nodos = cadena.substring(6);
   
</script>


<form method="post" action="#">
<div class="seccion">

<div class="arbol">
   <script type="text/javascript">createTree(Tree, 0, nodos, 'Archivo de expedientes');</script>
</div>

<p></p>

<ul class="botones">
   <li><input class="boton" type="button" name="expandir" value="Expandir" onclick="window.open('?nodos=all', '_self');" /></li>
   <li><input class="boton" type="button" name="colapsar" value="Colapsar" onclick="window.open('?nodos=none', '_self');" /></li>
</ul>

</div><!-- /seccion -->

</form>
<div id="botones-pagina">
<ul class="botones">
   <li><input class="boton-pagina" type="button" name="cancelar" value="Cancelar" onclick="window.close();" /></li>
</ul>
</div><!-- /botontes-pagina -->

</body>
</html>


Este es el JS por si quereis probarlo:

Código :

// Arrays for nodes and icons
var nodes         = new Array();;
var openNodes      = new Array();
var icons         = new Array(6);

// Loads all icons that are used in the tree
function preloadIcons() {
   icons[0] = new Image();
   icons[0].src = "images/tree/plus.gif";
   icons[1] = new Image();
   icons[1].src = "images/tree/plusbottom.gif";
   icons[2] = new Image();
   icons[2].src = "images/tree/minus.gif";
   icons[3] = new Image();
   icons[3].src = "images/tree/minusbottom.gif";
   icons[4] = new Image();
   icons[4].src = "images/tree/class.gif";
   icons[5] = new Image();
   icons[5].src = "images/tree/class.gif";
}
// Create the tree
function createTree(arrName, startNode, openNode, rootNode) {
   nodes = arrName;
   if (nodes.length > 0) {
      preloadIcons();
      if (startNode == null) startNode = 0;
      if (openNode != 0 || openNode != null){
         if (openNode == 'none'){
            setOpenNodes(openNode);
         }else{
            setOpenAllNodes();
         }
      }
   
      if (startNode !=0) {
         var nodeValues = nodes[getArrayId(startNode)].split("|");
         document.write("<a href=\"" + nodeValues[3] + "\" onmouseover=\"window.status='" + nodeValues[2] + "';return true;\" onmouseout=\"window.status=' ';return true;\"><img src=\"images/tree/class.gif\" align=\"absbottom\" alt=\"\" />" + nodeValues[2] + "</a><br />");
      } else document.write("<img src=\"images/tree/objectstore.gif\" align=\"absbottom\" alt=\"\" />" + rootNode + "<br />");
   
      var recursedNodes = new Array();
      addNode(startNode, recursedNodes);
   }
}
// Returns the position of a node in the array
function getArrayId(node) {
   for (i=0; i<nodes.length; i++) {
      var nodeValues = nodes[i].split("|");
      if (nodeValues[0]==node) return i;
   }
}
// Puts in array nodes that will be open
function setOpenNodes(openNode) {
   for (i=0; i<nodes.length; i++) {
      var nodeValues = nodes[i].split("|");
      if (nodeValues[0]==openNode) {
         openNodes.push(nodeValues[0]);
         setOpenNodes(nodeValues[1]);
      }
   } 
}
// Coloca en el array de nodos a abrir, todos los nodos
function setOpenAllNodes() {
   for (i=0; i<nodes.length; i++) {
      var nodeValues = nodes[i].split("|");
      openNodes.push(nodeValues[0]);
   }
}
// Checks if a node is open
function isNodeOpen(node) {
   for (i=0; i<openNodes.length; i++)
      if (openNodes[i]==node) return true;
   return false;
}
// Checks if a node has any children
function hasChildNode(parentNode) {
   for (i=0; i< nodes.length; i++) {
      var nodeValues = nodes[i].split("|");
      if (nodeValues[1] == parentNode) return true;
   }
   return false;
}
// Checks if a node is the last sibling
function lastSibling (node, parentNode) {
   var lastChild = 0;
   for (i=0; i< nodes.length; i++) {
      var nodeValues = nodes[i].split("|");
      if (nodeValues[1] == parentNode)
         lastChild = nodeValues[0];
   }
   if (lastChild==node) return true;
   return false;
}
// Adds a new node to the tree
function addNode(parentNode, recursedNodes) {
   for (var i = 0; i < nodes.length; i++) {

      var nodeValues = nodes[i].split("|");
      if (nodeValues[1] == parentNode) {
         
         var ls   = lastSibling(nodeValues[0], nodeValues[1]);
         var hcn   = hasChildNode(nodeValues[0]);
         var ino = isNodeOpen(nodeValues[0]);

         // Write out line & empty icons
         for (g=0; g<recursedNodes.length; g++) {
            if (recursedNodes[g] == 1) document.write("<img src=\"images/tree/line.gif\" align=\"absbottom\" alt=\"\" />");
            else  document.write("<img src=\"images/tree/empty.gif\" align=\"absbottom\" alt=\"\" />");
         }

         // put in array line & empty icons
         if (ls) recursedNodes.push(0);
         else recursedNodes.push(1);

         // Write out join icons
         if (hcn) {
            if (ls) {
               document.write("<a href=\"javascript: oc('" + nodeValues[0] + "', 1);\"><img id=\"join" + nodeValues[0] + "\" src=\"images/tree/");
                   if (ino) document.write("minus");
                  else document.write("plus");
               document.write("bottom.gif\" align=\"absbottom\" alt=\"Open/Close node\" /></a>");
            } else {
               document.write("<a href=\"javascript: oc('" + nodeValues[0] + "', 0);\"><img id=\"join" + nodeValues[0] + "\" src=\"images/tree/");
                  if (ino) document.write("minus");
                  else document.write("plus");
               document.write(".gif\" align=\"absbottom\" alt=\"Open/Close node\" /></a>");
            }
         } else {
            if (ls) document.write("<img src=\"images/tree/joinbottom.gif\" align=\"absbottom\" alt=\"\" />");
            else document.write("<img src=\"images/tree/join.gif\" align=\"absbottom\" alt=\"\" />");
         }

         // Start link
         document.write("<a href=\"" + nodeValues[3] + "\" onmouseover=\"window.status='" + nodeValues[2] + "';return true;\" onmouseout=\"window.status=' ';return true;\">");
         
         // Write out folder & page icons
         if (hcn) {
            document.write("<img id=\"icon" + nodeValues[0] + "\" src=\"images/tree/class")
               /*if (ino) document.write("open");*/
            document.write(".gif\" align=\"absbottom\" alt=\"Folder\" />");
         } else document.write("<img id=\"icon" + nodeValues[0] + "\" src=\"images/tree/class.gif\" align=\"absbottom\" alt=\"Page\" />");
         
         // Write out node name
         document.write("<span>" + nodeValues[2] + "</span>");

         // End link
         document.write("</a><br />");
         
         // If node has children write out divs and go deeper
         if (hcn) {
            document.write("<div id=\"div" + nodeValues[0] + "\"");
               if (!ino) document.write(" style=\"display: none;\"");
            document.write(">");
            addNode(nodeValues[0], recursedNodes);
            document.write("</div>");
         }
         
         // remove last line or empty icon 
         recursedNodes.pop();
      }
   }
}
// Opens or closes a node
function oc(node, bottom) {
   var theDiv = document.getElementById("div" + node);
   var theJoin   = document.getElementById("join" + node);
   var theIcon = document.getElementById("icon" + node);
   
   if (theDiv.style.display == 'none') {
      if (bottom==1) theJoin.src = icons[3].src;
      else theJoin.src = icons[2].src;
      theIcon.src = icons[5].src;
      theDiv.style.display = '';
   } else {
      if (bottom==1) theJoin.src = icons[1].src;
      else theJoin.src = icons[0].src;
      theIcon.src = icons[4].src;
      theDiv.style.display = 'none';
   }
}
// Push and pop not implemented in IE
if(!Array.prototype.push) {
   function array_push() {
      for(var i=0;i<arguments.length;i++)
         this[this.length]=arguments[i];
      return this.length;
   }
   Array.prototype.push = array_push;
}
if(!Array.prototype.pop) {
   function array_pop(){
      lastElement = this[this.length-1];
      this.length = Math.max(this.length-1,0);
      return lastElement;
   }
   Array.prototype.pop = array_pop;
}

Por germano

4 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 13 Jun 2008 07:37 am
Y la ventana principal que se me olvidaba

Código :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" href="css/style.css" />
<!--[if IE]><link rel="stylesheet" href="css/style-ie.css" /><![endif]-->
<title>Archivo de expedientes</title>
</head>
<body>

<script type="text/javascript">

   function mostrarClases(){
      var height = 350;
      var width = 300;
      var top = (window.screen.height / 2) - (height / 2);
      var left = (window.screen.width / 2) - (width / 2);
      var url = "popup-clases.html";
      window.open(url, "dialog", "top=" + top + ",left=" + left + ",height=" + height + ",width=" + width + ",toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=no");
   }
   
</script>

<!-- cuerpo-pagina -->

<div id="cuerpo-pagina">

<div id="contenido-pagina">
<form method="post" action="#">
<div class="seccion">
<h3>Seleccionar la clase a la que pertenece el documento</h3>
<p>Clase: <a onclick="mostrarClases();"><img src="images/tree/class.gif" alt="Clase" /></a>
<input type="text" name="nombreClase" value="" disabled="disabled" />
</p>

</div><!-- /seccion -->

</form>
</div><!-- /contenido-pagina -->
</div><!-- /cuerpo-pagina -->

<!-- pie-pagina -->

<div id="pie-pagina">
<a href="#top">subir</a>
</div><!-- /pie-pagina -->
</body>
</html>

Por germano

4 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 13 Jun 2008 08:36 am
Lo siento.
Pero no hay tiempo de leer tantísimo chorro de letras.
Intenta poner SOLO el código implicado en el asunto.
(por ejemplo, esto no tiene pinta de estar implicado: "function oc(node, bottom)")

germano escribió:

Es que con window.open abro un popup que tiene dos botones que recargan la ventana dependiendo de cual eligas y la recargarla el window.parent.opener no me funciona en firefox

Por lo demás, la explicación tp se entiende mucho...
:(

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 13 Jun 2008 10:09 am
Perdón, el codigo solo lo puse por si queriais probarlo.

El codigo implicado es el del primer html, concretamente:

Código :

<input class="boton" type="button" name="expandir" value="Expandir" onclick="[b]window.open('?nodos=all', '_self');[/b]" />
<input class="boton" type="button" name="colapsar" value="Colapsar" onclick="[b]window.open('?nodos=none', '_self');[/b]" />


Código :

function seleccionarClase(opc){
  [b]window.parent.opener.document.forms[0].nombreClase.value = opc;[/b]  
  window.close();
}


Me explico, yo tengo una página, llamemosla A que tiene un botón y una caja de texto.
Al hacer click en el botón, me abre un popup(que le llamaremos B), que contiene un arbol de carpetas y dos botones que son los que están más arriba.

El funcionamiento es el siguiente:
Yo hago click sobre el botón de la página A y me abre la página B, y selecciono del arbol de carpetas un elemento y el coge y me lo escribe en la caja de texto de la página ve con la funcion que está más arriba, hasta ahí todo funciona bien.

El problema viene cuando estando en la página B yo hago click sobre uno de los botones, por ejemplo el de expandir y selecciono un elemento, pues ya no hace nada.

Yo creo que es porque al hacer esto

[code]<input class="boton" type="button" name="expandir" value="Expandir" onclick="window.open('?nodos=all', '_self');" />[code]

me recarga otra vez la página B y entonces cambia de padre de ser A a ser él mismo y la caja de texto de la página A ya no lo encuentra con esto

[code]window.parent.opener.document.forms[0].nombreClase.value = opc;[/code]

Espero que ahora me haya explicado bien :crap:
[/code]

Por germano

4 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 13 Jun 2008 11:03 am
Un poco mejor.
Aunque no se si he terminado de entender.

Veamos, tu recargas la página B, con los botones que hay en B, y que ejecutan: "window.open('?nodos=all', '_self');"
Claro.
De esa manera, cuando llamas a: window.parent.opener, no devuelve lo que buscas, puesto que el opener de B, se ha convertido en sí mismo.

¿cómo arreglarlo?
NO USANDO window.open
Ese "método" se usa sólo para abrir ventanas nuevas, no para recargar una página.
Para ello, usa:
window.location='?nodos=all';

Podrías haberte dado cuenta de que el "opener" había cambiado, si hubieras hecho:
<input type="button" value="Expandir" onclick="javascript:alert(window.parent.opener.location.href); window.open('?nodos=all', '_self'); alert(window.parent.opener.location.href);" />


Te recomiendo que revises las propiedades del objeto "window.location"

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 13 Jun 2008 11:20 am
Muchas gracias, va de maravilla!!! :D

Por germano

4 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 13 Jun 2008 11:22 am
Así me gusta.
:D

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.