過去スレを確認しましたが、同じようない内容のモノがなかったため質問させて頂きます。
サブウィンドウ画面の制御についての質問なのですが、
親→子→孫といったように3画面同時に表示する場合があります。
この時、親を閉じると子と孫も、子を閉じると孫も同時に閉じたいと思っています。
しかし親から子、子から孫といったように一階層だと閉じることができますが、
親から孫と二階層になると閉じる事ができません。
どなたか解決方法をご存知の方がおられましたら、
ご教授頂けますでしょうか。
よろしくお願いします。
実装内容は以下のようになっています。
(必要部分以外は省略しています)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
----------------子画面用JavaScript--------------------
◆子を開く
function openWin1(){
subWin1 = window.open(url,"subWin1","");
}
◆子を閉じる
function closeWin1(){
if(typeof(subWin1) != 'undefined') {
// 子ウィンドウを閉じる
subWin1.close();
}
// 孫ウィンドウを閉じる
closeWin2();
}
-----------------------------------------------------
---------------孫画面用JavaScript--------------------
◆孫を開く
function openWin2(){
subWin2 = window.open(url,"subWin2","");
}
◆孫を閉じる
function closeWin2(){
if(typeof(subWin2) != 'undefined') {
// 孫ウィンドウを閉じる
subWin2.close();
}
}
-----------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
No.2ベストアンサー
- 回答日時:
親ウィンドウの子を閉じる処理に書かれた closeWin2() は、子ウィンドウに存在する関数ですよね?自分と違うウィンドウに存在する関数や変数は、そのウィンドウを指定しないと使うことができません。
つまり、親から closeWin2() を実行するには、subWin1.closeWin2() とする必要があるのです。
しかし、その直前の処理で subWin1 は閉じられてしまっているので、もう subWin1 にはアクセスできません。ですので closeWin2() は、subWin1 を閉じる前に実行する必要があります。
それと、この問題とは直接関係はありませんが、サブウィンドウを閉じる時のチェックは
if (typeof(subWin2) != 'undefined' && !subWin2.closed)
とするとよいでしょう。
.closed(閉じられているか否か)をチェックすることで、「一度は開いたが閉じられた」場合にサブウィンドウにアクセスしようとしてエラーが出るのを防ぐことができます。
ご返答を頂きありがとうございます。
非常に丁寧でわかりやすい回答でした。
アドバイス頂いたように「subWin1.closeWin2()」で試してみたところ、
正しく動作するようになりました。
if (typeof(subWin2) != 'undefined' && !subWin2.closed)
↑これについてもエラーはでていませんでしたが、
一度開くとそれ以降は常にif文の中を通っていたので
対応が必要だとは思っていたので助かりました。
お忙しい中のご返答ありがとうございました。
No.1
- 回答日時:
親が孫のウィンドウを閉じるためには、孫のウィンドウオブジェクトのメソッドを、親のクローズと連動して起動できる状態にしておく必要があります。
「孫画面用JavaScript」と書かれた部分をどこに実装なさっているのか分かりませんが、もし子ウィンドウに実装してるんであれば、子の onUnload イベントを使うなどして、孫を閉じる関数を呼び出す必要があります。
また、もし親が孫をオープンしている状態にあるならば、階層数は3階層ではなく2階層です。
よって、一般的な文法ミスで動いていないことになります。
この回答への補足
早速のお答えありがとうございます。
説明が足りなかったようなので、補足させて頂きます。
孫を開くのは子のみで、階層は3階層になります。
「子画面用JavaScript」は親画面に、「孫画面用JavaScript」は子画面で実装しています。
(わかりにくくて申し訳ないです)
親画面ではcloseWin1()を呼び、その中でcloseWin2()を呼んでいます。
しかし、親と子、子と孫といったように2画面の場合だとサブウィンドウを認識できるのですが、子に実装してある孫を閉じるcloseWin2()を親から呼ぶと孫画面が認識されず「undefined」となります。
親画面でcloseWin1()とcloseWin2()の両方を呼ぶのも試してみましたが上手く動作しませんでした。
以上です。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 ファイルエクスプローラーでフォルダを閉じる操作について 2 2022/10/15 11:06
- LANケーブル・USBケーブル パソコンについて 2 2022/03/28 18:30
- その他(ブラウザ) Edgeバー 3 2023/02/23 18:33
- Windows 10 ノートPCをスリープにするとアプリが閉じてしまう。 3 2022/04/14 18:33
- Windows 10 フォルダ内の全ての画像を矢印キーでスライドできるようにしたい 1 2022/10/21 12:53
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- その他(コンピューター・テクノロジー) PC利用中に勝手に起動する窓を消し去る方法を教えて下さい。 1 2023/05/08 16:48
- ノートパソコン surface pro8シャットダウンせず発熱する 1 2022/08/20 02:55
- その他(家族・家庭) 男親が言う“うちの孫”とは? 4 2022/04/14 11:44
- その他(家族・家庭) 孫依存の義母。もし!会えなくなったらどうなるのかな? すっごく孫が生きがいの、孫依存の義母。 義父と 2 2023/03/25 00:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのシート上に別のシー...
-
デスクトップ画面を4分割するには
-
VBAで任意のウインドウのサイズ...
-
Javascript_submit()完了後に処...
-
VBの画面で、全ウィンドウを一...
-
ウィンドウの2重起動を防止したい
-
ウィンドウ名からウィンドウオ...
-
子ウィンドウを常に手前表示、...
-
1クリックでモーダルを開いてか...
-
ポップアップと作業ウィンドウ...
-
ウインドウの親子連携について
-
パワーポイントを複数立ち上げたい
-
初心者javascript グーグルクロ...
-
インタネットからPDFファイルだ...
-
子ウィンドウの「閉じる(×)」...
-
子→親ウインドウへデータを受け...
-
Access2007では、フォームのウ...
-
pythonで変数にオブジェクトを...
-
秀丸エディタでHTMLタグテキス...
-
エラー:アクセスが拒否されました
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのシート上に別のシー...
-
Javascript_submit()完了後に処...
-
デスクトップ画面を4分割するには
-
VBAで任意のウインドウのサイズ...
-
ウィンドウの2重起動を防止したい
-
VBの画面で、全ウィンドウを一...
-
<EXCEL/VBA> OUTLOOKのウインド...
-
ウィンドウ名からウィンドウオ...
-
ポップアップと作業ウィンドウ...
-
1クリックでモーダルを開いてか...
-
子ウィンドウの存在確認
-
window.Openをモーダルにできま...
-
子ウィンドウから親ウィンドウ...
-
親ウィンドウから開いた子ウィ...
-
助けてGmailでボタン表示が消え...
-
JavaScriptでPDFを新規ウィンド...
-
JavaScriptで指定Windowを最大...
-
初心者javascript グーグルクロ...
-
子ウィンドウより親ウィンドウ...
-
IEでのみ発生するJavaScriptエラー
おすすめ情報