Foros del Web » Programando para Internet » Javascript »

Recargar página padre en un ancla

Estas en el tema de Recargar página padre en un ancla en el foro de Javascript en Foros del Web. Buenas tardes, Tengo una página que abre un popup en el que se editan datos de la propia página padre. Al cerrrar el popup, me ...
  #1 (permalink)  
Antiguo 01/12/2009, 11:41
 
Fecha de Ingreso: marzo-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 0
Recargar página padre en un ancla

Buenas tardes,

Tengo una página que abre un popup en el que se editan datos de la propia página padre.

Al cerrrar el popup, me interesa recargar el padre para que estos se muestren, si lo hago con window.opener.document.location.reload, me pedía reenvio de datos, por lo que acabé por establecerle directamente la dirección, de modo que desde el pop up tenía:

Código:
window.opener.document.location.href=window.opener.document.location.href;
Ahora bien, esta página padre es bastante larga, y lo que quería era que aparte de recargarse, vaya a parar al ancla que le indica la hija. He hecho la siguiente función que tengo en el evento onunload del body.

Código:
function reloadPadre(){
var cadena = window.opener.document.location.href;
if (cadena.substring(cadena.length - 15, cadena.length)=='#posicionEtapas')
{
window.opener.document.location.href=cadena.substring(0,cadena.length - 15);
window.opener.document.location.href=cadena;
}
else
{
window.opener.document.location.href=window.opener.document.location.href;
window.opener.document.location.href=window.opener.document.location + '#posicionEtapas';
}
}
Como veis primero compruebo si viene de la página con el ancla o no, ya que me iba concatenando anclas anteriormente.

Pero el problema está en que de este modo, y aun estando en el codigo en el orden correcto, ejecuta primero la redirección hacia el ancla y después recarga la página.

Estoy haciendo algo mal??? Seguro porque me suena un poco a aberración lo que trato de hacer...

Saludos!
  #2 (permalink)  
Antiguo 01/12/2009, 14:38
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Recargar página padre en un ancla

Hola José. Estás haciendo, tanto en el if como en else dos location.href. Esto es una acción, deberías hacer una por vez.

Salvo los 4 location, e resto está ok.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 01/12/2009, 16:47
 
Fecha de Ingreso: marzo-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Recargar página padre en un ancla

Sí, de hecho lo hago conscientemente, porque me interesa hacer el primero para que se refresquen los datos en toda la página. Porque si le asigno la página que va al ancla directamente solamente mueve la posición en la página pero no refresca el contenido.

Se te ocurre alguna forma de conseguirlo que no sea esta?

No se si cabría la posibilidad de llamar a alguna función por javascript de la página padre para que se recargara y después simplemente llevarla al ancla o algo similar.
  #4 (permalink)  
Antiguo 01/12/2009, 17:53
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Recargar página padre en un ancla

Raro lo que comentas, debería funcionar un solo refresh. Dos como está planteado está mal, estoy 99% seguro.
Mañana hago unas pruebas y te cuento. Sino, lo que hay que hacer es agregar un random detrás de la url para que no te pase lo que decís.

Si puedes y sos tan amable para acelerar todo pon un código de ambas páginas completas pero solo con esto, cosa que se pueda copiar y pegar el html y me funcione.

Saludos.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 02/12/2009, 03:01
 
Fecha de Ingreso: marzo-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Recargar página padre en un ancla

Ok, he estado haciendo pruebas con las dos páginas. Las he creado de nuevo para que únicamente tuvieran html y javascript para no complicar la cosa, pues la original la tengo en asp.

Página padre
Código:
<html>
<head>
<title> padre</title>
<script type="text/javascript">
    function openPopup(strOpen)
    {
        open(strOpen, 'pare','toolbar=no,resizable=yes,scrollbars=yes','_parent');
    }

function muestra(id){
if (document.getElementById){ 
var el = document.getElementById(id); 
el.style.display = 'block';
}
}

function oculta(id){
if (document.getElementById){ 
var el = document.getElementById(id); 
el.style.display = 'none';
}
}

