Wann wird window.opener / window.parent / window.top verwendet?

92

Wann sollte in JavaScript window.opener/ window.parent/ verwendet werden window.top?

Sriram
quelle
3
Es gibt auch ein Fenster selbst, das sich auf dasselbe Fenster bezieht :)
CodingOnSteroid

Antworten:

162
  • window.openerbezieht sich auf das Fenster, das aufgerufen wurde window.open( ... ), um das Fenster zu öffnen, von dem aus es aufgerufen wird
  • window.parentbezieht sich auf das übergeordnete Element eines Fensters in einem <frame>oder<iframe>
  • window.topbezieht sich auf das oberste Fenster eines Fensters, das in einer oder mehreren Ebenen von <iframe>Unterfenstern verschachtelt ist

Diese werden null(oder vielleicht undefined) sein, wenn sie für die Situation des verweisenden Fensters nicht relevant sind. ("Verweisendes Fenster" bezeichnet das Fenster, in dessen Kontext der JavaScript-Code ausgeführt wird.)

Spitze
quelle
1
Danke @pointy für die Antwort. Ich habe eine Hauptseite, auf der ein Kind window.open()beim Senden der Seite geöffnet wird . Jetzt öffnet dieses untergeordnete Fenster ein weiteres untergeordnetes Fenster mit demselben window.open()schließenden Selbst. Wenn ich jetzt mein zweites Kind einreiche (das erste Kind existiert nicht mehr), möchte ich auf die Seitenelemente meiner Hauptseite zugreifen. Ist dies ab dem zweiten Kind möglich, wenn das erste nicht mehr vorhanden ist?
Sriram
4
@Sriram: Das ist die Art von Informationen, die Sie in Ihre Frage einfügen müssen, damit die Leute wissen, welches Problem Sie wirklich lösen möchten .
Josh3736
5
@Sriram müssen Sie greifen, window.opener.openerbevor die Zwischenseite verschwindet .
Pointy
23

Ich denke, Sie müssen Ihrer Frage einen Kontext hinzufügen. Grundlegende Informationen zu diesen Dingen finden Sie jedoch hier:

window.opener https://developer.mozilla.org/en-US/docs/Web/API/Window.opener

Ich habe window.opener hauptsächlich beim Öffnen eines neuen Fensters verwendet, das als Dialogfeld fungierte und Benutzereingaben erforderte und Informationen an das Hauptfenster zurückgeben musste. Dies ist jedoch durch die Ursprungsrichtlinie eingeschränkt. Sie müssen daher sicherstellen, dass sowohl der Inhalt des Dialogfelds als auch das Öffnungsfenster vom selben Ursprung geladen werden.

window.parent https://developer.mozilla.org/en-US/docs/Web/API/Window.parent

Ich habe dies hauptsächlich bei der Arbeit mit IFrames verwendet, die mit dem Fensterobjekt kommunizieren müssen, das sie enthält.

window.top https://developer.mozilla.org/en-US/docs/Web/API/Window.top

Dies ist nützlich, um sicherzustellen, dass Sie mit dem Browserfenster der obersten Ebene interagieren. Sie können es unter anderem verwenden, um zu verhindern, dass eine andere Website Ihre Website beschädigt.

Wenn Sie Ihrer Frage etwas mehr Details hinzufügen, kann ich Ihnen weitere relevantere Beispiele liefern.

UPDATE: Es gibt einige Möglichkeiten, wie Sie mit Ihrer Situation umgehen können.
Sie haben folgende Struktur:

  • Hauptfenster
    • Dialog 1
      • Dialog 2 Geöffnet von Dialog 1

Wenn Dialog 1 den Code zum Öffnen von Dialog 2 ausführt, muss Dialog 1 nach dem Erstellen von Dialog 2 eine Eigenschaft für Dialog 2 festlegen, die auf den Dialog1-Öffner verweist.

Wenn also "childwindow" Ihre Variable für das Fensterobjekt von Dialog 2 ist und "window" die Variable für das Fensterobjekt von Dialog 1 ist. Nehmen Sie nach dem Öffnen von Dialog 2, aber vor dem Schließen von Dialog 1 eine ähnliche Zuordnung vor:

childwindow.appMainWindow = window.opener

Nachdem Sie die obige Zuweisung vorgenommen haben, schließen Sie Dialog 1. Anschließend können Sie anhand des in dialog2 ausgeführten Codes window.appMainWindowauf das Hauptfenster und das Fensterobjekt verweisen können.

Hoffe das hilft.

Markieren Sie an der Rampe 51
quelle
Danke @Mark für die Antwort. Ich habe eine Hauptseite, auf der ein Kind window.open()beim Senden der Seite geöffnet wird . Jetzt öffnet dieses untergeordnete Fenster ein weiteres untergeordnetes Fenster mit demselben window.open()schließenden Selbst. Wenn ich jetzt mein zweites Kind einreiche (das erste Kind existiert nicht mehr), möchte ich auf die Seitenelemente meiner Hauptseite zugreifen. Ist dies ab dem zweiten Kind möglich, wenn das erste nicht mehr vorhanden ist?
Sriram
aktualisierte Antwort. @ josh3736 - Ich sehe nicht, wie hilfreich dieser Kommentar ist. Ich rate niemandem, eine w3schools-Zertifizierung zu erhalten. Jeder hier weiß, wie man googelt und die grundlegende Definition von window.opener, window.top und window.parent erhält. Verwenden Sie die obigen Links oder suchen Sie nach neuen Referenzen, aber es macht kaum Sinn, die Informationen zu duplizieren, die diese Eigenschaften hier einfach definieren.
Mark At Ramp51
Erklärung war wirklich hilfreich @ MarkAtRamp51 Danke!
Sriram
3
Der Link erklärt ausführlich, was mit w3schools nicht stimmt. Es geht darum, zu vermeiden, dass w3schools als maßgebliche Informationsquelle beworben oder verlinkt (und damit der Google PageRank von) erhöht wird. W3S verbreitet schlechte Informationen, und ein Teil des Problems besteht darin, dass so viele Menschen auf diese schlechten Informationen verlinken. Besser wäre es, auf eine zuverlässigere Informationsquelle wie MDN zu verlinken .
Josh3736
5

top, parent, opener (sowie window, self und iframe) sind alle Fensterobjekte.

  1. window.opener -> gibt das Fenster zurück, das das aktuelle Popup-Fenster öffnet oder startet.
  2. window.top -> gibt das oberste Fenster zurück. Wenn Sie Frames verwenden, ist dies das Frameset-Fenster. Wenn Sie keine Frames verwenden, entspricht dies dem Fenster oder self.
  3. window.parent-> gibt den übergeordneten Frame des aktuellen Frames oder Iframes zurück. Der übergeordnete Frame kann das Frameset-Fenster oder ein anderer Frame sein, wenn Sie verschachtelte Frames haben. Wenn Sie keine Frames verwenden, entspricht das übergeordnete Element dem aktuellen Fenster oder dem aktuellen Fenster
Rauben
quelle
1

Wenn Sie mit Popups arbeiten, spielt window.opener eine wichtige Rolle, da wir uns sowohl mit Feldern der übergeordneten als auch der untergeordneten Seite befassen müssen. Wenn wir Werte auf der übergeordneten Seite verwenden müssen, können wir window.opener verwenden oder wir möchten einige Daten Im untergeordneten Fenster oder Popup-Fenster zum Zeitpunkt des Ladens können wir die Werte dann erneut mit window.opener festlegen

Dungeon-Meister
quelle