- ベストアンサー
子Windowの操作(親Window遷移後)
親画面Aから、子画面B(window.open("./test2.html","aaa","width=500,height=300,resizable=yes");)を開き、親画面Aが別画面Cに遷移した状態で、画面Cから子画面Bの操作はできるのでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
何度も何度もすみません・・・ ×ボタンでウインドウを閉じたときに、window.openで取得したウインドウオブジェクトWが消去されているのかもしれません。 test4.htmlのソースを以下のように変更してみてください。 ダミーページ(ウインドウ制御用) test4.html <HTML> <head> <script language="javascript"> var W; function NewWin() { W = window.open("./test2.html","aaa","width=500,height=300,resizable=yes"); } function CloseWin() { if (window.W) { window.W.close(); } } </script> </head> <body> </body> </HTML>
その他の回答 (5)
- EUR
- ベストアンサー率61% (29/47)
うーん・・・どうしてでしょう? 現在のソースはNo2のソースに、test4.htmlのソースをNo5のものに変えただけのものでしょうか? もしよろしければ、提示できる範囲で結構ですので、ソースを示していただくことは出来ないでしょうか? よろしくお願いいたします。
- EUR
- ベストアンサー率61% (29/47)
すみません、私の環境ではエラーが出ません・・・ 私の環境はXPsp1 IE6 とXPsp2IE6 です。 なんででしょうね? お手数かけますが、No1とNo2のソースはフレーム以外でも若干変更しておりますので、すべてのソースをNo2から取り直して、もう一度試していただけないでしょうか? それから、エラーが出るときの手順を書いて頂けるとうれしいです。 また、よろしければPCの環境を教えていただけないでしょうか? よろしくお願いいたします。
- EUR
- ベストアンサー率61% (29/47)
あまり考えないで作ったので、どこかミスがあるのかもしれません。 エラー内容を教えていただけないでしょうか。 よろしくお願いいたします。 注意点ですが、 ・最初に開くHTMLはtestframe.htmlです。 ・test4.htmlで外部変数でWを定義します。
補足
test4.htmlの9行目で、'window.W'はNullまたはオブジェクトではありません。というメッセージが出ます。
- EUR
- ベストアンサー率61% (29/47)
閉じる動作でしたか・・・No1の方法ではどうしても一回開いてしまいますね。 ちょっと強引ですが、親画面Aのと同レベルの階層にダミーのフレームを用意しておいて、ウインドウを開く、閉じるといった動作をダミーフレームのJavaScriptで行うという手もあります。 例 フレーム階層 フレーム構成のHTML(testframe.html) +main 親画面A(test.html) -dummy ダミーページ(test4.html) ダミーページに用意するJavaScript NewWin() → 新規ウインドウ(test2.html)のオープン CloseWin() → 開いたウインドウのクローズ 親画面Aから子画面Bの生成 parent.dummy.NewWin(); 親画面Cから子画面Bの消去 parent.dummy.CloseWin(); 以下ソース フレーム生成のページ testframe.html <HTML> <frameset rows="100%, *" frameborder="no" border="0" framespacing="0"> <frame name="main" src="test.html"> <frame name="dummy" src="test4.html" scrolling="no"> </frameset> </HTML> ダミーページ(ウインドウ制御用) test4.html <HTML> <head> <script language="javascript"> var W; function NewWin() { W = window.open("./test2.html","aaa","width=500,height=300,resizable=yes"); } function CloseWin() { window.W.close(); } </script> </head> <body> </body> </HTML> 親画面A test.html <HTML> <body onLoad="parent.dummy.NewWin()"> <a href="test3.html">koko</a> </body> </HTML> 子画面B test2.html <HTML> <body> テスト2 </body> </HTML> 遷移後親画面C test3.html <HTML> <body> テスト3 <br> <input type="button" value="閉じる" onClick="parent.dummy.CloseWin()"> </body> </HTML>
補足
サンプルを作っていただきありがとうございます。 早速動かそうと思ったのですが、 test3.htmlで閉じるボタンを押すと、 test4.htmlのCloseWin()でエラーになってしまいます。 どこかおかしいところがあるのでしょうか? よろしくおねがいします。
- EUR
- ベストアンサー率61% (29/47)
ダミーでwindow.openをかましてあげれば出来ます。 以下の例では、 1.親画面Aのロード時に子画面Bを生成します。 2.親画面Aのkokoをクリックして、親画面をCへ遷移させます。 3.親画面Cで変更ボタンを押下すると、 3-1.window.open("","aaa")をダミーで呼び出します。 3-2.もともとあったaaaというウインドウの内容を変更させています。 例 親画面A test.html <HTML> <head> <script language="javascript"> function NewWin() { window.open("./test2.html","aaa","width=500,height=300,resizable=yes"); } </script> </head> <body onLoad="NewWin()"> <a href="test3.html">koko</a> </body> </HTML> 子画面B test2.html <HTML> <body> テスト2 </body> </HTML> 遷移後親画面C test3.html <HTML> <head> <script language="javascript"> function change() { W = window.open("","aaa"); //ダミーでaaaという名前のウィンドウを生成します window.W.document.write("テスト2は変更されました"); } </script> </head> <body> テスト3 <br> <input type="button" value="変更" onClick="change()"> </body> </HTML>
補足
ご回答ありがとうございます。 私も、この方法を見つけてやってみたのですが、 今回やろうとしているのが、遷移後の画面Cにて、子画面を閉じる処理を行いたいのですが、画面Cで、ボタンを押す前に、子画面Bが閉じられている場合に、画面が開いた直後に閉じるという現象が発生してしまうので、どうにかこれを回避したいと思っているので、いい方法があればご教授のほどよろしくお願いします。
補足
返事が遅れてすみません。 試して見ましたが、閉じるを押しても閉じられませんでした。 環境はWinXP Pro SP2 IE6です。