Как я могу проверить, является ли текущее окно "top" (или "parent") через php? - PullRequest
4 голосов
/ 02 марта 2012

Мне нужно отобразить ссылку, если текущая страница просматривается в родительском окне браузера, или отобразить другую ссылку, если окно просматривается внутри iframe. Как я могу сделать это через php? Что-то вроде:

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

edit: поскольку это невозможно сделать с помощью 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 ]

19 голосов
/ 02 марта 2012

Вы не можете сделать это с помощью 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.

0 голосов
/ 07 марта 2012

Ответ

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>
';
0 голосов
/ 02 марта 2012

Нет способа обнаружить это в среде из 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, конечно, тривиально обойти. Но если вашцель состоит в том, чтобы помочь, а не мешать вашим пользователям, это не должно быть проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...