• ベストアンサー

親子関係の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

  • JavaScriptのWindow.openで!

    JavaScriptのWindow.openで! お世話になってます。 JavaScriptのWindow.openについてお聞きします。 現在JavaScriptで・・・ リンクボタン押下→ポップアップ画面表示→再度リンクボタン押下  →再度ポップアップ画面表示(ポップアップ開きなおし) ということをしたいです。 IE6,7,8で対応する必要があるのですが、IE8でうまくいきません(泣) IE8では、ポップアップ画面を別プロセスで開くみたいで、 ポップアップがどんどん増えていってしまいます。 開くポップアップは一つにしたいのですが、対策がわかりません。 何か方法はないでしょうか? どなたかご教授ください。

  • Window Media Player

    Internetのサイトでラジオ放送を楽しんでいます。 たとえば http://www.asahi.co.jp とか http://mbs1179.com/ です。番組を選ぶときにWindow Media Playerをいつもクリックするのですが、 (A)=画面一面にWindow Media Playerが開いたり、 (B)=ときには 画面左隅に小さくWindou Media Playerが開いたりします(このように小さなものは画面にいっぱいに広がってくれません)。  たえず画面一面に広がるWindow Media Playerでラジオ番組を聴ける方法はありませんか? 理由は(A)の場合ですと番組の途中からでも聴けるのですが、(B)の場合ですと 番組の途中から聴くことができません。かならず最初から聴くことになります。 説明がうまくないですがよろしくお願いします。 追記ですが、おなじWindow Media Playerの画面でも2種類あると思います。(A)と(B)です。

  • window.openした孫画面でSessionが引き継がれないことがあるについて

    [Win2000professional SP4][SQLServer][IIS-5.0][ASP] でwebアプリケーションを開発しています(ASP.NETではありません) 下記について原因、対処方法がみつからないため 何かご教授いただきたく投稿しました。 手順 1、IE6SP1を起動し画面(A)を表示 1、IE6SP1を起動し画面(B)を表示 2、画面(B)からwindow.openで画面(C)を表示 3、画面(C)からwindow.openで画面(D)を表示する 画面(A)は、Webアプリケーションとは別画面 画面(B)、画面(C)、画面(D)はWebアプリケーションの画面 すると画面(D)は、画面(C)のSessionIDとは異なるIDが割り振られています。 画面(B)から画面(C)へは、正しくSessionIDが引き継がれています。 この場合、画面(A)を閉じれば画面(D)は画面(C)とSessionIDが引き継がれます。 この場合、、画面(D)と画面(C)でSessionIDを正しく引き継げない原因は何でしょうか? 何かご存知な方は教えて下さい。

  • 子windowに配列を渡したいのですが

    お世話になります QNo.483099にて同じような感じの質問が出ていたのですが、 ちょっと本質が違うような気がするので、別に質問させていただきます。 まず、親画面(A.html)にて配列を作成します(仮にarrayとします) 次に、ボタンのクリックイベントで子window(B.html)を開き、そのwindowにarrayの要素を含んだリストボックスを表示させたいのですが、 子windowを開くロジックを window.showModalDialog('B.html','array','dialogHeight:150px;dialogWidth:300px;status:no;') としてみたのですがうまくいきません。 これをjavascriptのみで実装することは可能なのでしょうか? よろしくお願いします。

  • ASP.NETで子画面の処理でわからなく悩んでいます。

    ASP.NETで子画面の処理でわからなく悩んでいます。 ?親画面Aでボタンを押下すると、子画面Bが表示されます。 ?子画面Bが存在しないときは、子画面Bを表示をさせて存在するときは、  子画面Bの内容をリロードをしたいと思っています。  データの受け渡しは、 Sessionでしたいと思っています。 ?ボタン押下時の処理は下記に記載しました ⇒とりあえず画面表示がされます。 ?子画面が存在するときのチェックと子画面のリロードの方法を教えてください。 よろしくお願いいたします。  ASPか javascriptか迷ったのですが ASPであげさせて頂きます。 ' Dim scriptStr As String ' scriptStr = "<script type='text/javascript'>" ' scriptStr += "window.open('webMesai.aspx','_blank');" ' scriptStr += "</script>" ' ' ClientScript.RegisterStartupScript(Me.GetType(), "詳細画面", scriptStr)

  • window.openで子画面を開いた後、子画面上にあるボタン(または

    window.openで子画面を開いた後、子画面上にあるボタン(またはリンクなど)を押下した場合に親画面にフォーカスをセットし前面に出力したい。 親画面と子画面は別ドメインのリソースとなります。 window.open("","親のwindow名","")を実施することで同一ドメイン間は想定通りの動きが可能ですが、異なるドメイン間の場合「アクセスが拒否されました」となってしまいます。 そこで、本事象の解決策として ?インターネットオプションの設定変更で回避可能か? ?window.open以外にやり方があるか?  →window名がわかっている場合、window.open以外に良い方法がないものでしょうか。。。 を教えてください。

  • Window+Dについて

    ボタンを操作すれば、同じ画面のブラウザをもう1つ出すことができたような記憶があるのでいろいろ試している中で、Window+Dを押したら画面がタスクトレイに消えてしまいました。 これはWindow+Mとまったく同じ意味なのでしょうか? それと、同じ画面を出す方法もできれば教えて頂きたいです。 よろしくお願いします。

  • window名の指定方法(close処理)

    いつもお世話になっています。 今回は、JavaScriptでのwindow.openの制御について質問いたします。 動きの流れとして 1.ログイン画面(以下、画面A)からログインを行うと ポップアップ画面(以下、画面B)を表示してからsubmit処理が走り、画面がリロードされる。 2.画面Aは消しても、別の画面(たとえばgoogleとか)に 遷移しても問題ない。 3.画面Aから再度ログインされた場合に、画面Bをとじなければならない。 こういう動きのときに、画面Bをあげるときに以下のように指定してやっています。 openDisp = window.open("pop.jsp", "pop", "width=300,height=200,top=100,left=70"); ここでこの画面Aがどこにも遷移できなくて、リロードもかからなければ、変数が活きるのでopenDisp.closedで 閉じられているかどうか確認できるのですが、リロードがかかるために変数が空になってしまいます。 そこで、変数にopenDisp = "pop"; とか書いてやって、openDisp.closedと書いてやると、 alertで出した結果は「undifined」と返ってきます。 このような場合、画面Bが閉じられているかどうかをチェックするにはどうしたら宜しいのでしょうか? 以上、よろしくお願いいたします。

  • 他のwindowをcloseしたい

    題のとおりなのですが、、 現在、あるSUBMITボタンを押すと、 "WINDOW1"という名前のwindowを立ち上げるものがあります。 別のSUBMITボタンを押すと、 "WINDOW1"をcloseする方法を知りたいです。 window.close()では、 WINDOW1ではなくSUBMITボタンがあるwindowが閉じてしまい WINDOW1だけ むなしく残ってしまいます。 なさけない話、 window.WINDOW1.close とか WINDOW1.close とか試してみたのですが・・・ 全然違うようですね・・。。 どうすればいいのでしょうか?

  • 子画面から親画面をクローズしたい

    子画面から親画面をクローズすると確認メッセージが表示されます。 非表示の方法はありますか? 現在の処理内容:  親画面:   ボタン押下時 onclick="window.opener='main';window.open('URL');return false;"  子画面:   onload時 window.opener.close(); 確認ブラウザ:IE10、Chrome43  ※IE10では表示されるが、Chrome43では表示されない。

専門家に質問してみよう