如何通过php检查当前窗口是“顶部”(或“父”)?

时间:2012-03-02 00:35:47

标签: php javascript window

如果在父浏览器窗口中查看当前页面,我需要显示链接,如果在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>
';

谢谢大家。

3 个答案:

答案 0 :(得分:18)

无法使用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所在的窗口。

答案 1 :(得分:0)

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

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

示例:

(在某处的HTML中)

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

(在<body>

末尾的脚本中
<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当然是微不足道的。但如果你的目标是帮助而不是阻碍用户,那应该不是问题。

答案 2 :(得分:-2)

答案是

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>
';
相关问题