Как перейти на другую страницу из фрейма? - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть страница с одной кнопкой.При нажатии эта кнопка переходит к http://google.com/

$("#button").click(function(){
  window.location="http://google.com";
});

. Мне бы хотелось, чтобы эта навигация работала, когда эта страница встроена в iframe.Я не хочу влиять на внешнюю страницу хоста, а только на содержимое iframe.Какой хороший кроссплатформенный способ:

  1. Определить, содержится ли я в iframe
  2. Если нет, перейдите, как описано выше.
  3. Если да, перейдитетолько iframe?

(Я собираюсь реализовать алгоритм, который я только что описал, но, несмотря на это, я думаю, что этот вопрос достаточно интересен для публикации. Если мне это удастся, я опубликуюраствор)

1 Ответ

5 голосов
/ 27 декабря 2011

1) Определить, содержится ли я в iframe

if (window != window.top) { 
    // the page is inside an iframe
}

2) Если нет, перейдите, как указано выше.

навигация как выше

3) Если да, перемещаться только по фрейму?

Когда вы пишете window.location.href = 'http://www.google.com';, вы перемещаетесь по содержимому iframe, а не по верхней странице. Если вы хотите перемещаться по верхней странице, вы можете сделать это только в том случае, если эта верхняя страница находится в том же домене, что и iframe, и вы можете использовать window.top.location.href.


UPDATE:

В браузеры встроен механизм безопасности, который запрещает перенаправлять на сайты, которые устанавливают заголовок ответа X-Frame-Options: SAMEORIGIN внутри фрейма. Это в случае с http://www.google.com. Просто перейдите на этот сайт и посмотрите HTTP-заголовки ответа с помощью FireBug или панели инструментов разработчика, которую вы используете, и вы увидите этот заголовок. Вы не можете перенаправить на него, и вы получите следующее сообщение об ошибке:

Refused to display document because display forbidden by X-Frame-Options.

Это в основном механизм безопасности, реализованный некоторыми сайтами, авторы которых не хотели, чтобы вы встраивали их в iframe.

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