</script>
</head>
<body onload="muestra('mensaje')">
<h1>PAGINA PADRE</h1>
<a href="#posicionEtapas" onclick="oculta('mensaje')">Ir al ancla</a> <br/>
muy larga <br/>
muy larga <br/>
muy larga <br/>
.......
muy larga <br/>
muy larga <br/>
<a href="javascript:openPopup('hijo.html')" onclick="oculta('mensaje')">Abrir ventana hija</a> <br/>
muy larga 2<br/>
muy larga 2<br/>
.......
muy larga 2<br/>
muy larga 2<br/>
<a name="posicionEtapas" id="posicionEtapas"/>
<div style="text-align:center"> A esta altura se encuentra el ancla</div> <br/>
<div id="mensaje" style="display:none;text-align:center"> La pagina se ha recargado</div><br/>
muy larga 3<br/>
muy larga 3<br/>
.......
muy larga 3<br/>
</body>
</html>
Bien, en esta página vemos el ancla, llamada posicionEtapas, un mensaje inicialmente oculto, que se muestra solamente cuando la página acaba de cargar, y se oculta cuando se va desde la misma página a la ancla o cuando se abre la ventana hijo, pues son las dos acciones en que no se ha de recargar la página.

Ventana hijo
Código:
<html>
<head>
    <title>Titulo</title>

<script type="text/javascript">
function redim(){
    ancho = document.getElementById("body").offsetWidth;
    alto = document.getElementById("body").offsetHeight; 
	resizeTo(ancho+10, alto+75); 
}


function reloadPadre(){
var cadena = window.opener.document.location.href;
if (cadena.substring(cadena.length - 15, cadena.length)=='#posicionEtapas')
{
window.opener.document.location.href=cadena.substring(0,cadena.length - 15);
window.opener.document.location.href=cadena;
}
else
{
window.opener.document.location.href=window.opener.document.location.href;
window.opener.document.location.href=window.opener.document.location + '#posicionEtapas';
}
}
</script>
</head>
<body onload="redim();" onunload="reloadPadre();">
<h1> Pagina hijo </h1>

</body>
</html>
La ventana hijo continua igual, cuando se cierra recarga el padre, comprobando si ha venido del ancla o no, y volviéndola a mandar allí.

Lo más sorprendente del caso es que ahora me funciona bien, pues al cerrar la ventana hijo siempre me deja a la altura del ancla...

Crees que puede ser tema de velocidad de respuesta con el servidor el que ejecute una acción antes que la otra? Pues la página original accede a la base de datos, etc. etc.
  #6 (permalink)  
Antiguo 02/12/2009, 07:47
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Recargar página padre en un ancla

He hecho algunas pruebas rápidas y he llegado a la conclusión que lo mejor es location.reload. Para solucionar lo del me pedía reenvio de datos lo que haces es, una vez que hagas lo que hagas con asp recargar la página con un simple:

Código asp:
Ver original
  1. response.redirect "padre.asp" : responde.end

Luego con el reload funcionará:
Código javascript:
Ver original
  1. function reloadPadre(){
  2.     window.opener.location.reload();
  3. }


Me parece lo más limpio y correcto.
Sino, parsear con JS el location.href y agregarle una variable en el query string random.

Si no es potable el response.redirect de ASP contanos el caso a ver si lo solucionamos desde ese lado.

Saludos.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #7 (permalink)  
Antiguo 04/12/2009, 02:51
 
Fecha de Ingreso: marzo-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Recargar página padre en un ancla

Hola de nuevo nicolas,

No acabo de entender muy bien lo que explicas en esta última respuesta.

Lo que entiendo es que haces desde el hijo un location.reload() del padre, y con el código asp evitas que te salga el mensaje de reenvio de información?

Si es así, no entiendo como aplicar la parte del Response.redirect en código asp.

Saludos.
  #8 (permalink)  
Antiguo 04/12/2009, 08:09
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Recargar página padre en un ancla

Claro, eso digo. No sé que tenes en el padre, pero obviamente o es una página de destino de un formulario, o se autollama enviando un formulario, supongamos que tenes esto:

1- Código ASP, if request.Form("enviado") =1 then ..... procesas el envío guardando en la db o lo que sea y luego "end if".
2- Seguís mostrando la página.

Lo que digo es que en el punto 1, luego de procesar, vuelvas a llamar a la página con el código ASP que te pasé. Haciendo eso un simple F5 del browser no te pedirá reenvío del formulario.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
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 00:19.