Foros del Web » Creando para Internet » HTML »

Duda con abrir enlace dentro de iframe en nueva ventana/pestaña

Estas en el tema de Duda con abrir enlace dentro de iframe en nueva ventana/pestaña en el foro de HTML en Foros del Web. Buenas, tengo un problema que se me presenta manejando mi foro phpbb3 que está dentro de un iframe en una página web, y es que ...
  #1 (permalink)  
Antiguo 15/11/2008, 14:19
 
Fecha de Ingreso: septiembre-2008
Mensajes: 20
Antigüedad: 15 años, 7 meses
Puntos: 0
Duda con abrir enlace dentro de iframe en nueva ventana/pestaña

Buenas, tengo un problema que se me presenta manejando mi foro phpbb3 que está dentro de un iframe en una página web, y es que cuando por ejemplo hago click en algún post para abrirlo en una nueva pestaña no me sale ya dentro de dicho iframe.

¿Hay alguna forma de solucionar esto y que en la nueva ventana/pestaña siga saliendo el post dentro del mismo iframe y así no se pierda lo demás al mostrarlo?

Desde ya, gracias. Salu2

Última edición por mamawei; 15/11/2008 a las 15:03
  #2 (permalink)  
Antiguo 16/11/2008, 16:15
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 1 mes
Puntos: 67
Respuesta: Duda con abrir enlace dentro de iframe en nueva ventana/pestaña

A lo mejor no te entendí bien pero me parece que estás diciendo una total incoherencia. Dices que al hacer click en un enlace que se supone se va a abrir en una nueva pesteña o ventana quieres que aparesca dentro de tu iframe? eso no tiene sentido, ¿cómo una página que se tiene que abrir en una nueva ventana o página se va abrir dentro del mismo iframe. A lo mejor no te has expresado bien, pero eso no es que sea imposible, es simplemente absurdo. Talvez no quieras que se aparesca como una ventana o pestaña nueva, sino simplemente dentro del iframe, en ese caso tendrías que cambiar a los links el atributo target, colocándolo como valor "_self" y se abriría en el mismo iframe. A lo mejor quieres que cuando se abra una página nueva aparesca un iframe igual al que tiene en la página principal, o sea, se vea del mismo modo, en ese caso es algo más complicado, tendría que cambiar los links, es difícil explicarlo. De todos modos te desaconsejo bastante el uso de iframes, limita su tamaño, cuando tengas contenido más alto no se visualizará.

Aclarame las cosas para que te pueda ayudar, qué es lo que exactamente quieres.
  #3 (permalink)  
Antiguo 17/11/2008, 14:29
 
Fecha de Ingreso: septiembre-2008
Mensajes: 20
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Duda con abrir enlace dentro de iframe en nueva ventana/pestaña

Ovbiamente no me refería a ese absurdo que comentas de "cuadro dentro de otro cuadro que tiene dentro otro cuadro... y así"

Me refiero a que por ejemplo tienes un foro phpbb3 embebido en una página web (como por ejemplo se embeben los objetos flash como vídeos de youtube, etc). Pues bien, si pulsando la tecla Ctrl le das click a algún enlace de dicho foro lo que me interesaría es que en esa nueva pestaña no sólo me salga el contenido del foro, sino que se siga mostrando embebido en la web y no 'a pelo'.

Gracias por tu atención ElJavista. Salu2!

PD: respecto a que los iframes limitan el tamaño de visualización del contenido y luego sacan scrolls si ocupa más del alto o ancho que has indicado hay una sencilla solución con javascript:
Código:
1.- Declaramos una función javascript como la siguiente:
function resizeIframe(idIframe)
{
var miIframe=document.getElementById(idIframe);
var alturaPagina=miIframe.contentWindow.document.body.scrollHeight+20;
miIframe.style.height=alturaPagina;
}

2.- Al iframe le colocamos el atributo onLoad="resizeIframe(this.id)"
que de momento me funciona muy bien, es decir, fuera hacer "scrolling(en el iframe) sobre scrolling(en la página donde está el iframe)" y el iframe adapta su tamaño exactamente al tamaño de su contenido (en este caso se indica que se adapte sólo al alto del contenido). Ni más, ni menos
  #4 (permalink)  
