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

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

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

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

【问题讨论】:

  • 如果您无法访问 FORM 元素,也无法访问 PARENT 页面的代码,该怎么办?

标签: php iframe header location


【解决方案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']) ?>
              

              一切顺利!

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2013-09-15
                • 1970-01-01
                • 1970-01-01
                • 2020-12-20
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多