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

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

ただいまの
回答率

90.51%

  • JavaScript

    20335questions

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

  • Firefox

    241questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,707

BOLSTUMP

score 6

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

こんにちは。

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

//子ウィンドウオブジェクト
var subwin;

//子ウィンドウを開く
function openSub(){
  subwin = window.open(親ウィンドウ名, 子ウィンドウ名);
}

//親ウィンドウを閉じるときに子ウィンドウも閉じる
window.onunload = function() {
  //子ウィンドウの存在確認
  if( subwin && (!subwin .closed) ){
    subwin .close();
  }
}
参考:JavaScriptでウインドウを閉じる

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/09/25 20:11

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

    キャンセル

  • 2015/09/28 15:20

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

    キャンセル

  • 2015/09/28 16:01

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

    キャンセル

  • 2015/10/01 00:32

    >kaputaros
    こちらも反応遅れました、申し訳ありません。
    色々試してはいるのですが、結果としてはコメントの件はまだ解決しておりません。

    >think49
    私は
    window.addEventListener('unload',
    function() {
    if( subwin && (!subwin .closed) ){
    subwin .close();
    }
    }
    という形で実装しましたが、終了時のみに子ウィンドウが閉じられるようになっています。

    キャンセル

  • 2015/10/01 16:57 編集

    自分もちょっと調べたのですが、難しい問題ですね。。。

    子ウィンドウの方にも、
    開いた親ウィンドウがいない場合に自分を閉じる
    という実装をしてみてはいかがでしょうか?

    Javascript 子ウィンドウからwindow.openerを使って親ウィンドウを操作する
    http://shoyu-ramen23.jugem.jp/?eid=203

    もし実施済みでしたらすいません。。

    キャンセル

  • 2015/10/03 03:43

    >kaputaros
    それはまだ試して無かったです!
    実装した結果、再起動時に一瞬子ウィンドウが表示されますが、無事閉じる事が出来ました。アドバイスありがとうございました。

    本当は再起動した時にそのまま子ウィンドウを使用出来るようにしたかったのですが、再起動時の子ウィンドウでは以下のことをしようとするとうまく動いてくれなくて、断念しました
    ・親ウィンドウにウィンドウ名を設定し、ウィンドウ名を指定して親ウィンドウのwindowオブジェクトを取得
    ・Firefoxの設定値(about:configで見れるもの)を取得

    通常子ウィンドウを開きっぱなしのまま親ウィンドウを閉じられたときの対応って、どうしてるんですかね?

    キャンセル

同じタグがついた質問を見る

  • JavaScript

    20335questions

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

  • Firefox

    241questions

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