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

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

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

Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

JavaScript

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

Q&A

解決済

1回答

3265閲覧

Firefoxの終了時に開きっぱなしの子ウィンドウを閉じる方法

BOLSTUMP

総合スコア13

Firefox

Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

JavaScript

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

0グッド

0クリップ

投稿2015/09/24 12:54

Firefoxアドオンを開発しています。
開発しているアドオンは、javascriptでポップアップウィンドウ(以下、子ウィンドウ)を開くものなのですが、子ウィンドウを開きっぱなしの状態で親ウィンドウを閉じた時に子ウィンドウが残ってしまいます。
さらにその状態で子ウィンドウを閉じても、その後にFirefoxを起動した時に、閉じたはずの子ウィンドウも再び一緒に呼び出されてしまいます。

Firefox終了時に子ウィンドウを一緒に閉じる方法、またはFirefoxの親ウィンドウの終了を感知する方法が分かる方はいらっしゃいますでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。

子ウィンドウをwindow.openするときにオブジェクトとして変数に入れてやり、
親ウィンドウを閉じる時に実行されるonunloadイベントで子ウィンドウをcloseしてあげればいいと思います。
閉じるときに、子ウィンドウがあるかどうかの判定もしたほうがいいです。

JavaScript

1//子ウィンドウオブジェクト 2var subwin; 3 4//子ウィンドウを開く 5function openSub(){ 6 subwin = window.open(親ウィンドウ名, 子ウィンドウ名); 7} 8 9//親ウィンドウを閉じるときに子ウィンドウも閉じる 10window.onunload = function() { 11 //子ウィンドウの存在確認 12 if( subwin && (!subwin .closed) ){ 13 subwin .close(); 14 } 15} 16

参考:JavaScriptでウインドウを閉じる

投稿2015/09/25 02:01

kaputaros

総合スコア1844

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

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

BOLSTUMP

2015/09/25 11:11

回答ありがとうございます。 上記の方法で無事閉じられるようになったんですが、Firefox再起動時に自動で閉じられたはずの子ウィンドウも一緒に起動してしまいます。 close()だけではなく他にもしなければならない処理があるのでしょうか?
kaputaros

2015/09/28 06:20

コメント遅くなってすいません。 解決済みとなってましたが、↑の件も解決できたでしょうか? 投げっぱなしで申し訳ないなと気になってしまって・・・^^;
think49

2015/09/28 07:01

このコードでは対象のページ遷移、更新の度に子ウインドウが閉じられることになるのではないでしょうか。 window.onunload はページを離れるタイミングで発火するので [閉じる] 以外でも発火します。 [閉じる] を検知するイベントはないので質問の要件を満たすコードを書く事は不可能だと思われます。
BOLSTUMP

2015/09/30 15:32

>kaputaros こちらも反応遅れました、申し訳ありません。 色々試してはいるのですが、結果としてはコメントの件はまだ解決しておりません。 >think49 私は window.addEventListener('unload', function() { if( subwin && (!subwin .closed) ){ subwin .close(); } } という形で実装しましたが、終了時のみに子ウィンドウが閉じられるようになっています。
kaputaros

2015/10/01 07:58 編集

自分もちょっと調べたのですが、難しい問題ですね。。。 子ウィンドウの方にも、 開いた親ウィンドウがいない場合に自分を閉じる という実装をしてみてはいかがでしょうか? Javascript 子ウィンドウからwindow.openerを使って親ウィンドウを操作する http://shoyu-ramen23.jugem.jp/?eid=203 もし実施済みでしたらすいません。。
BOLSTUMP

2015/10/02 18:43

>kaputaros それはまだ試して無かったです! 実装した結果、再起動時に一瞬子ウィンドウが表示されますが、無事閉じる事が出来ました。アドバイスありがとうございました。 本当は再起動した時にそのまま子ウィンドウを使用出来るようにしたかったのですが、再起動時の子ウィンドウでは以下のことをしようとするとうまく動いてくれなくて、断念しました ・親ウィンドウにウィンドウ名を設定し、ウィンドウ名を指定して親ウィンドウのwindowオブジェクトを取得 ・Firefoxの設定値(about:configで見れるもの)を取得 通常子ウィンドウを開きっぱなしのまま親ウィンドウを閉じられたときの対応って、どうしてるんですかね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問