Перенаправить родительское окно из действия iframe

Какой JavaScript мне нужно использовать для перенаправления родительского окна из iframe?

Я хочу, чтобы они щелкнули гиперссылку, которая с помощью JavaScript или любого другого метода перенаправила бы родительское окно на новый URL-адрес.


person Ali    schedule 24.02.2009    source источник
comment
Само по себе родительское окно тоже может быть IFrame. Поскольку принятый ответ относится к верхнему окну, я предлагаю вам немного изменить свой вопрос.   -  person Ron Klein    schedule 10.10.2012


Ответы (14)


window.top.location.href = "http://www.example.com"; 

Перенаправит самый верхний родительский iframe.

window.parent.location.href = "http://www.example.com"; 

Перенаправит родительский iframe.

person MIP    schedule 07.07.2010
comment
Я не думаю, что здесь применяется та же политика происхождения. Имеет смысл, что вы должны иметь возможность вырвать свой сайт из чужого iframe. - person Brian McAuliffe; 25.09.2014
comment
В Chrome @Parris jsfiddle выдает следующую ошибку: Небезопасная попытка JavaScript инициировать навигацию для фрейма с URL-адресом jsfiddle.net/ppkzS 'из кадра с URL' parrisstudios.com/tests/iframe_redirect.html '. Фрейм, пытающийся перейти к окну верхнего уровня, изолирован, но флаг «allow-top-navigation» не установлен. - person Bjarte Aune Olsen; 18.03.2015
comment
@BjarteAuneOlsen интересно, может быть недавнее изменение в chrome или webkit. Раньше это определенно работало. Прошло пару лет :). Также в ответе указывалось, что применена та же политика происхождения, которая раньше делала ответ неверным, но теперь делает его правильным, а мой комментарий неправильным -_-. - person Parris; 18.03.2015
comment
@BjarteAuneOlsen - я считаю, что это связано с тем, что iframes на JSFiddle намеренно изолированы в песочнице, поэтому они явно отказано в определенных функциях (таких как перенаправление и т. д.) - есть опасность, что вы воспользуетесь JS, чтобы уйти от JS Fiddle и потерять свою работу ... - person Zhaph - Ben Duguid; 13.05.2015
comment
Я тестировал последнюю версию Safari (10.0.3 (12602.4.8)), я получил эту ошибку консоли: Unsafe JavaScript attempt to initiate navigation for frame with URL 'http://jsfiddle.net/ppkzS/' from frame with URL 'http://www.parrisstudios.com/tests/iframe_redirect.html'. The frame attempting navigation of the top-level window is sandboxed, but the 'allow-top-navigation' flag is not set. - person xhg; 20.03.2017
comment
Ошибки, с которыми здесь сталкиваются люди, связаны с новым атрибутом HTML5 для iframe, который называется sandbox - developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe Атрибут sandbox запрещает javascript выполнять определенные действия в iframe на основе заданного белого списка разрешенных действий. Свойство allow-top-navigation - это одно из действий, которое вы можете включить в белом списке, что позволяет этому коду работать. Если атрибут sandbox отсутствует, все действия разрешены. Если он присутствует и пустая строка, все действия запрещены. - person Marcus Harrison; 03.07.2017
comment
Это не действует в некоторых условиях из Chrome 68: The frame attempting navigation is targeting its top-level window, but is neither same-origin with its target nor has it received a user gesture. - person joseantgv; 14.09.2018
comment
@joseantgv ОП ясно говорит, что навигация предназначена для щелчка по гиперссылке. Щелчок - это жест пользователя. - person Alireza; 04.01.2019
comment
@Alireza but is neither same-origin with its target - person joseantgv; 07.01.2019
comment
@joseantgv Это не проблема, пока пользователь взаимодействует с фреймом. - person Alireza; 08.01.2019
comment
Оба решения не сработали для меня. Chrome в Windows 10 говорит: «Перенаправление заблокировано». Если пользователь не разрешает, это решение не будет работать. - person Kamlesh; 02.01.2021

Я обнаружил, что <a href="..." target="_top">link</a> тоже работает

person Ali    schedule 24.02.2009
comment
Хотя выбранный ответ правильный, я думаю, что это лучший ответ для цели вопроса. Также он будет работать для людей с отключенным JS. - person Michael; 30.01.2013
comment
Я согласен, что это лучшее решение, но OP специально попросил javascript. С другой стороны, OP указал, что он должен запускаться через привязку - я не вижу сценария, в котором можно было бы использовать javascript из тега привязки для достижения желаемого результата, поэтому вопрос вводит в заблуждение. - person Shawn J. Molloy; 26.07.2014
comment
Такой простой и элегантный. Работает как шарм :) - person Yash; 28.12.2016
comment
Мне нужно перенаправить родительский iframe из дочернего iframe. Пробовал _parent, но он не работает в firefox. - person Anil kumar; 15.12.2020

window.top.location.href = "http://example.com";

window.top относится к оконному объекту страницы наверху иерархии фреймов.

