2011-12-27 4 views
0

У меня есть страница с одной кнопкой. При нажатии этой кнопки переходит к http://google.com/Как я могу перейти на другую страницу, из iframe?

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

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

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

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

ответ

5

1) обнаружить, если я содержится в IFRAME

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

2) Если нет, то перемещаться, как и выше.

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

3) Если да, то перейти только IFRAME?

Когда вы пишете 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.

+0

Я хочу, чтобы только контент iframe перемещался, а не верхний домен. Выполнение 'window.location = url' не помогло мне. – ripper234

+0

@ ripper234, что происходит, когда вы используете 'window.location' из ** внутри ** iframe? Является ли скрипт запущенным внутри iframe или нет? Я начинаю подозревать, что это не так, если вы так перенаправляете верхнюю страницу. –

+0

Сценарий работает от ** внутри ** iframe. Браузер (хром) отображает короткую анимацию «загрузки» (например, при загрузке новой страницы), только она фактически не перемещается. – ripper234