【问题标题】:How can i check if the current window is "top" (or "parent") via php?如何通过 php 检查当前窗口是否为“顶部”(或“父”)?
【发布时间】:2012-03-02 00:35:46
【问题描述】:

如果当前页面正在父浏览器窗口中查看,我需要显示一个链接,或者如果正在 iframe 中查看窗口,我需要显示另一个链接。 我怎么能通过php做到这一点?比如:

if (self == top)
        echo '<span><a href="./" >Link1</a></span>';
else
        echo '<span><a href="./index.php">Link2</a></span>';

编辑:因为它不能用php完成,我还在寻找类似的解决方案,也许是JS,有人可以告诉我怎么做吗?

最终编辑: 答案:

echo '  
<script type="text/javascript">
    if(window === top) {
document.write("<span><a href=\"./\">go-to-frame</a></span>");
    }
    else {
document.write("<span><a href=\"./index.php\">go-to-top</a></span>");
    }
</script>
';

谢谢大家。

【问题讨论】:

  • 根据您是否在 iframe 中使用查询字符串来传递查询字符串可能要容易得多,但如果这不可能,您将需要使用 JavaScript 来重写您的链接。
  • 好吧,玩弄两个答案我想出了如何做到这一点。由于我无法将 2 个答案标记为正确,因此我不会将其标记为无。伙计们这样好吗?还是我应该做点别的?无论如何,我用正确的答案编辑了第一个主题。

标签: php javascript window


【解决方案1】:

不能用 PHP 做到这一点;它是一种服务器端语言,而不是客户端语言。因为它取决于客户端如何处理窗口,所以服务器对此一无所知。您可以在 AJAX 请求中发回一些内容,然后重新加载页面,但这是一个混乱、可怕的解决方案。

要检测您是否在顶级窗口中,您需要执行以下操作:

if(window.top == window.self) {
    // Top level window
} else {
    // Not top level. An iframe, popup or something
}

您在问题中给出的示例非常接近。 window.top 是堆栈的最顶层窗口,window.self 是当前 JS 和 DOM 所在的窗口。

【讨论】:

  • 好的,但是我的知识有限,如何在我的 php 脚本中插入这个 JS?
  • @LucasMatos 你不能将 JavaScript 插入 PHP,除非你 echo 它。
  • @Lucas 您需要将该 JavaScript 放在 HTML 中的 &lt;script&gt;&lt;/script&gt; 标记中。您应该研究一下如何将 JavaScript 包含到页面中。
  • 类似echo '&lt;script language="JavaScript" type="text/javascript"&gt; if(window.top == window.self) &lt;span&gt;&lt;a href="./"&gt;Link1&lt;/a&gt;&lt;/span&gt; else &lt;span&gt;&lt;a href="./index.php"&gt;Link2&lt;/a&gt;&lt;/span&gt;&lt;/script&gt;';
【解决方案2】:

无法从 PHP 中检测到有关环境的信息。

但是,您可以(通常)从 Javascript 中检测到它。

例子:

(在您的 HTML 中某处)

<span><a id="MyDynamicLink" href="./">Link1</a></span>

(在你的脚本末尾&lt;body&gt;

<script type="text/javascript">
    if(window === top) {
        function () {
            //this grabs the element from the document tree
            var link = document.getElementById('MyDynamicLink');

            //this sets the 'href' to './index.php'.
            link.setAttribute('href', './index.php');

            //this sets the text inside the link to be 'Link2'
            link.innerHTML = 'Link2';
            //or whatever else you really wanted to do in this situation
        }();
    }
</script>

Javascript 当然是微不足道的。但是,如果您的目标是帮助而不是阻碍您的用户,那应该不是问题。

【讨论】:

  • 这看起来是一个不错的解决方案,但我不知道你在做什么.. 无法做到这一点。 Link1 和 Link2 是文本锚,不是真正的链接(url)。
  • 它不工作,它把我带到同一个目的地./ 每当页面在框架中被查看时,文本链接都是相同的 链接1
【解决方案3】:

答案是

echo '  
<script type="text/javascript">
    if(window === top) {
document.write("<span><a href=\"./\">go-to-frame</a></span>");
    }
    else {
document.write("<span><a href=\"./index.php\">go-to-top</a></span>");
    }
</script>
';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 2015-10-13
    • 2017-12-29
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多