Buscar temas sin respuesta | Ver temas activos Fecha actual 20 Ago 2017 03:04



Responder al tema  [ 27 mensajes ]  Ir a página Anterior  1, 2, 3  Siguiente
 Problema al acceder al ancla de un iframe 
Autor Mensaje
La única forma que se me ocurre es hacer que la página padre haga scroll hasta el iframe, esto ya lo hace, y a esto sumarle la altura del ancla con respecto al comienzo de la página donde se encuentra este


19 Jun 2013 10:47
Site Admin

Registrado: 14 Sep 2012 07:50
Mensajes: 36
Hola
Claro ahora entiendo lo de no funciona, creo que se lo que buscas. Prueba este código, en el que he creado una función resizeIframe propia, es muy simple: modifica las dimensiones del iframe y luego hace el scrollIntoView(), de esa manera coloca el iframe en la parte alta de la página y con el ancla seleccionada.
Luego hay otra llamada a scrollIntoView() dentro del iframe para que ponga a la vista el ancla.
function resizeIframe(iframe){
var ifhtml = iframe.contentWindow.document.documentElement;
var ifbody= iframe.contentWindow.document.body;
iframe.style.height = Math.max( ifhtml.clientHeight, ifhtml.scrollHeight, ifhtml.offsetHeight, ifbody.scrollHeight, ifbody.offsetHeight)+"px";
iframe.style.width = Math.max( ifhtml.clientWidth, ifhtml.scrollWidth, ifhtml.scrollLeft, ifhtml.offsetWidth, ifbody.scrollWidth, ifbody.offsetWidth)+"px";
iframe.scrollIntoView()
}

function iralAncla(url, nombre_ancla)
{
var iframe = document.getElementById("uniframe")
iframe.src = url+".htm#" + nombre_ancla;
if (iframe.contentWindow.document.anchors[nombre_ancla] !=null){
iframe.contentWindow.document.anchors[nombre_ancla].scrollIntoView()
}
}

El if realmente es necesario por el Firefox.

En la página usas el atributo onload="resizeIframe(this), el argumento es el propio objeto iframe

Espero que sea esto lo que buscas
Saludos


20 Jun 2013 20:20
Perfil WWW
Siento decirte que sigue sin funcionar
Entonces vamos a ir por partes, de momento lo que necesito es una función que como resultado me devuelva la posición en pixeles de un div cualquiera y por tanto del comienzo de su contenido, con respecto al borde superior de la página, contando el margen superior en caso de que la página lo tenga.
Saludos


23 Jun 2013 23:06
Hola
Hasta ahora yo veo que al pulsar en el enlace al ancla el iframe se pone en el tope superior de la página con el ancla a la vista, pero claro excepto para el último ancla, la página contenida en el iframe se ve completa (bueno, comenzando por el ancla enlazado), y entiendo que tu no quieres eso, tu quieres que se vea una parte de la página contenida en el iframe: la comprendida entre las dos anclas ¿es correcto? Me está costando enterarme :?: del todo ¿no?
Si es esto, mira en creatuweb.espaciolatino.com/test.htm
En la página dentro del iframe he metido sendos bloques div que contienen al enlace. Su id está formado por "c_" seguido del nombre del ancla que contiene: "c_ancla1" y "c_ancla2"
La función que offsetTop() aplicada a un elemento div te da la posición vertical del elemento respecto al tope superior. Pero ya puestos ahí ¿no podrías usar posicionamiento absoluto para las div?
Mira el código de estas páginas a ver si voy por buen camino.
En fin a ver si esto te ayuda.
Saludos


25 Jun 2013 23:39
Sigue sin funcionar, pero es que partimos de un planteamiento erróneo con respecto al iframe, porque yo no quiero que se vea una parte del documento del iframe, quiero que se vea todo, entero, la función resizeIframe que os mandé al principio es para que la página se vea completa, y por tanto la altura del iframe se ajuste al contenido de la página, y no tiene scroll, que no tiene nada que ver con lo que aparece en el archivo test.html
Si tu tienes un iframe con esas características, SIN scroll y que se vea la totalidad del documento y con varios anclas en distintos puntos de la página y olvidándonos de enlaces cojes el scroll de la página principal y vas bajando llegará un momento en que visualices, o sea que llegues al punto donde está el primer ancla, sigues bajando con el scroll de la página principal y llegas al segundo y así los vas recorriendo todos, pues eso mismo es lo que quiero hacer pero en vez de manualmente pinchando en los correspondientes enlaces que hay en la página principal, resumiendo como si el contenido del iframe no estuviera en un iframe, sino que fuera un texto que está directamente en la página principal, espero que esta vez después de esta parrafada que me he soltado haya quedado algo más claro.


27 Jun 2013 19:50
Site Admin