Antiguo 17/11/2008, 14:34
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Duda con abrir enlace dentro de iframe en nueva ventana/pestaña

Reiterando lo que dijo ElJavista, básicamente lo de Ctrl+Click es un comportamiento del navegador y es normal que se comporte como lo está haciendo, no hay forma de decirle que abra tu página con el iframe y que cargue en el iframe el enlace . Lo que sí puedes hacer (y es algo complicado) es lo que ya te dijo él, cambiar los enlaces, pasar como parámetro la página que quieres cargar en el iframe, pero en ese caso, todos los enlaces se comportarían de esa forma (no solo al hacer Ctrl+Click)...
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 17/11/2008, 17:06
 
Fecha de Ingreso: septiembre-2008
Mensajes: 20
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Duda con abrir enlace dentro de iframe en nueva ventana/pestaña

el caso es que estamos tratando 2 url's, las del foro y las de la web, por tanto si queremos abrir un enlace dentro del iframe del foro en una nueva ventana/pestaña conservando el iframe habría que configurar el iframe para que todos sus enlaces tengan como URL destino el conjunto de 2 URLs:

[dirección de la página que contiene el iframe] + [dirección del enlace dentro del iframe]

la segunda dirección se pasaría por parámetro $_GET['frame'], con lo cual la 'src' del iframe tendría siempre ese valor, a menos que no esté definido y ahí se pasa la URL del index del foro, ya que si por ejemplo accedemos al foro desde el menú principal de la web el iframe sólo tendría como 'src' el index del foro

y eso sería exactamente lo que no sé hacer, es decir, configurar mi iframe de manera que todos sus enlaces tengan esa URL como destino

estaría bueno si me dejaran poner URLs para mostraros un ejemplo con la página en cuestión, o al menos con nombres/dominios abstractos, pero me indican que "por motivos anti-spam he de superar 30 posts y tener una antiguedad de 30 días como miembro" (excelente filtro antispam, todo hay que decirlo, ya que habré intentado postear este mensaje unas 30 veces distintas xDDD). Así que se hace un poco difícil explicarlo por ahora

Gracias a todos por vuestra ayuda. Salu2!!

PD: os pongo un esquema de lo que quiero hacer:

Última edición por mamawei; 17/11/2008 a las 17:38
  #6 (permalink)  
Antiguo 17/11/2008, 18:24
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Duda con abrir enlace dentro de iframe en nueva ventana/pestaña

¿Tienes acceso al código del iframe?. Porque si así es no veo problema con lo de los enlaces .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 17/11/2008, 18:56
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 1 mes
Puntos: 67
Respuesta: Duda con abrir enlace dentro de iframe en nueva ventana/pestaña

Vamos! ya me había imaginado que era una de las dos alternativas que di, sin embargo o bien no te expresaste bien o yo entendí peor, en fin. Lo que pides no es tan fácil, necesitas trabajar con PHP u otro lenguaje del lado del servidor. Tienes que hacer que cada link que te mande a una página PHP (si lo estás haciendo con PHP) la cual tenga un parámetro que le de la dirección del link que se supone tendría.

Por ejemplo, si ahora en un enlace estuviera: pagina.html, ahora tendría que estar main.php?url=pagina.html, ese cambio tendría que hacerse en cada link. Ahora, la página main.php tendría que ser asi:

Código:
contenido
<iframe src="<?php echo $_GET["url"]; ?>"></iframe>
contenido
Bien, no suena tan complicado, lo complicado me parece que sería cambiar el link de cada uno de los enlaces, ya que se trata de un foro en phpbb, o sea, es una aplicación prediseñada, y por mi experiencia es difícil de modificar.
  #8 (permalink)  
Antiguo 18/11/2008, 02:13
 
Fecha de Ingreso: septiembre-2008
Mensajes: 20
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Duda con abrir enlace dentro de iframe en nueva ventana/pestaña

Cita:
Iniciado por David el Grande Ver Mensaje
¿Tienes acceso al código del iframe?. Porque si así es no veo problema con lo de los enlaces .
Sí David, tengo acceso a todo el código

