IFRAME 中的 PHP“标头(位置)”,加载到 _top 位置?

Posted

技术标签:

【中文标题】IFRAME 中的 PHP“标头(位置)”,加载到 _top 位置?【英文标题】:PHP "header (location)" inside IFRAME, to load in _top location? 【发布时间】:2011-02-28 10:41:48 【问题描述】:

我有一个简单的表格,它位于 IFRAME 中。当用户单击提交时,它会重定向到我服务器上的特定页面。我用于重定向的功能是

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

但我希望新页面在 _top 位置打开,而不是在我使用的同一个 IFRAME 内。如何告诉浏览器在 _top 而不是 IFRAME 内打开新页面? 提前致谢。

【问题讨论】:

如果您无法访问 FORM 元素,也无法访问 PARENT 页面的代码,该怎么办? 【参考方案1】:

您无法在 php 中达到预期的效果。这是您必须通过 javascript 执行的操作,或者将 target 属性添加到 <form>

<form ... target="_top">

【讨论】:

+1 好的解决方案。但是,如果您想在发生错误时将用户重定向到原始页面,它会打乱任何服务器端错误检查。 @jeroen 我在我的简单 .html 页面中使用 javascript 进行了字段检查。如果字段为空,我不需要重定向。我使用警报:)【参考方案2】:

您可以使用 javascript 访问父级。你可以在你的 PHP 中回显 javascript .. 所以你的父页面有这个:

function changeURL( url ) 
    document.location = url;

在你的 php 脚本中,你回显

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

您不能调用 parent.document.location 的原因是因为它是只读的 - 您必须在父级上有一个可用的函数才能执行此操作。

【讨论】:

【参考方案3】:

直接在 PHP 中重定向父页面而不是 iframe 的简单方法:

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

die; 不一定是必需的,但最好“以防万一”以防止脚本继续执行,例如,如果用户浏览器中禁用了 javascript。

【讨论】:

【参考方案4】:

我们可以像这样使用javascript:

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

【讨论】:

【参考方案5】:

最好和最简单的做法是使用表单目标元素

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

任何一个目标参数都可以正常工作

【讨论】:

【参考方案6】:

您可以使用&lt;a href="pagename.php?Break=Y"&gt;Break Out&lt;/a&gt; 链接到该页面或使用代码

<?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>

<? ?>

【讨论】:

【参考方案7】:

在要加载的页面_top中,在header中添加如下代码

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

【讨论】:

【参考方案8】:

对于 CakePHP 4,要重定向您的父页面,只需在 iframe 的链接中添加选项 'target'=&gt;'_top'

例子:

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

一切顺利!

【讨论】:

以上是关于IFRAME 中的 PHP“标头(位置)”,加载到 _top 位置?的主要内容,如果未能解决你的问题,请参考以下文章

php - 标头位置重定向:https 到 https,http 到 http

标头位置相对路径兼容性

PHP 标头位置即使在输出缓冲区内也被发送?

PHP 标头重定向不会在 IE 中重新加载 <iframe>

从单独的 iframe 重新加载 iframe

如何在一个页面上加载具有相同 src 的多个 iframe