Leiten Sie das übergeordnete Fenster von einer Iframe-Aktion um


312

Welches JavaScript muss ich verwenden, um ein übergeordnetes Fenster von einem Iframe umzuleiten?

Ich möchte, dass sie auf einen Hyperlink klicken, der mithilfe von JavaScript oder einer anderen Methode das übergeordnete Fenster auf eine neue URL umleitet.


5
Das übergeordnete Fenster an sich könnte auch ein Fenster sein IFrame. Da die akzeptierte Antwort das obere Fenster adressiert , empfehle ich Ihnen, Ihre Frage ein wenig zu ändern.
Ron Klein

Antworten:


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

Wie bereits erwähnt, wird der übergeordnete Iframe umgeleitet.


Ich denke nicht, dass hier die gleiche Herkunftsrichtlinie gilt. Es ist sinnvoll, dass Sie Ihre Website aus dem Iframe eines anderen herausbrechen können.
Brian McAuliffe

1
In Chrome löst @Parris jsfiddle den folgenden Fehler aus: Unsicherer JavaScript-Versuch, die Navigation für Frames mit der URL ' jsfiddle.net/ppkzS ' vom Frame mit der URL ' parrisstudios.com/tests/iframe_redirect.html ' zu initiieren . Der Frame, der versucht, durch das Fenster der obersten Ebene zu navigieren, ist mit einer Sandbox versehen, aber das Flag "Navigation nach oben zulassen" ist nicht gesetzt.
Bjarte Aune Olsen

1
@BjarteAuneOlsen interessant, könnte eine kürzliche Änderung in Chrome oder Webkit sein. Es hat definitiv vorher funktioniert. Es ist ein paar Jahre her :). Außerdem wurde in der Antwort dieselbe Ursprungsrichtlinie angegeben, die zuvor die Antwort falsch gemacht hat, jetzt aber korrekt und mein Kommentar falsch -_-.
Parris

4
@BjarteAuneOlsen - Ich glaube, dies liegt daran, dass die Iframes in JSFiddle absichtlich in einer Sandbox gespeichert sind, sodass bestimmte Funktionen (z. B. Weiterleitung usw.) ausdrücklich abgelehnt wurden. Es besteht die Gefahr, dass Sie JS verwenden, um von JS Fiddle weg zu navigieren und Ihre Arbeit zu verlieren. ..
Zhaph - Ben Duguid

10
Die Fehler, auf die hier gestoßen wird, sind auf ein neues HTML5-Attribut für Iframes mit dem Namen " sandbox" - developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe zurückzuführen. Das sandboxAttribut verhindert, dass Javascript bestimmte Aktionen innerhalb eines Iframes ausführt auf einer bestimmten Whitelist der zulässigen Aktionen. Die allow-top-navigationEigenschaft ist eine der Aktionen, die Sie in der Whitelist aktivieren können, damit dieser Code funktioniert. Wenn das sandboxAttribut nicht vorhanden ist, sind alle Aktionen zulässig. Wenn es vorhanden ist und eine leere Zeichenfolge vorhanden ist, werden alle Aktionen abgelehnt.
Marcus Harrison

115

Ich fand das <a href="..." target="_top">link</a>funktioniert auch


7
Obwohl die ausgewählte Antwort korrekt ist, denke ich, dass dies eine bessere Antwort auf die Absicht der Frage ist. Es funktioniert auch für Personen mit deaktiviertem JS.
Michael - Wo ist Clay Shirky

Ich bin damit einverstanden, dass dies die beste Lösung ist, aber das OP hat speziell nach Javascript gefragt. Auf der anderen Seite hat OP angegeben, dass es über einen Anker ausgelöst werden soll - ich kann kein Szenario sehen, in dem man gezwungen wäre, Javascript von einem Ankertag zu verwenden, um das gewünschte Ergebnis zu erzielen, daher ist die Frage irreführend.
Nocarrier

2
So einfach und elegant. Funktioniert wie Charme :)
Yash

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

window.top bezieht sich auf das Fensterobjekt der Seite oben in der Rahmenhierarchie.


9
Die Eigenschaft window.top.location.href kann nicht über Iframe aktualisiert werden. Sie löst die Ausführung mit verweigertem Zugriff aus. Es kann nur ausgeführt werden, wenn Sie auf localhost testen
Muhammad Ummar

4
@Ummar: Ich würde hinzufügen, dass dies funktioniert, wenn das übergeordnete Element und der Iframe dieselbe Domäne, denselben Port (dieselben Ursprungsrichtlinien) haben und eine Ausnahme für den Zugriff verweigert wird, wenn sie unterschiedlich sind, um Sicherheitsverletzungen zu verhindern
Quan Mai

5
@Ummar das stimmt nicht, jsfiddle.net/ppkzS als Beweis. Sie können window.top.location.href ändern. Du kannst es einfach nicht lesen. Funktioniert in Chrom.
Parris

Großartige jsfiddle @Parris, die es für mich regelt :)
Max Williams

2
Ich vermute, einige der Zweifler haben im iframe so etwas versucht: window.top.location.href = window.top.location.href ;
mjj1409


15

target="_parent"hat super für mich funktioniert. einfach und problemlos!


Diese scheinen großartig zu funktionieren. Gibt es Nachteile bei der Verwendung dieser Methode anstelle von Javascript?
FlyingL123

nicht, dass ich davon Wüste. Teilen Sie, wenn Sie etwas herausfinden.
Droroid

7

@MIP ist richtig, aber bei neueren Versionen von Safari müssen Sie das Sandbox-Attribut (HTML5) hinzufügen, um den Weiterleitungszugriff auf den iFrame zu ermöglichen. Es gibt einige spezifische Werte, die mit einem Leerzeichen dazwischen hinzugefügt werden können.

Referenz (Sie müssen scrollen): https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe

Ex:

<iframe sandbox="allow-top-navigation" src="http://google.com/"></iframe>

Beachten Sie, dass das sandboxAttribut zusätzliche Einschränkungen für den Inhalt in der aktiviert <iframe>. Der Wert der sandboxEigenschaft beseitigt bestimmte Einschränkungen. Achten Sie also auf diese Funktion. w3schools.com/tags/att_iframe_sandbox.asp
gitaarik

3

Dies wird das Elend lösen.

<script>parent.location='http://google.com';</script>

3

Wenn Sie zu einer anderen Domain umleiten möchten, ohne dass der Benutzer etwas tun muss, können Sie einen Link mit der Eigenschaft verwenden:

target="_parent"

wie zuvor gesagt, und verwenden Sie dann:

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

um es automatisch umleiten zu lassen.

Beispiel:

<!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>

Hinweis: Der Javascript-Befehl click () muss kommen, nachdem Sie den Link deklariert haben.


1

Es ist möglich, von einem Iframe umzuleiten, aber keine Informationen vom übergeordneten Element abzurufen.


0

Versuchen Sie es mit

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

Einfache Version: parent.window.location = '<URL>';
Shasi Kanth

1
oder weiter vereinfacht:parent.location = 'url'
Grill


-2

Wir müssen window.top.location.href verwenden, um das übergeordnete Fenster von einer iframe-Aktion umzuleiten.

Demo-URL :


1
Wer ist wir? :) Könnten Sie bitte die wesentlichen Teile der URL in die Antwort schreiben? URLs / Links können sich ändern oder gelöscht werden.
YesThatIsMyName

-8

Iframe im übergeordneten Fenster von iframe im selben übergeordneten Fenster umleiten:

window.parent.document.getElementById("content").src = "content.aspx?id=12";
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.