• ベストアンサー

孫ウインドウを閉じたら親をリロード

親ページをクリックして、サブウインドウを開き、さらにサブウインドウからクリックして孫ウインドウを開きました。 孫を閉じた時点(またはサブウインドウをリロードした時点でもよい)で、親ウインドウをリロードするにはどうしたら良いでしょうか。 孫閉じる→サブウインドウリロード→親ウインドウリロードを、孫をクリックしたことにより行いたい。 それぞれのページは不特定で、固定のURLはありません。

質問者が選んだベストアンサー

  • ベストアンサー
noname#199778
noname#199778
回答No.1

孫ウィンドウのページ内に、以下のスクリプトを仕掛ければ、良いのではないかと思います。 window.opener.opener.location.reload(); これで、孫ウィンドウから見たopener(子ウィンドウ)の、更にそのopener(親ウィンドウ)に対してリロードをかけることができると思います。 ただ、ご質問の内容から見ると、孫ウィンドウが閉じた時に子ウィンドウがリロードされる仕掛けと、子ウィンドウがリロードされた時に親ウィンドウがリロードされるという仕掛けを入れておいて、孫ウィンドウから子ウィンドウをリロードし、子ウィンドウから親ウィンドウをリロードするという、連鎖的なアクションでも良いかもしれませんね。 こういったアクションでよければ、以下のソースを、子ウィンドウと孫ウィンドウに読み出すそれぞれのHTMLファイルに追加してみてください。 <script type="text/javascript"><!-- function refresher(){ if (window.opener){ window.opener.location.reload(); } } window.onunload=refresher; //--></script> このスクリプトでは、window.onunloadでページがアンロードされたイベント(リロードやページ移動、ウィンドウを閉じるなどで現状のページが破棄された時)を拾い、指定の処理を実行します。 ここではrefresher()という、親ウィンドウをリロードする関数を指定しています。 これを子ウィンドウ内のHTMLと孫ウィンドウ内のHTMLに仕掛けておけば、子ウィンドウをリロードしたタイミングでも、孫ウィンドウを閉じたタイミングでも、子ウィンドウと親ウィンドウのリロードがかかると思います。 とりあえず、手元で確認した分では、IEとNetscapeでは、期待通りの動作になってくれるのではないかと思います。 参考になれば…

s-holmes
質問者

お礼

ネットを探していたら opener.closed をみつけたので、下記のようにして処理できそうです。 お騒がせ致しました。 function refresher(){ if( !opener || opener.closed ) { alert("親なし"); } else{window.opener.location.reload();} } window.onunload=refresher;

s-holmes
質問者

補足

丁寧な回答ありがとうございました。 アドバイスの方法で目的達成できます。(^O^) 他力本願で申し訳ありませんが、実際に使う場面では、 親→子→孫 のパターンが9割   子→孫 のパターンが1割 あり、「親がない場合は」とかの良い方法はないでしょうか。

すると、全ての回答が全文表示されます。

関連するQ&A