Cita:
Iniciado por ElJavista Ver Mensaje
lo complicado me parece que sería cambiar el link de cada uno de los enlaces, ya que se trata de un foro en phpbb, o sea, es una aplicación prediseñada, y por mi experiencia es difícil de modificar.
pues eso es lo que necesito hacer. A lo mejor se puede conseguir tocando las propiedades del iframe para que haga que todos los enlaces que contenga usen como URL destino 'href' la expresión citada arriba en el esquema, y no modificando todos los links del foro, lo cual lo veo ya más complicado porque habría que meterse más en temas de phpbb

Gracias! salu2

Última edición por mamawei; 18/11/2008 a las 04:05
  #9 (permalink)  
Antiguo 20/11/2008, 09:49
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 1 mes
Puntos: 67
Respuesta: Duda con abrir enlace dentro de iframe en nueva ventana/pestaña

Bien, se me ocurrió un idea, podrías hacerlo con javascript. El código sería así:

Esto iría en el mismo iframe, al final, después de </html>

Código:
<script language="JavaScript">
        var lnks = document.getElementsByTagName("a");
        for (var i = 0; i < lnks.length; i ++) {
            var lnk = lnks[i]
            if (lnk.target == '_blank') {
               lnk.href = "main.php?url=" + lnk.href;
            }
        }
</script>
Espero que te sirva.
  #10 (permalink)  
Antiguo 20/11/2008, 13:40
 
Fecha de Ingreso: septiembre-2008
Mensajes: 20
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Duda con abrir enlace dentro de iframe en nueva ventana/pestaña

excelente ElJavista, lo probé pero me modificaba los links de la página que contiene el iframe, en vez de los de dentro del iframe que al caso es lo que me interesa.

Lo que hice en total fue esto:
Código:
<script type="text/javascript">
function cambiarEnlaces()
{
	var lnks = document.getElementsByTagName("a");
	for (var i = 0; i < lnks.length; i ++) 
		lnks[i].href = "?mod=foro&url=" + lnks[i].href;
}
</script><?

if (!isset($_GET['url']))
	$url = './foro/';
else
	$url = $_GET['url'];?>
    
<IFRAME id='myiframe' src="<? echo $url;?>" scrolling="auto" 
marginheight="0" marginwidth="0" frameborder="0" width="877" onLoad="resizeIframe(this.id);cambiarEnlaces()">
</IFRAME>
Quité la condición de "_blank" porque me interesa que todos tengan la misma expresión en su href. Ojo que la página que contiene este código es la '?mod=foro', ya que forma parte de una web modular.

Entonces, como el foro phpbb3 'incrustado' no es modular y por ejemplo tiene una parte de 'viewtopic.php', otra de 'viewforum.php', etc, ahora, en vez de tener que colocar ese cambiarEnlaces() en cada php del foro para así poder acceder a cualquier parte del mismo sin problema, lo que os consulto ahora es si hay alguna forma de definir esos atributos de las etiquetas "a" pero para sólo el iframe al que como ven puse el id 'myiframe', y no la página que lo contiene

Lo intenté haciendo esto:
Código:
<script type="text/javascript">
function cambiarEnlaces(idIframe)
{
	var lnks = document.getElementById(idIframe).getElementsByTagName("a");
	for (var i = 0; i < lnks.length; i ++) {
		lnks[i].href = "?mod=foro&url=" + lnks[i].href;
	}
}
</script><?

if (!isset($_GET['url']))
	$url = './foro/';
else
	$url = $_GET['url'];?>
    
<IFRAME id='myiframe' src="<? echo $url;?>" scrolling="auto" 
marginheight="0" marginwidth="0" frameborder="0" width="877" onLoad="resizeIframe(this.id);cambiarEnlaces(this.id)">
</IFRAME>
pero no dió resultado, ya que no sé exactamente qué expresión usar aquí:
Código:
var lnks = document.getElementById(idIframe).getElementsByTagName("a");
para que la variable lnks apunte sólo a las etiquetas del elemento 'myiframe'

Muchas gracias ElJavista, realmente me está sirviendo bastante tu ayuda

Salu2!
  #11 (permalink)  
