Comment forcer l'ouverture du lien depuis iframe dans la fenêtre parent

359

J'ai besoin d'ouvrir le lien dans la même page parent, au lieu de l'ouvrir dans une nouvelle page.

remarque: iframela page parent et sont le même domaine .

Haim Evgi
la source
Copie possible des liens
clickbait

Réponses:

617

J'ai trouvé que la meilleure solution était d'utiliser la balise de base . Ajoutez ce qui suit en tête de page dans l'iframe:

<base target="_parent">

Cela chargera tous les liens sur la page dans la fenêtre parent. Si vous souhaitez que vos liens se chargent dans une nouvelle fenêtre, utilisez:

<base target="_blank">

Cette balise est entièrement prise en charge dans tous les navigateurs.

Chris Vasselli
la source
4
Comment fonctionne ce cross-browser?
Charlie Schliesser du
3
@Wilf je n'étais pas tout à fait correct:;) <base target>devrait venir avant tout <a href>, car il définit le contexte de navigation par défaut pour les liens suivants; <base href>doit précéder toute référence d'URL ( <* href> <* src> <form action> <object data>…) car elle définit l'URL de base par rapport à laquelle les URL relatives sont résolues.
sam
5
pourquoi avez-vous répondu à cette question un an après que j'aie répondu, avec exactement la même réponse? mais vous avez été choisi. c'est tellement étrange.
vsync
5
Je pense que c'est parce que votre réponse ouvre le lien dans une nouvelle fenêtre, tandis que la mienne l'ouvre dans la fenêtre parente de l'iframe, qui était la question d'origine. Désolé de voler votre tonnerre!
Chris Vasselli
1
Notez que la <basebalise n'a pas de fermeture selon la spécification w3.org/TR/html5/document-metadata#the-base-element donc elle devrait l'être<base target="_parent" >
Mark Schultheiss
147

Utilisez target-attribute:

<a target="_parent" href="http://url.org">link</a>
nnevala
la source
1
j'essaye ceci, est ouvert dans une nouvelle fenêtre
Haim Evgi
3
+1 de ma part, base target = "_ parent" fonctionne mais target = "_ parent" n'a jamais échoué pour moi!
7
<base target="_blank">est ok, mais la question ici concerne un seul lien, pas le changement de comportement de tous les liens sur iframe. Pour moi, c'est la bonne réponse.
kriskodzi
34

Avec JavaScript:

window.parent.location.href= "http://www.google.com";
yenssen
la source
28

Vous pouvez utiliser toutes les options

en cas de page parent uniquement:

si vous souhaitez ouvrir tous les liens dans la page parent ou iframe parent, vous utilisez le code suivant dans la section head de iframe:

<base target="_parent" />

OU

si vous souhaitez ouvrir un lien spécifique dans la page parent ou iframe parent, vous utilisez la manière suivante:

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

OU

en cas d'iframe imbriqué:

Si vous souhaitez ouvrir tous les liens dans la fenêtre du navigateur (rediriger dans l'URL du navigateur), vous utilisez le code suivant dans la section head de 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

si vous souhaitez ouvrir un lien spécifique dans la fenêtre du navigateur (rediriger dans l'url du navigateur), vous utilisez la méthode suivante:

<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
la source
1
Bonne réponse, je devais simplement l'utiliser pour un lien spécifique, mais la réponse acceptée ne décrit que comment changer la cible de tous les liens sur la page. Merci
dading84
15

Il y a un élément HTML appelé basequi vous permet de:

Spécifiez une URL par défaut et une cible par défaut pour tous les liens sur une page:

<base target="_blank" />

En spécifiant, _blankvous vous assurez que tous les liens à l'intérieur de l' iframe seront ouverts à l'extérieur.

vsync
la source
est-ce hérité des iframes imbriqués?
beppe9000
7

Comme indiqué, vous pouvez utiliser un attribut cible, mais il était techniquement obsolète en XHTML. Cela vous laisse utiliser javascript, généralement quelque chose comme parent.window.location.

Ryan McGrath
la source
@ PaulD.Waite le lien que vous avez publié maintenant 404s.
Dan Loewenherz
1
@Dan: aha, oui merci. Nouveau
Paul D. Waite
7

Essayez l' target="_parent" attribut à l'intérieur du anchor tag.

Gee
la source
j'essaye ceci, est ouvert dans une nouvelle fenêtre
Haim Evgi
4
Essayez target = "_ top". L'iframe peut contenir des iframes imbriqués? Ou le lien réel est ouvert par javascript sur l'événement onclick?
Gee
5

Si vous utilisez iframe dans votre page Web, vous pouvez rencontrer un problème lors de la modification de la page entière via un lien hypertexte HTML (balise d'ancrage) à partir de l'iframe. Il existe deux solutions pour atténuer ce problème.

Solution 1. Vous pouvez utiliser l'attribut cible de la balise d'ancrage comme indiqué dans l'exemple suivant.

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

Solution 2. Vous pouvez également ouvrir une nouvelle page dans la fenêtre parent à partir d'iframe avec JavaScript.

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

N'oubliez pas que ⇒ target="_parent"a été déprécié en XHTML, mais il est toujours pris en charge en HTML 5.x.

Plus d'informations peuvent être lues à partir du lien suivant http://www.kriblog.com/html/link-of-iframe-open-in-the-parent-window.html

user1788142
la source
4

La solution la plus polyvalente et la plus multi-navigateurs consiste à éviter l'utilisation de la balise "base" et à utiliser à la place l'attribut cible des balises "a":

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

La <base>balise est moins polyvalente et les navigateurs ne sont pas cohérents dans leurs exigences pour son placement dans le document, ce qui nécessite davantage de tests inter-navigateurs. En fonction de votre projet et de votre situation, il peut être difficile, voire totalement impossible, d'obtenir le placement idéal de la <base>balise entre les navigateurs .

Faire cela avec l' target="_parent"attribut de la <a>balise est non seulement plus convivial pour le navigateur, mais vous permet également de faire la distinction entre les liens que vous souhaitez ouvrir dans l'iframe et ceux que vous souhaitez ouvrir dans le parent.

Adelmar
la source
3

<a target="parent">ouvrira des liens dans un nouvel onglet / fenêtre ... <a target="_parent">ouvrira des liens dans la fenêtre parent / actuelle, sans ouvrir de nouveaux onglets / fenêtres. Don't_forget_that_underscore!

krisjd
la source
2

Yah j'ai trouvé

<base target="_parent" />

Ceci est utile pour ouvrir tous les liens iframe ouverts dans iframe.

Et

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

Cela peut être utilisé pour une page entière ou une partie spécifique de la page.

Merci à tous pour votre aide.

Ratan Paul
la source
1

Essayer target="_top"

<a href="http://example.com" target="_top">
   This link will open in same but parent window of iframe.
</a>
Aamir Shahzad
la source
n'est pas "_top"le même 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
la source