JavaScriptでwindow.open("URL","_blank");等によって、子ウィンドウを開いたあとに、
子ウィンドウから親ウィンドウをリドローしたいときがある
(ないしは、親ウィンドウをほかの画面に遷移させたいことがある)。
このときは、子ウィンドウから、
window.opener.open("リドローあるいは開きたい画面のURL","_self");
で親ウィンドウはリドロー、あるいは開きたい画面が開く・・
・・めでたしめでたし・・
・・・と、いかないことがある。
親ウィンドウでも編集を行っていたり、複数の子ウィンドウをだし、それぞれの画面で編集していた場合、ある一つの子画面から、window.opener.openを発行してしまうと、そのときまでに、編集した親ウィンドウあるいは、発行者以外の子ウィンドウの編集内容が反映されないからだ。
これを反映したい場合、どうするか?
実は、リドローや別画面を出すには、もう一つ方法がある。
(1)親ウィンドウにFormタグを、nameをちゃんと指定して書く
→親ウィンドウをリドローするとき、POSTやGETの引数で値を渡したければ、
そのForm内に、inputタグのtype=hiddenで、値を書く。
親ウィンドウの編集内容を渡したければ、そのフォーム内でinputタグの
type=textなどで、値がわたるようにする
(2)子ウィンドウから、リドローしたいときに、
window.opener.document.(1)のFormタグの名前.submit();
を実行する。
この場合、子ウィンドウの編集結果を、POSTやGETで渡したければ、渡したい引数を、あらかじめ、(1)のForm内にinputタグのhiddenで指定しておき(2)のsubmitをする前に
window.opener.document.(1)のFormタグ名.(1)のhiddenの指定変数名.value=設定値
で設定値が設定されて、POSTなりGETなりで、値がわたる。
複数の子ウィンドウがある場合、値がチェンジされたとき(onChange)ごとに、値を親ウィンドウの上記(hiddenの)変数にセットすればOK
って、よくわかんないと思うので、今度例をあげて説明したいと思います。