プロが教えるわが家の防犯対策術!

親画面Aから、子画面B(window.open("./test2.html","aaa","width=500,height=300,resizable=yes");)を開き、親画面Aが別画面Cに遷移した状態で、画面Cから子画面Bの操作はできるのでしょうか?

A 回答 (6件)

ダミーで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が閉じられている場合に、画面が開いた直後に閉じるという現象が発生してしまうので、どうにかこれを回避したいと思っているので、いい方法があればご教授のほどよろしくお願いします。

補足日時:2005/06/29 14:58
    • good
    • 0

閉じる動作でしたか・・・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()でエラーになってしまいます。
どこかおかしいところがあるのでしょうか?
よろしくおねがいします。

補足日時:2005/06/29 16:34
    • good
    • 0

あまり考えないで作ったので、どこかミスがあるのかもしれません。


エラー内容を教えていただけないでしょうか。

よろしくお願いいたします。

注意点ですが、
・最初に開くHTMLはtestframe.htmlです。
・test4.htmlで外部変数でWを定義します。

この回答への補足

test4.htmlの9行目で、'window.W'はNullまたはオブジェクトではありません。というメッセージが出ます。

補足日時:2005/06/29 17:24
    • good
    • 0

すみません、私の環境ではエラーが出ません・・・


私の環境はXPsp1 IE6 とXPsp2IE6
です。

なんででしょうね?

お手数かけますが、No1とNo2のソースはフレーム以外でも若干変更しておりますので、すべてのソースをNo2から取り直して、もう一度試していただけないでしょうか?
それから、エラーが出るときの手順を書いて頂けるとうれしいです。

また、よろしければPCの環境を教えていただけないでしょうか?

よろしくお願いいたします。
    • good
    • 0

何度も何度もすみません・・・



×ボタンでウインドウを閉じたときに、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>

この回答への補足

返事が遅れてすみません。
試して見ましたが、閉じるを押しても閉じられませんでした。
環境はWinXP Pro SP2 IE6です。

補足日時:2005/07/05 13:27
    • good
    • 0

うーん・・・どうしてでしょう?



現在のソースはNo2のソースに、test4.htmlのソースをNo5のものに変えただけのものでしょうか?

もしよろしければ、提示できる範囲で結構ですので、ソースを示していただくことは出来ないでしょうか?
よろしくお願いいたします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!