person Luca Matteis    schedule 24.02.2009
comment
Свойство window.top.location.href не может быть обновлено из Iframe, оно вызывает выполнение отказа в доступе. Он может быть выполнен только при тестировании на локальном хосте. - person Muhammad Ummar; 05.06.2010
comment
@Ummar: я бы добавил, что это работает, когда родительский элемент iframe имеет тот же домен, тот же порт (одинаковые политики происхождения), он выдает исключение отказано в доступе, когда они разные, чтобы предотвратить нарушения безопасности - person Quan Mai; 04.04.2012
comment
@Ummar, это неправда, jsfiddle.net/ppkzS в качестве доказательства. Вы можете изменить window.top.location.href. Вы просто не можете это прочитать. Работает в хроме. - person Parris; 06.08.2013
comment
Отличный jsfiddle @Parris, это решает все для меня :) - person Max Williams; 21.08.2013
comment
Я подозреваю, что некоторые из сомневающихся могли пробовать что-то подобное в iframe: window.top.location.href = window.top.location.href; - person mjj1409; 26.07.2014
comment
Этот ответ пришел намного раньше принятого ответа, почему у него нет подтверждения и поддержки? - person Ed Bayiates; 03.12.2015

target="_parent" отлично поработал для меня. легко и без проблем!

person rDroid    schedule 25.11.2014
comment
Кажется, они отлично работают. Есть ли недостатки в использовании этого метода вместо Javascript? - person flyingL123; 17.09.2015
comment
не то, что я знаю из. ОБЯЗАТЕЛЬНО поделитесь, если что-то узнаете. - person rDroid; 21.09.2015

или альтернативой является следующее (с использованием объекта документа)

parent.document.location.href = "http://example.com";
person Real Red.    schedule 24.02.2009
comment
Это решение специфично для Firefox. Надо просто использовать parent.location.href = .... developer.mozilla.org/en/document.location - person kay; 13.07.2012
comment
Решение не сработало для меня. Chrome в Windows 10 говорит: «Перенаправление заблокировано». Если пользователь не разрешает, это решение не будет работать - person Kamlesh; 02.01.2021

@MIP прав, но с более новыми версиями Safari вам нужно будет добавить атрибут песочницы (HTML5), чтобы предоставить перенаправленный доступ к iFrame. Есть несколько конкретных значений, которые можно добавить через пробел.

Ссылка (вам нужно будет прокрутить): https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe

Ex:

<iframe sandbox="allow-top-navigation" src="http://google.com/"></iframe>
person Raymond B    schedule 23.10.2014
comment
Обратите внимание, что атрибут sandbox включает дополнительный набор ограничений для содержимого в <iframe>. Значение свойства sandbox снимает определенные ограничения. Так что будьте осторожны при использовании этой функции. w3schools.com/tags/att_iframe_sandbox.asp - person gitaarik; 18.04.2019

Это разрешит страдания.

<script>parent.location='http://google.com';</script>
person haris    schedule 06.07.2012

Если вы хотите перенаправить на другой домен без каких-либо действий со стороны пользователя, вы можете использовать ссылку со свойством:

target="_parent"

как было сказано ранее, а затем используйте:

document.getElementById('link').click();

чтобы он автоматически перенаправлял.

Пример:

<!DOCTYPE HTML>

<html>

<head>

</head>

<body>

<a id="link" target="_parent" href="outsideDomain.html"></a>

<script type="text/javascript">
    document.getElementById('link').click();
</script>

</body>

</html>

Примечание. Команда javascript click () должна появляться после объявления ссылки.

person Tom Burris    schedule 26.03.2016

Можно перенаправить из iframe, но не получить информацию от родителя.

person Joris Kok    schedule 08.02.2012

Для текущей страницы - window.location.href = Ваш URL здесь;

Для родительской страницы - window.top.location.href = Ваш URL здесь;

Из HTML

<a href="http://someurl" target="_top">link</a>
person Boris Adamyan    schedule 02.11.2020

Попробуйте использовать

window.parent.window.location.href = 'http://google.com'
person Chirag Gohel    schedule 31.10.2012
comment
Простая версия: parent.window.location = '‹URL›'; - person shasi kanth; 01.12.2015
comment
или еще более упрощенно: parent.location = 'url' - person grilly; 12.05.2016

window.top.location.href = 'index.html';

Это перенаправит главное окно на страницу индекса. Спасибо

person John Sheedy    schedule 08.11.2013
comment
Дубликат этого ответа почти 5 лет назад. - person Michael; 27.02.2018

Мы должны использовать window.top.location.href для перенаправления родительского окна из действия iframe.

URL демонстрации:

person Faizal    schedule 16.05.2019
comment
Кто мы? :) Не могли бы вы вписать в ответ существенные части из url-адреса? URL-адреса / ссылки могут измениться или удаляться. - person YesThatIsMyName; 16.05.2019

Перенаправить iframe в родительском окне на iframe в том же родителе:

window.parent.document.getElementById("content").src = "content.aspx?id=12";
person mohamed moren3    schedule 27.08.2013