質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

6850閲覧

Javascriptで親画面または子画面が閉じられたら孫画面も閉じるようにするには

kumakumatan

総合スコア213

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/10/01 07:56

編集2020/10/01 07:58

親画面(test1.html)⇒子画面(test2.html)⇒孫画面(test3.html)

親画面または子画面が閉じられた再に、孫画面も閉じられるように
Javascriptで実装するにはどうしたらいいでしょうか?

・親画面javascript

javascript

1var subWindow 2$("[id^=id1]").click(function () { 3 subWindow = window.open("test2.html", "test2");//子画面を開く 4 subWindow.focus(); 5}); 6// 親画面CLOSE処理 7 window.addEventListener('unload', function (event) { 8 if (typeof subWindow != "undefined") { 9 subWindow.close();//親画面を閉じたら、子画面も閉じる 10 } 11 });

・子画面javascript

javascript

1var subWindow2 2$("[id^=id2]").click(function () { 3 subWindow2 = window.open("test3.html", "test3");//孫画面を開く 4 subWindow2.focus(); 5});

どなたかご教授を宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

test2.htmlにもtest1.htmlと同様の処理を書いておくだけでは?

投稿2020/10/01 08:08

yambejp

総合スコア116835

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/10/01 08:14

この手の処理は擬似的なモーダルで開くことをおすすめします 現状のようなモードレス処理の場合ページの依存関係を コントロールするのも限界があります
guest

0

簡単に説明すると

window.openの値は変数にとっておいて
親が終了する際、子を閉じる
(親がwindow.openしているので子の値はあるはず)

そうすると子が終了するので
終了する際孫の値から孫画面を閉じる
(子がwindow.openしているので孫の値はあるはず)

という流れで閉じていく事ができます。
ソ-スを見る限りでは子画面での

javascript

1window.addEventListener('unload', function (event) { 2 if (typeof subWindow2 != "undefined") { 3 subWindow2.close(); 4 } 5}

だけでよさそうですね

投稿2020/10/01 08:05

kuma_kuma_

総合スコア2506

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kumakumatan

2020/10/01 08:21

ご回答ありがとうございます。 実装してみたのですが、孫画面を開くクリック処理を子画面からすると、 孫画面を開こうとするのですが、孫画面が閉じてしまいます。 上手くいかないです。 ご教授宜しくお願いします。
kuma_kuma_

2020/10/01 08:29

> 孫画面を開くクリック処理を子画面からすると、 > 孫画面を開こうとするのですが、孫画面が閉じてしまいます。 「子画面から孫画面を開こうとすると孫画面が閉じる。」 もともとそこはできていなかったのですか? 多分ブラウザのセキュリティ機能(ポップアップブロック機能)が働いていませんか? 一応ブラウザにもよりますが対象外に設定すれば開きます。 ただまだ実装されていないのであれば、他の方が書かれている通り「モーダル画面」での処理をオススメします。
kumakumatan

2020/10/02 05:49

ダイアログで開く孫画面にて「iframe」タグを利用しています。 孫画面を開く再も何故か、「window.addEventListener('unload', function (event)」 を通過してしまいます。
kuma_kuma_

2020/10/02 05:56

親 >子 > 孫 > ひ孫(孫内iframe) ですか? iframeのwindowに対して「window.addEventListener('unload', function (event)」している認識でよいのですよね? 始めiframe上に空のページ(about:blank)が表示されていて、その後表示されたいURLが読み込まれていませんか?
guest

0

自己解決

孫画面で[iframe]タグを利用していた為、子画面から開こうとするときに、
「window.addEventListener('unload', function (event) {」が通過してしまう
ために、閉じるイベントが意図しない結果になってしまいました。
そこで、孫画面側(test3.html)のjavascriptで

javascript

1//ページ読込時 2function pageLoad() { 3 setInterval("surveillance()", 1000);//1秒毎に監視 4} 5 6//監視スクリプト 7function surveillance() { 8 if (!window.opener || window.opener.closed) { // メインウィンドウの存在をチェック 9 open('about:blank', '_self').close(); //一度再表示してからClose 10 return false; //以降の処理を中断 11 } 12}

として、子画面が開かれているかを孫画面側から1秒毎に監視することで、
実装できました。

ありがとうございました。

投稿2020/10/05 00:59

kumakumatan

総合スコア213

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問