Перенаправлення батьківського вікна від дії 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 '. Кадр, що намагається навігацію у вікні верхнього рівня, засипано піском, але прапор "дозволити навігацію" не встановлено.
Bjarte Aune Olsen

1
@BjarteAuneOlsen цікаво, це може бути нещодавня зміна хрому чи веб-сайту. Це напевно працювало раніше. Минуло пару років :). Також у відповіді було вказано ту саму політику щодо походження, яка раніше робила відповідь неправильною, але тепер робить її правильною, а мій коментар - неправильним.
Парис

4
@BjarteAuneOlsen - Я вважаю, що це тому, що Iframes на JSFiddle навмисно є пісочницею, тому вони явно заперечують певні функції (наприклад, перенаправлення тощо) - є небезпека, що ви скористаєтеся JS, щоб перейти від JS Fiddle та втратити свою роботу. ..
Джаф - Бен Дюгід

10
Помилки люди стикаються тут з - за нового атрибута HTML5 для фреймів під назвою « sandbox» - developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe У sandboxзапобігає атрибут JavaScript робить певні дії в плаваючому фреймі на основі у заданому списку дозволених дій. allow-top-navigationВластивість є одним з дій , які можуть дозволити в білому списку, що дозволяє цей код роботі. Якщо sandboxатрибут є абсцесом, всі дії дозволені. Якщо він присутній і порожній рядок, всі дії відмовляються.
Маркус Гаррісон

115

Я виявив, що це <a href="..." target="_top">link</a>теж працює


7
Хоча обрана відповідь правильна, я вважаю, що це краща відповідь для наміру питання. Крім того, це буде працювати для людей, які мають інваліди JS.
Michael - Де Clay Shirky

Я погоджуюся, що це найкраще рішення, але ОП спеціально попросив javascript. З іншого боку, ОП вказав, що це має бути запущено через якір - я не бачу сценарію, коли для досягнення бажаного результату я б змушений використовувати javascript з тега якоря, тому питання вводить в оману.
nocarrier

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
@Ummar це неправда, jsfiddle.net/ppkzS для доказу. Ви можете змінити window.top.location.href. Ви просто не можете його прочитати. Працює в хромі.
Парис

Чудова jsfiddle @Parris, що це вирішує для мене :)
Макс Вільямс,

2
Я підозрюю, що хтось із сумнівів, можливо, намагався щось подібне всередині iframe: window.top.location.href = window.top.location.href ;
mjj1409


15

target="_parent"добре працював для мене. легко і без проблем!


Вони, здається, працюють чудово. Чи є якісь мінуси використання цього методу, а не Javascript?
політL123

не те, що я знаю. НЕ діліться, якщо ви щось дізнаєтесь.
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>

Примітка. Команда click () повинна надходити після оголошення посилання.



0

Спробуйте використовувати

window.parent.window.location.href = 'http://google.com'

Проста версія: parent.window.location = '<URL>';
шасі кант

1
або далі спрощено:parent.location = 'url'
гриль


-2

Ми повинні використовувати window.top.location.href для перенаправлення батьківського вікна від дії iframe.

Демо-адреса :


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.