• ベストアンサー

親子関係のWindowについて

いつもお世話になります。 AのWindow(親)、BのWindow(子)があるのですが、下記の仕様に悩んでいます。 *** 仕様 *** Bが画面の手前(アクティブ状態)にある時、あるボタンを押下すると、現在Aが開かれているかを判断し、Aが開かれている場合、Aを画面の手前に表示する。また、Aが開かれていない場合、Aを再度開き、画面の手前に表示する。 ************ ここで悩んでいるのが「現在Aが開かれているかを判断」する方法と「Aを画面の手前に表示する」方法です。 どなたかご存知の方がいましたらご教授をお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • osumitan
  • ベストアンサー率33% (102/307)
回答No.3

BはAから開かれているので、BのopenerがAになります。 Bのopenerが存在し、かつ開かれていればいいわけです。 閉じられている場合は、closedがtrueになります。 画面を手前に出すのは、focus()を使えばできます。 function func() {   if(!opener) {     // openerが存在しない     open_A();   }   else if(opener.closed == true) {     // openerが閉じている     open_A();   }   else {     // openerを前に出す     opener.focus();   } } // Aを開き、openerにする function open_A(w) {   var w = window.open("A.html");   opener = w;   w.focus(); }

inoki_koko
質問者

お礼

返事が遅くなり、誠に申し訳ありません。 上記の内容でうまくいきました。 「opener」というのがあるのは知りませんでしたので、大変勉強になりました。 本当にありがとうございます。

その他の回答 (2)

  • kapisan
  • ベストアンサー率14% (1/7)
回答No.2

失礼、JavaScriptのカテゴリでしたか。

  • kapisan
  • ベストアンサー率14% (1/7)
回答No.1

OSや言語が書いてないので何とも回答し難いですが・・。そもそも子がアクティブなら親もアクティブなはずです。 とりあえず一番多いパターンと思われるWindows+C言語という前提で回答します。 まず「Aを手前に表示」は、SetForegroundWindow()でできます。他にSetActiveWindow()やSetWindowPos()などでもできます。 「Aが開いてるか判断」は、いろいろやり方があります。 ・ウインドウタイトルがユニークではっきりしているなら、FindWindow() や FindWindowEx()でAのハンドルが取得できます。開いてなければNULLです。 ・EnumWindows() でウインドウを列挙して GetWindowText()とGetClassName()でタイトルとクラス名をチェックする方法でもAのハンドルを取得できます。Aが見つからなければ開いてないということになります。 ・Aの表示・非表示を判断するだけなら、IsWindowVisible()で判断できます。 ・Aが自プログラム内のものなら、Aが開閉したときにWM_APPなどのユーザイベントを発行して開閉状態を自プログラム内で管理するという方法もあります。

inoki_koko
質問者

お礼

返事が遅くなり、誠に申し訳ありません。 今回はjavascriptでの開発ですが、C関連の言語での開発も携わっているので、上記の内容は大変勉強になります。 本当にありがとうございました。

関連するQ&A