web-dev-qa-db-fra.com

PHP "header (location)" inside IFRAME, pour charger dans _top location?

J'ai un formulaire simple qui se trouve à l'intérieur d'IFRAME. Lorsque l'utilisateur clique sur SOUMETTRE, il redirige vers une page spécifique sur mon serveur. La fonction que j'utilise pour la redirection est

 header ('Location: mypage2.html');
exit ();

Mais je veux que la nouvelle page s'ouvre à l'emplacement _top, pas à l'intérieur du même IFRAME que j'utilise. Comment puis-je dire au navigateur d'ouvrir la nouvelle page dans _top pas à l'intérieur de l'IFRAME? Merci d'avance.

22
Spoonk

Vous n'êtes pas en mesure d'obtenir l'effet souhaité en PHP. C'est quelque chose que vous devez faire à partir de JavaScript ou ajouter l'attribut target à <form>:

<form ... target="_top">
30
Michal M

Vous pouvez utiliser javascript pour accéder au parent. Vous pouvez faire écho à javascript dans votre PHP .. donc votre page parent a ceci:

function changeURL( url ) {
    document.location = url;
}

et dans votre script php, vous faites écho

<script>
   parent.changeURL('mypage2.html' );
</script>

La raison pour laquelle vous ne pouvez pas appeler parent.document.location est parce qu'elle est en lecture seule - vous devez avoir une fonction disponible sur le parent pour le faire.

11
Dan Heberden

Un moyen simple directement dans PHP pour rediriger la page parent plutôt que l'iframe:

echo "<script>top.window.location = '/mynewpage.php'</script>";
die;

Le die; n'est pas nécessairement nécessaire, mais il est bon "au cas où" d'empêcher le script de continuer, par exemple, si javascript est désactivé dans le navigateur de l'utilisateur.

9
Andrew

nous pouvons utiliser javascript comme ceci:

target.window.location='locationpage.html';
top.window.location='mypage2.html';
4
bungdito

La chose la meilleure et la plus simple à faire est d'utiliser l'élément cible du formulaire

<form action="..." target="_top"> 
<form action="..." target="_parent">

l'un des paramètres cibles fonctionne correctement

1
Dimgba Kalu

Vous pouvez créer un lien vers la page à l'aide de <a href="pagename.php?Break=Y">Break Out</a> ou utilisez le code

<?php header("Location: pagename.php?Break=Y"); ?>

Vous utilisez ensuite le code suivant dans l'en-tête de la page avec

if(isset($_GET['Break'])) // 
    {
    $BreakFrame = true;
    $BreakToPage = "pagename.php";

    }

<script language="JavaScript" type="text/javascript">
function changeURL( url ) {
    document.location = url;
}
</script>

<?php if($BreakFrame) { ?>

<script language="JavaScript" type="text/javascript">
parent.changeURL('<?=$BreakToPage?>' );
</script>

<? }?>
1
Jas

Dans la page que vous souhaitez charger dans _top, ajoutez le code de suivi dans l'en-tête

<script type="text/javascript">
if (top != self) top.location.href = location.href;
</script>
0
Doberon