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.
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">
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.
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.
nous pouvons utiliser javascript comme ceci:
target.window.location='locationpage.html';
top.window.location='mypage2.html';
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
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>
<? }?>
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>