Заголовок (местоположение) PHP внутри IFRAME для загрузки в _top?

У меня есть простая форма, которая находится внутри IFRAME. Когда пользователь нажимает «ОТПРАВИТЬ», он перенаправляется на определенную страницу на моем сервере. Функция, которую я использую для перенаправления,

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

Но я хочу, чтобы новая страница открывалась в _top, а не в том же IFRAME, который я использую. Как я могу сказать браузеру открыть новую страницу в _top не внутри IFRAME? Заранее спасибо.


person Spoonk    schedule 06.06.2010    source источник
comment
Что делать, если у вас нет доступа к элементу FORM, а также нет доступа к коду страницы PARENT?   -  person Doug    schedule 14.04.2015


Ответы (8)


Вы не можете добиться желаемого эффекта в PHP. Это то, что вам нужно сделать из JavaScript или добавить атрибут target к <form>:

<form ... target="_top">
person Michal M    schedule 06.06.2010
comment
+1 хорошее решение. Однако это испортит любую проверку ошибок на стороне сервера, если вы хотите перенаправить пользователя на исходную страницу в случае ошибки. - person jeroen; 06.06.2010
comment
@jeroen Я проверяю поле с помощью javascript на своей простой странице .html. Мне не нужно перенаправление в случае пустых полей. Я использую оповещение :) - person Spoonk; 06.06.2010

Вы можете использовать javascript для доступа к родителю. Вы можете повторить javascript в своем PHP.. так что ваша родительская страница имеет это:

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

и в вашем php-скрипте вы повторяете

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

Причина, по которой вы не можете вызвать parent.document.location, заключается в том, что он доступен только для чтения — для этого у вас должна быть функция, доступная для родителя.

person Dan Heberden    schedule 06.06.2010

Простой способ непосредственно в PHP перенаправить родительскую страницу, а не iframe:

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

die; не обязательно необходим, но это хорошо "на всякий случай", чтобы предотвратить дальнейшее выполнение скрипта, например, если javascript отключен в браузере пользователя.

person Andrew    schedule 09.02.2016

мы можем использовать javascript следующим образом:

target.window.location='locationpage.html';
top.window.location='mypage2.html';
person bungdito    schedule 20.04.2011

Самое лучшее и простое, что можно сделать, это использовать целевой элемент формы

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

любой из целевых параметров работает нормально

person Dimgba Kalu    schedule 18.07.2012

Вы можете сделать ссылку на страницу с помощью <a href="pagename.php?Break=Y">Break Out</a> или использовать код

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

Затем вы используете следующий код в заголовке страницы с

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>

<? }?>
person Jas    schedule 15.11.2014

На странице, которую вы хотите загрузить в _top, добавьте следующий код в заголовок

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

Для CakePHP 4, чтобы перенаправить вашу родительскую страницу, просто добавьте опцию 'target'=>'_top' в ссылку вашего iframe:

Пример:

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

Всего наилучшего!

person Marwan Salim    schedule 28.07.2020