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


312

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

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


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

Ответы:


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

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


Я не думаю, что здесь применяется та же политика происхождения. Это имеет смысл, что вы должны иметь возможность вырвать свой сайт из чужого 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>работает тоже


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

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


Это, кажется, работает отлично. Есть ли недостатки использования этого метода, а не 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

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

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





-2

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

URL демо :


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

-8

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

window.parent.document.getElementById("content").src = "content.aspx?id=12";
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.