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.

Klicken Sie auf Upvote
quelle
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.

MIP
quelle
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

Klicken Sie auf Upvote
quelle
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.

Luca Matteis
quelle
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

oder eine Alternative ist die folgende (unter Verwendung eines Dokumentobjekts)

parent.document.location.href = "http://example.com";
Echtes Rot.
quelle
5
Diese Lösung ist Firefox-spezifisch. Man sollte nur verwenden parent.location.href = .... developer.mozilla.org/en/document.location
kay - SE ist böse
15

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

rDroid
quelle
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>
Raymond B.
quelle
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>
Ali Haris
quelle
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.

Tom Burris
quelle
1

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

Joris Kok
quelle
0

Versuchen Sie es mit

window.parent.window.location.href = 'http://google.com'
Chirag Gohel
quelle
Einfache Version: parent.window.location = '<URL>';
Shasi Kanth
1
oder weiter vereinfacht:parent.location = 'url'
Grill
0
window.top.location.href = 'index.html';

Dadurch wird das Hauptfenster zur Indexseite umgeleitet. Vielen Dank

dnts2012
quelle
Duplikat dieser Antwort von fast 5 Jahren zuvor.
Michael - Wo ist Clay Shirky
-2

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

Demo-URL :

Faizal
quelle
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";
mohamed moren3
quelle