Como forçar o link do iframe a ser aberto na janela pai

Respostas:

617

Eu encontrei a melhor solução foi usar a tag base . Adicione o seguinte ao cabeçalho da página no iframe:

<base target="_parent">

Isso carregará todos os links da página na janela pai. Se você deseja que seus links sejam carregados em uma nova janela, use:

<base target="_blank">

Esta tag é totalmente suportada em todos os navegadores.

Chris Vasselli
fonte
4
Como essa tarifa funciona em vários navegadores?
Charlie Schliesser
3
@ Wilf Eu não estava muito correto:;) <base target>deve vir antes de qualquer <a href>, pois define o contexto de navegação padrão para os seguintes links; <base href>deve vir antes de qualquer referência de URL ( <* href> <* src> <form action> <object data>…), pois define o URL base contra o qual os URLs relativos são resolvidos.
sam
5
por que você respondeu a essa pergunta um ano depois de eu ter respondido, com exatamente a mesma resposta? mas você foi escolhido. isso é tão estranho.
vsync
5
Acho que é porque sua resposta abre o link em uma nova janela, enquanto a minha abre na janela pai do iframe, que era a pergunta original. Desculpe roubar seu trovão!
Chris Vasselli
11
Note que a <basetag não tem fechamento de acordo com a especificação w3.org/TR/html5/document-metadata#the-base-element assim que deve ser<base target="_parent" >
Mark Schultheiss
147

Use o atributo target:

<a target="_parent" href="http://url.org">link</a>
nnevala
fonte
11
i tentar isso, é aberto em uma nova janela
Haim Evgi
3
+1 de mim, target base = "_ parent" funciona, mas target = "_ parent" nunca falhou para mim!
7
<base target="_blank">está ok, mas a questão aqui é sobre um link, não sobre a alteração do comportamento de todos os links no iframe. Para mim, esta é a resposta correta.
Kriskodzi
34

Com JavaScript:

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

Você pode usar qualquer opção

no caso de apenas a página pai:

se você deseja abrir todos os links na página pai ou no iframe pai, use o seguinte código na seção principal do iframe:

<base target="_parent" />

OU

se você deseja abrir um link específico na página pai ou no iframe pai, use a seguinte maneira:

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

OU

no caso de iframe aninhado:

Se você deseja abrir todos os links na janela do navegador (redirecionar na URL do navegador), use o seguinte código na seção principal do 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>

OU

se você deseja abrir um link específico na janela do navegador (redirecionar no URL do navegador), use o seguinte modo:

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

ou

<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
fonte
11
Boa resposta, eu precisava apenas usar isso para um link específico, mas a resposta aceita apenas descreve como alterar o destino de todos os links na página. Graças
dading84
15

Há um elemento HTML chamado baseque permite:

Especifique um URL padrão e um destino padrão para todos os links em uma página:

<base target="_blank" />

Ao especificar, _blankverifique se todos os links dentro do iframe serão abertos fora.

vsync
fonte
isso é herdado em iframes aninhados?
beppe9000 2/01
7

Como observado, você pode usar um atributo de destino, mas foi tecnicamente reprovado em XHTML. Isso deixa você usando javascript, geralmente algo como parent.window.location.

Ryan McGrath
fonte
@ PaulD.Waite o link que você postou agora 404s.
Dan Loewenherz
11
@ Dan: aha, sim, obrigado. Link novo: dev.w3.org/html5/spec/…
Paul D. Waite
7

Tente o target="_parent" atributo dentro do anchor tag.

Gee
fonte
i tentar isso, é aberto em uma nova janela
Haim Evgi
4
Tente target = "_ top". O iframe pode conter iframes aninhados? Ou o link real é aberto por javascript no evento onclick?
Gee
5

Se você estiver usando o iframe em sua página da web, poderá encontrar um problema ao alterar a página inteira por meio de um hiperlink HTML (tag de âncora) do iframe. Existem duas soluções para mitigar esse problema.

Solução 1. Você pode usar o atributo de destino da marca âncora, conforme fornecido no exemplo a seguir.

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

Solução 2. Você também pode abrir uma nova página na janela pai do iframe com JavaScript.

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

Lembre-se ⇒ target="_parent"foi descontinuado no XHTML, mas ainda é suportado no HTML 5.x.

Mais informações podem ser lidas no link a seguir http://www.kriblog.com/html/link-of-iframe-open-in-the-parent-window.html

user1788142
fonte
4

A solução mais versátil e cross-browser é evitar o uso da tag "base" e, em vez disso, usar o atributo de destino das tags "a":

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

A <base>tag é menos versátil e os navegadores são inconsistentes em seus requisitos para sua colocação no documento, exigindo mais testes entre navegadores. Dependendo do seu projeto e situação, pode ser difícil ou mesmo totalmente inviável obter o posicionamento ideal da <base>tag entre navegadores .

Fazer isso com o target="_parent"atributo da <a>tag não é apenas mais amigável ao navegador, mas também permite distinguir entre os links que você deseja abrir no iframe e os que deseja abrir no pai.

Adelmar
fonte
3

<a target="parent">abrirá links em uma nova guia / janela ... <a target="_parent">abrirá links na janela pai / atual, sem abrir novas guias / janelas. Não se esqueça disso!

krisjd
fonte
2

Yah eu encontrei

<base target="_parent" />

Isso é útil para abrir todos os links iframe abertos no iframe.

E

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

Isso podemos usar para página inteira ou parte específica da página.

Obrigado a todos por sua ajuda.

Ratan Paul
fonte
1

Tentar target="_top"

<a href="http://example.com" target="_top">
   This link will open in same but parent window of iframe.
</a>
Aamir Shahzad
fonte
não é "_top"o mesmo 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
fonte