简体   繁体   中英

PHP "header (location)" inside IFRAME, to load in _top location?

I have a simple form which is inside IFRAME. When user click on SUBMIT, it redirects to a specific page on my server. The function I use for the redirect is

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

But I want the new page to open in _top location, not inside the same IFRAME that I use. How can I tell the browser to open the new page in _top not inside the IFRAME? Thanks in advance.

You are not able to achieve the desired effect in PHP. This is something you'd have to do from JavaScript or add target attribute to <form> :

<form ... target="_top">

You can use javascript to access the parent. You could echo out javascript in your PHP.. so your parent page has this:

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

and in your php script, you echo

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

The reason you can't call parent.document.location is because it's read only - you have to have a function available on the parent to do it.

A simple way directly in PHP to redirect the parent page rather than the iframe:

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

The die; isn't necessarily necessary, but it is good "just in case" to prevent the script from continuing any further, for example, if javascript is disabled in the user's browser.

we can use javascript like this :

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

The best and simplest thing to do is to use the form target element

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

either of the target parameters works fine

You can either link to the page using <a href="pagename.php?Break=Y">Break Out</a> or use code

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

You then use the following code in the header of the page with

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>

<? }?>

In the page that you want to load in _top, add the follow code in the header

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

For CakePHP 4, to redirect your parent page just add option 'target'=>'_top' in your iframe's link:

Example:

 <?= $this->Html->link(__('Redirect Parent'), ['controller' => 'Users', 'action' => 'view'], ['target'=>'_top']) ?>

All the best!

public function redirect($url){
   header('Window-target: _top');
   header('Location:' . $url, true, 303);
   exit();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM