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

312

Какой JavaScript мне нужно использовать, чтобы перенаправить родительское окно из iframe?

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

Нажмите Upvote
источник
5
Родительское окно, сам по себе, может быть IFrame, тоже. Поскольку принятый ответ относится к верхнему окну, я предлагаю вам немного изменить свой вопрос.
Рон Кляйн

Ответы:

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

Как указывалось ранее, будет перенаправлен родительский iframe.

MIP
источник
Я не думаю, что здесь применяется та же политика происхождения. Это имеет смысл, что вы должны иметь возможность вырвать свой сайт из чужого iframe.
Брайан МакОлифф,
1
В Chrome @Parris jsfiddle выдает эту ошибку: небезопасная попытка JavaScript инициировать навигацию для фрейма с URL-адресом « jsfiddle.net/ppkzS » из фрейма с URL-адресом « parrisstudios.com/tests/iframe_redirect.html ». Фрейм, пытающийся перемещаться по окну верхнего уровня, помещается в «песочницу», но флаг «allow-top-navigation» не установлен.
Бьярте Ауне Олсен
1
@BjarteAuneOlsen интересно, может быть недавнее изменение в Chrome или WebKit. Это определенно работало ранее. Это было пару лет :). Также в ответе указывалось, что применяется та же самая политика происхождения, которая ранее делала ответ неправильным, но теперь делает его правильным, а мой комментарий неверным -_-.
Пэррис
4
@BjarteAuneOlsen - Я полагаю, что это потому, что Iframes в JSFiddle преднамеренно помещены в « песочницу», поэтому они явно отказывают в определенных функциях (таких как перенаправление и т. Д.) - есть опасность, что вы будете использовать JS для перехода от JS Fiddle и потеряете свою работу. ..
Жаф - Бен Дугид,
12
Ошибки, с которыми люди сталкиваются здесь, связаны с новым атрибутом HTML5 для iframes, который называется " sandbox" - developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe. Этот sandboxатрибут не позволяет javascript выполнять определенные действия в рамках iframe. в заданном белом списке разрешенных действий. allow-top-navigationСвойство является одним из действий , которые могут позволить в белом списке, что позволяет этот код работе. Если sandboxатрибут отсутствует, все действия разрешены. Если это присутствует и пустая строка, все действия запрещены.
Маркус Харрисон
115

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

Нажмите Upvote
источник
7
Хотя выбранный ответ является правильным, я думаю, что это лучший ответ для намерения вопроса. Кроме того, это будет работать для людей, у которых отключен JS.
Майкл - Где Клэй Ширки
Я согласен, что это лучшее решение, но ОП специально попросил JavaScript. С другой стороны, OP указал, что он должен запускаться через якорь - я не вижу сценария, в котором можно было бы использовать javascript из тега привязки для достижения желаемого результата, поэтому вопрос вводит в заблуждение.
нокарьер
2
Так просто и элегантно. Работает как шарм :)
Yash
54
window.top.location.href = "http://example.com";

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

Лука Маттеис
источник
9
Свойство window.top.location.href не может быть обновлено из Iframe, оно выбрасывает отказ в доступе. Его можно выполнить только при тестировании на localhost
Мухаммед Уммар
4
@ Ummar: я бы добавил, что это работает, когда родительский элемент iframe имеет один и тот же домен, один и тот же порт (те же политики происхождения), он генерирует исключение отказа в доступе, когда они различаются, для предотвращения нарушений безопасности
Quan Mai
5
@ Уммар, который не соответствует действительности, jsfiddle.net/ppkzS для доказательства. Вы можете изменить window.top.location.href. Вы просто не можете прочитать это. Работает в хроме.
Пэрис
Отличный jsfiddle @Parris, это решает вопрос для меня :)
Макс Уильямс
2
Я подозреваю, что некоторые из сомневающихся, возможно, пытались что-то подобное в iframe: window.top.location.href = window.top.location.href ;
mjj1409
15

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

parent.document.location.href = "http://example.com";
Настоящий Красный.
источник
5
Это решение специфично для Firefox. Надо просто использовать parent.location.href = .... developer.mozilla.org/en/document.location
kay - SE это зло
15

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

rDroid
источник
Это, кажется, работает отлично. Есть ли недостатки использования этого метода, а не Javascript?
flyingL123
не то, что я знаю о. Делитесь, если вы что-то узнаете.
rDroid
7

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

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

Пример:

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

Это решит проблему.

<script>parent.location='http://google.com';</script>
Али Харис
источник
3

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

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 () должна появиться после объявления ссылки.

Том Беррис
источник
1

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

Йорис Кок
источник
0

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

window.parent.window.location.href = 'http://google.com'
Чираг Гохель
источник
Простая версия: parent.window.location = '<URL>';
Шаси Кант
1
или далее упрощенно:parent.location = 'url'
решетка
0
window.top.location.href = 'index.html';

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

dnts2012
источник
Дубликат этого ответа почти 5 лет назад.
Майкл - Где Клэй Ширки
-2

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

URL демо :

Фейзалем
источник
1
Кто мы? :) Не могли бы вы написать важные части из URL в ответ, пожалуйста? URL / ссылки могут быть изменены или удалены.
YesThatIsMyName
-8

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

window.parent.document.getElementById("content").src = "content.aspx?id=12";
Мохамед Морен3
источник