Cómo forzar el enlace del iframe para que se abra en la ventana principal

Respuestas:

617

Encontré que la mejor solución era usar la etiqueta base . Agregue lo siguiente al encabezado de la página en el iframe:

<base target="_parent">

Esto cargará todos los enlaces en la página en la ventana principal. Si desea que sus enlaces se carguen en una nueva ventana, use:

<base target="_blank">

Esta etiqueta es totalmente compatible con todos los navegadores.

Chris Vasselli
fuente
44
¿Cómo funciona este navegador cruzado?
Charlie Schliesser el
3
@Wilf no estaba del todo correcto:;) <base target>debería aparecer antes que ninguno <a href>, ya que establece el contexto de navegación predeterminado para los siguientes enlaces; <base href>debe aparecer antes de cualquier referencia de URL ( <* href> <* src> <form action> <object data>...) ya que establece la URL base contra la cual se resuelven las URL relativas.
sam
55
¿Por qué respondiste esta pregunta un año después de que yo la respondiera, exactamente con la misma respuesta? Pero fuiste elegido. Esto es muy extraño.
vsync
55
Creo que es porque su respuesta abre el enlace en una nueva ventana, mientras que la mía lo abre en la ventana principal del iframe, que era la pregunta original. Lamento robarte el trueno!
Chris Vasselli
1
Tenga en cuenta que la <baseetiqueta no tiene cierre de acuerdo con la especificación w3.org/TR/html5/document-metadata#the-base-element, por lo que debería ser<base target="_parent" >
Mark Schultheiss
147

Utilice el atributo de destino:

<a target="_parent" href="http://url.org">link</a>
nnevala
fuente
1
intento esto, se abre en una nueva ventana
Haim Evgi
3
¡+1 de mi parte, target base = "_ parent" funciona pero target = "_ parent" nunca me ha fallado!
77
<base target="_blank">está bien, pero la pregunta aquí es sobre un enlace, no sobre el cambio de comportamiento de todos los enlaces en el iframe. Para mí esta es la respuesta correcta.
kriskodzi
34

Con JavaScript:

window.parent.location.href= "http://www.google.com";
Yenssen
fuente
28

Puedes usar cualquier opción

en caso de solo página principal:

si desea abrir todos los enlaces en la página principal o en el iframe principal, utilice el siguiente código en la sección principal del iframe:

<base target="_parent" />

O

si desea abrir un enlace específico en la página principal o el iframe principal, utilice la siguiente manera:

<a target="_parent" href="http://specific.org">specific Link</a>
<a  href="http://normal.org">Normal Link</a>

O

en caso de iframe anidado:

Si desea abrir todos los enlaces en la ventana del navegador (redirigir en la URL del navegador), utilice el siguiente código en la sección principal del iframe:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript">
    $(window).load(function(){
        $("a").click(function(){
            top.window.location.href=$(this).attr("href");
            return true;
        })
    })
</script>

O

si desea abrir un enlace específico en la ventana del navegador (redirigir en la url del navegador), utilice la siguiente manera:

<a  href="http://specific.org"   target="_top" >specific Link</a>

o

<a  href="javascript:top.window.location.href='your_link'">specific Link</a>
<a  href="javascript:top.window.location.href='http://specific.org'">specific Link</a>
<a  href="http://normal.org">Normal Link</a>
Ahosan Karim Asik
fuente
1
Buena respuesta, solo necesitaba usar esto para un enlace específico, pero la respuesta aceptada solo describe cómo cambiar el objetivo para todos los enlaces en la página. Gracias
dading84
15

Hay un elemento HTML llamado baseque le permite:

Especifique una URL predeterminada y un destino predeterminado para todos los enlaces en una página:

<base target="_blank" />

Al especificar _blank, asegúrese de que todos los enlaces dentro del iframe se abrirán afuera.

vsync
fuente
¿Se hereda esto en iframes anidados?
beppe9000
7

Como se señaló, podría usar un atributo de destino, pero técnicamente estaba en desuso en XHTML. Eso te deja con el uso de JavaScript, generalmente algo así parent.window.location.

Ryan McGrath
fuente
@ PaulD.Waite el enlace que publicó ahora 404s.
Dan Loewenherz
1
@Dan: aha, sí, gracias. Enlace nuevo: dev.w3.org/html5/spec/…
Paul D. Waite
7

Pruebe el target="_parent" atributo dentro de anchor tag.

Caramba
fuente
intento esto, se abre en una nueva ventana
Haim Evgi
44
Prueba target = "_ top". El iframe puede contener iframes anidados? ¿O javascript abre el enlace real en el evento onclick?
Gee
5

Si usa iframe en su página web, puede encontrar un problema al cambiar toda la página a través de un hipervínculo HTML (etiqueta de anclaje) del iframe. Hay dos soluciones para mitigar este problema.

Solución 1. Puede utilizar el atributo de destino de la etiqueta de anclaje como se muestra en el siguiente ejemplo.

<a target="_parent" href="http://www.kriblog.com">link</a>

Solución 2. También puede abrir una nueva página en la ventana principal desde el iframe con JavaScript.

<a href="#" onclick="window.parent.location.href='http://www.kriblog.com';">

Recuerde ⇒ target="_parent"ha quedado en desuso en XHTML, pero aún es compatible con HTML 5.x.

Se puede leer más en el siguiente enlace http://www.kriblog.com/html/link-of-iframe-open-in-the-parent-window.html

usuario1788142
fuente
4

La solución más versátil y más cruzada del navegador es evitar el uso de la etiqueta "base" y, en su lugar, usar el atributo de destino de las etiquetas "a":

<a target="_parent" href="http://www.stackoverflow.com">Stack Overflow</a>

La <base>etiqueta es menos versátil y los navegadores son inconsistentes en sus requisitos para su ubicación dentro del documento, lo que requiere más pruebas entre navegadores. Dependiendo de su proyecto y situación, puede ser difícil o incluso totalmente inviable lograr la ubicación ideal del navegador cruzado del<base> etiqueta en .

Hacer esto con el target="_parent"atributo de la <a>etiqueta no solo es más amigable con el navegador, sino que también le permite distinguir entre los enlaces que desea abrir en el iframe y aquellos que desea abrir en el padre.

Adelmar
fuente
3

<a target="parent">abrirá enlaces en una nueva pestaña / ventana ... <a target="_parent">abrirá enlaces en la ventana principal / actual, sin abrir nuevas pestañas / ventanas. ¡No te olvides de eso!

krisjd
fuente
2

Yah encontré

<base target="_parent" />

Esto es útil para abrir todos los enlaces de iframe abiertos en iframe.

Y

$(window).load(function(){
    $("a").click(function(){
        top.window.location.href=$(this).attr("href");
        return true;
    })
})

Esto lo podemos usar para toda la página o parte específica de la página.

Gracias a todos por su ayuda.

Ratan Paul
fuente
1

Tratar target="_top"

<a href="http://example.com" target="_top">
   This link will open in same but parent window of iframe.
</a>
Aamir Shahzad
fuente
no es lo "_top"mismo que "_parent"?
svelandiag
0
   <script type="text/javascript"> // if site open in iframe then redirect to main site
        $(function(){
             if(window.top.location != window.self.location)
             {
                top.window.location.href = window.self.location;
             }
        });
    </script>
Sandeep Kumar
fuente