Antiguo 20/11/2008, 15:17
 
Fecha de Ingreso: septiembre-2008
Mensajes: 20
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Duda con abrir enlace dentro de iframe en nueva ventana/pestaña

Vale, al final así me va bien excepto cuando abro el enlace en la misma ventana:
Código:
function cambiarEnlaces(idIframe)
{
	var miIframe=document.getElementById(idIframe);
	var lnks = miIframe.contentWindow.document.getElementsByTagName("a");
	for (var i = 0; i < lnks.length; i ++)
		lnks[i].href = "../?mod=foro&url=" + lnks[i].href;
}
Osea ahora lo que me faltaría es cómo detectar que el enlace se ha abierto en una nueva ventana/pestaña, y no en la misma.

Una posible solución sería quitar la propiedad a los links del foro para abrirlos con el contenedor del iframe, osea que si dentro de un iframe tengo un link de url 'xxx', que en vez de abrirse nuevamente la página contenedora del iframe sólo se abra lo que contiene la url 'xxx', lo que pasa que no sé la sintaxis.

Salu2!!!

Última edición por mamawei; 20/11/2008 a las 15:39
  #12 (permalink)  
Antiguo 20/11/2008, 16:06
 
Fecha de Ingreso: septiembre-2008
Mensajes: 20
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Duda con abrir enlace dentro de iframe en nueva ventana/pestaña

ok, al final lo arreglé así:
Código:
function cambiarEnlaces(idIframe)
{
	var miIframe=document.getElementById(idIframe);
	var lnks = miIframe.contentWindow.document.getElementsByTagName("a");
	for (var i = 0; i < lnks.length; i ++){
		lnks[i].href = "../?mod=foro&url=" + lnks[i].href;
		lnks[i].target = "_top";
	}
}
Y ahora se me presenta otro problema: cuando se trata de abrir un último post de un tema, como la url está dentro de: '&url={URL del tema}', y la URL del tema a su vez termina con expresiones: '?f=7&t=329', el resultado global es una larga url:

Cita:
../?mod=foro&url=(ruta del foro)/viewtopic.php?f=7&t=39
  #13 (permalink)  
Antiguo 20/11/2008, 16:43
 
Fecha de Ingreso: septiembre-2008
Mensajes: 20
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Duda con abrir enlace dentro de iframe en nueva ventana/pestaña

Bueno ya parece que va todo, hice uso de una función javascript 'urlencode' para codificar la url que pasa por parámetro. No sé cómo pero al hacer el 'echo $url' el navegador parece que ya la decodifica sola

osea así quedaría la función:
Código:
function cambiarEnlaces(idIframe)
{
	var miIframe=document.getElementById(idIframe);
	var lnks = miIframe.contentWindow.document.getElementsByTagName("a");
	for (var i = 0; i < lnks.length; i ++){
		lnks[i].href = "../?mod=foro&url=" + urlencode(lnks[i].href);
		lnks[i].target = "_top";
	}
}
No puedo daros la dirección de donde obtuve la 'urlencode' ya que me saltó el filtro antispam, y como no puedo tampoco poner el link a la fuente mejor no la posteo y a quien le interese en google puede buscar por 'Kevin van Zonneveld urlencode' y en el segundo enlace ahí lo tienen

Muchísimas gracias ElJavista, me ayudaste mucho a "ir tirando del hilo" Y en general a todos por atender mi duda. Salu2!!

Última edición por mamawei; 20/11/2008 a las 16:48
  #14 (permalink)  
Antiguo 21/11/2008, 17:42
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 1 mes
Puntos: 67
Respuesta: Duda con abrir enlace dentro de iframe en nueva ventana/pestaña

Me alegro que todo te haya salido ok, pero ese código que te di era para que lo pongas en el iframe, como te dije, no en la página principal, así hubieras evitado colocar esto:

var miIframe=document.getElementById(idIframe);
var lnks = miIframe.contentWindow.document.getElementsByTagNa me("a");

Pero en fin, si ya te resultó déjalo asi. Me alegra haberte podido ayudar.

Última edición por ElJavista; 21/11/2008 a las 17:49
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 15:56.