Registrado: 14 Sep 2012 07:50
Mensajes: 36
Pues estoy por tirar la toalla porque creo que no termino de entender el objetivo.
Yo ahora mismo tengo una página test.htm con dos enlaces en la parte alta a dos anclas dentro del iframe (que contiene test2.htm). Si le doy al primero la página contenedora hace scroll y pone a la vista el iframe a la altura del ancla (es decir el ancla se queda en la parte alta (sin recortar el iframe, que muestra en su interior la página test2.htm). si le doy al enlace segundo lo mismo, desplaza la ventana contendora para abajo hasta el siguiente ancla.
Este ejemplo ya te lo envié (creatuweb.espaciolatino.com/test.htm)
Ahora te pongo tres imágenes
Al cargar la página http://creatuweb.espaciolatino.com/test/pag_1.jpg
Tras pulsar el enlace al ancla 1 http://creatuweb.espaciolatino.com/test/pag_2.jpg
Tras pulsar el enlace al ancla 2 http://creatuweb.espaciolatino.com/test/pag_3.jpg

Si no es eso, ya me doy por vencido para entender lo que buscas.


29 Jun 2013 15:45
Perfil WWW
Pues no tires la toalla, porque por fin has conseguido entender lo que yo quiero, y eso ya es un principio, ahora hay que conseguir que funcione, porque tu ejemplo sólo tiene dos enlaces y los dos a sendos anclas de la página contenida en el iframe, pero si metes otros dos enlaces con anclas a otra página distinta de la del iframe, funciona con el Internet Explorer, pero con el Firefox y con algún otro navegador no, si tu pinchas al segundo ancla de la segunda página, llamémosla test3 lo que hace es cargar la página y llevarte al comienzo del iframe y si vuelve a pinchar sobre ese enlace, entonces si te haces scroll la página principal a ese ancla y como ya tiene cargada la segunda página si pinchas sobre el segundo enlace de la primera te carga esta pagina pero no te lleva al ancla.
Resumiendo cuando pinchas sobre un enlace de la página que no está cargada en ese momento, lo que hace es cargarla y llevarte al inicio del iframe y tienes que pinchar de nuevo para que la página principal te lleve a ese ancla.
Vuelvo a recalcar que ocurre con el resto de navegadores, con el IE funciona bien.
Yo creo que ya estamos más cerca.


02 Jul 2013 15:26
La solución puede pasar por usar una variable global (es un recurso que no me gusta, pero....) En esta global colocas el ancla destino dentro del iframe, y al cargarlo va directamente a mostrarla.
var ancla_Actual

function resizeIframe(iframe){
var ifhtml = iframe.contentWindow.document.documentElement;
var ifbody= iframe.contentWindow.document.body;
iframe.style.height = Math.max( ifhtml.clientHeight, ifhtml.scrollHeight, ifhtml.offsetHeight, ifbody.scrollHeight, ifbody.offsetHeight)+"px";
iframe.style.width = Math.max( ifhtml.clientWidth, ifhtml.scrollWidth, ifhtml.scrollLeft, ifhtml.offsetWidth, ifbody.scrollWidth, ifbody.offsetWidth)+"px";
iframe.contentWindow.document.anchors[ancla_Actual].scrollIntoView()
}

function iralAncla(url, nombre_ancla)
{
var iframe = document.getElementById("uniframe")
ancla_Actual = nombre_ancla
iframe.src = url+".htm#" + nombre_ancla;

if (iframe.contentWindow.document.anchors[nombre_ancla] !=null)
iframe.contentWindow.document.anchors[nombre_ancla].scrollIntoView()
}

Según veo va bien tanto en iexplorer, chrome y firewall. Ya me contarás.


02 Jul 2013 20:01
Hola, esto tiene buena pinta, en las pruebas iniciales parece que funciona, aunque sigo haciendo pruebas.
Pero me gustaría que me aclararas varias cosillas sobre las anclas
Estoy viendo que en el primer ancla de las dos paginas, colocas también el segundo ('test2', 'ancla1', 'ancla2')"> pero sólo en el primer ancla, en las demás ya colocas sólo el suyo.
Eso tiene que ser así y habría que hacerlo con todas las páginas

<a href="javascript:iralAncla('test2', 'ancla1', 'ancla2')">enlazar a l1</a></p>
<p><a href="javascript:iralAncla('test2','ancla2')">enlazar a l2</a></p>
<p><a href="javascript:iralAncla('test3', 'ancla1', 'ancla2')">enlazar a l1 en test3</a></p> en este ancla colocas también el segundo
<p><a href="javascript:iralAncla('test3','ancla2')">enlazar a l2 en tst3</a></p>
<p><a href="javascript:iralAncla('test3','ancla3')">enlazar a l3 en test3</a></p>Sin embargo en este y en el anterior ya no, sólo en el primero.

Y otra cosa estoy viendo que delante de las anclas ya en las páginas
colocas este div <div id="c_ancla1"> esto tiene que ser así, sin este div no funciona.


04 Jul 2013 12:24
Site Admin

Registrado: 14 Sep 2012 07:50
Mensajes: 36
Me alegra saber que la solución te funciona
No, no hacen falta ni los segundos parámetros. La llamda del enlace sigue siendo
iralAncla('test2', 'ancla1'), nombre de la página en primer lugar y ancla dentro de ella en segundo lugar.
Fue un olvido el no quitarlos, están de la solución en la que solo se veía una parte del iframe (la comprendida entre dos anclas). Quítalo y verás que sigue funcionando igual. Lo mismo que los div en las páginas destinadas a llenar el iframe.
Pruébalo o compruébalo en creatuweb.espaciolatino.com/test.htm
Saludos


04 Jul 2013 17:04
Perfil WWW
Mostrar mensajes previos:  Ordenar por  
Responder al tema   [ 27 mensajes ]  Ir a página Anterior  1, 2, 3  Siguiente

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
cron
Desarrollado por phpBB® Forum Software © phpBB Group
Designed by ST Software for PTF.
Traducción al español por Huan Manwë para phpBB-Es.COM