いつwindow.opener / window.parent / window.topを使用するか


回答:


163
  • window.opener呼び出し元のウィンドウwindow.open( ... )を開くために呼び出されたウィンドウを指します
  • window.parent<frame>またはのウィンドウの親を参照します<iframe>
  • window.top<iframe>サブウィンドウの1つ以上のレイヤーにネストされたウィンドウの最上位のウィンドウを指します

それらは、参照ウィンドウの状況に関連しない場合null(またはおそらくundefined)になります。(「参照ウィンドウ」とは、JavaScriptコードが実行されるコンテキストを持つウィンドウを意味します。)


1
返信いただきありがとうございます。window.open()ページ送信時に使用する子を開くメインページがあります。今、この子ウィンドウは、同じwindow.open()閉じる自己を持つ別の子ウィンドウを開きます。次に、2番目の子(最初の子はもう存在しない)を送信すると、メインページのページ要素にアクセスしたいと思います。最初の子供がもういないときに、これは2番目の子供から可能ですか?
スリラム

4
@スリラム:それはあなたがあなたの質問に入れる必要がある種類の情報であり、それによって人々はあなたが本当に解決しようとしている問題を知っています。
josh3736

5
@Sriramはwindow.opener.opener、中間ページがなくなる前に取得する必要があります。
ポインティ

23

質問にいくつかのコンテキストを追加する必要があると思います。ただし、これらの基本的な情報はここにあります。

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

ユーザー入力を必要とし、情報をメインウィンドウに返す必要があるダイアログとして機能する新しいウィンドウを開くときに、ほとんどwindow.openerを使用しました。ただし、これはオリジンポリシーによって制限されているため、ダイアログのコンテンツとオープナーウィンドウの両方が同じオリジンからロードされるようにする必要があります。

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

私は主に、IFrameを含むウィンドウオブジェクトと通信する必要があるIFrameを操作するときにこれを使用しました。

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

これは、最上位のブラウザウィンドウと対話していることを確認するのに役立ちます。他のサイトがあなたのウェブサイトを改ざんすることを防ぐためにそれを使用することができます。

質問にさらに詳細を追加すると、より関連性の高い他の例を提供できます。

更新: 状況に対処する方法はいくつかあります。
次の構造があります。

  • メインウィンドウ
    • ダイアログ1
      • ダイアログ1によって開かれたダイアログ2

Dialog 1がDialog 2を開くコードを実行するとき、Dialog 2を作成した後、Dialog 1に、Dialog1オープナーを参照するDialog 2のプロパティを設定させます。

したがって、「子ウィンドウ」がダイアログ2のウィンドウオブジェクトの変数であり、「ウィンドウ」がダイアログ1のウィンドウオブジェクトの変数である場合。ダイアログ2を開いた後、ダイアログ1を閉じる前に、次のような割り当てを行います。

childwindow.appMainWindow = window.opener

上記の割り当てを行ったら、ダイアログ1を閉じます。次に、ダイアログ2内で実行されているコードから、を使用window.appMainWindowしてメインウィンドウであるウィンドウオブジェクトを参照できるようになり ます。

お役に立てれば。


@Markに返信いただきありがとうございます。window.open()ページ送信時に使用する子を開くメインページがあります。これで、この子ウィンドウは、同じwindow.open()閉じる自己を持つ別の子ウィンドウを開きます。次に、2番目の子(最初の子はもう存在しない)を送信すると、メインページのページ要素にアクセスしたいと思います。最初の子供がもういないときに、これは2番目の子供から可能ですか?
スリラム

回答を更新しました。@ josh3736-そのコメントがどのように役立つかわかりません。私は、w3schools認定を取得するように誰にもアドバイスしていません。ここの誰もがグーグルしてwindow.opener、window.top、およびwindow.parentの基本的な定義を取得する方法を知っています。上記のリンクを使用するか、新しい参照を見つけますが、ここでこれらのプロパティを定義するだけの情報を複製しても意味がありません。
Mark At Ramp51

説明は本当に役に立ちました@ MarkAtRamp51ありがとう!
スリラム

3
このリンクは、w3schoolsの何が問題になっているのかを詳しく説明しています。重要なのは、信頼できる情報源としてw3schoolsを宣伝したりリンクしたりすること(したがって、Google PageRankを増やすこと)を避けることです。W3Sは悪い情報を広め、そして問題の一部は非常に多くの人々がその悪い情報にリンクしていることです。MDNなど、より信頼性の高い情報源にリンクすることをお勧めします。
josh3736 2012

5

top、parent、opener(およびwindow、self、iframe)はすべてwindowオブジェクトです。

  1. window.opener ->現在のポップアップウィンドウを開く、または起動するウィンドウを返します。
  2. window.top ->最上位のウィンドウを返します。フレームを使用している場合、これはフレームセットウィンドウです。フレームを使用していない場合、これはウィンドウまたはセルフと同じです。
  3. window.parent->現在のフレームまたはiframeの親フレームを返します。親フレームは、フレームセットウィンドウか、ネストされたフレームがある場合は別のフレームです。フレームを使用しない場合、親は現在のウィンドウまたは自分と同じです

1

ポップアップを処理するときはwindow.openerが重要な役割を果たします。これは、親ページと子ページのフィールドを処理する必要があるためです。親ページで値を使用する必要がある場合は、window.openerを使用するか、いくつかのデータが必要です。読み込み時の子ウィンドウまたはポップアップウィンドウで、再びwindow.openerを使用して値を設定できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.