• ベストアンサー

ウインドウの親子連携について

親ウインドウでデータを処理して、その結果だけを子ウインドウに表示します。 つまり、親が管理の画面となり、子はそれのうち必要な結果のみを見せる形です。 利用者側の状況としては、  親ウインドウ > 管理部門  子ウインドウ > 一般利用者(表示された情報を見るだけ) という感じでそれぞれを表示します。 親から子を生成し、親がボタンを押せば子がリロードするのはうまくいきました。 しかし、親の方が管理運営するために、データの変化を常にPHP(DB)に送信するのでそのたびにリロードされます(更新状態で再描画するため)。 親からのリロード指令を受けて子は自身をリロードし、親がアクセスするDBから必要な情報だけ取得して再表示します。 問題は、親がリロードすることによって、自分の生成した子供を忘れてしまうのか、 親のリロード後に子を指定している変数(下記の"cWin")の値がなくなってしまうようで子にリロードの要求を出せなくなります。 (ブラウザエラー:cWinはNullまたはオブジェクトではありません) >親ウインドウ ・ウインドウオープン function childOpen{ cWin = window.open("child.html","child","width=200,height=200,resizable=1"); } ・子ウインドウリロード指示 function childReload{ cWin.location.reload() } ウインドウオープンの指示(Form使用) <input type="button" value="表示" onClick="childOpen()"> 子ウインドウへのリロードの指示 <input type="button" value="リロード" onClick="childReload()"> なお、変数指定時に var cWin = "child"; としてもダメでした。 なんとか、親がリロードされても生成した子供を覚えておく、あるいは何らかの形で生成済みの子ウインドウを指定する方法はないでしょうか? よろしくおねがいします。 なお、対象はWindowsXP+IE6で考えています。

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

  • ベストアンサー
noname#86752
noname#86752
回答No.1

JavaScriptで作成した変数はリロードすれば最初の状態に戻ります。 アプリケーションの作りによって出来る場合、出来ない場合がありますが、私は以下の2つのどちらかを行います。 1.ウィンドウに名前をつける。 ウィンドウに名前をつければ、親はその名前で呼べば子ウィンドウを知ることができます。 var child = window.子ウィンドウの名前; もし子ウィンドウがいっぱい出来るようなら、どこになんて名前をつけるか厳密に管理する必要があります。 2.子が親に自分を知らせる。 子ウィンドウはwindow.openerで親ウィンドウを知ることが出来ます(たとえ親がsubmitでリロードしても)。親ウィンドウに子ウィンドウをセットするような関数を作っておけば、子ウィンドウからのアクションで親ウィンドウに自分を知らせることができます。 例) 親ウィンドウ var child; function setChild(win) { child = win; } 子ウィンドウ window.opener.setChild(window); この方法では「子ウィンドウがfunctionを実行する」という点が難点です。親が「リロードした後」という記述があるところをみると、この方法は使えないのではないかと思います。 頑張ってください。

mezashi2000
質問者

お礼

>var child = window.子ウィンドウの名前; 子供の名前を変数に入れるのに"window."が必要だったんですね。 うーん、こんな単純なことだったとは・・・。 すっごく助かりました。 がんばって作ってみます。

その他の回答 (2)

noname#86752
noname#86752
回答No.3

#1です。 もしAjaxを使うなら参考URLをご覧下さい。 私も最近知ったのですがJavaScriptを多用するならお勧めのライブラリです。 Ajax関連も入っていて、すごく簡単にクロスブラウザのAjaxを実現できました。

参考URL:
http://www.imgsrc.co.jp/~kuriyama/prototype/prototype.js.html
mezashi2000
質問者

お礼

ありがとうございます。 参考にさせていただきます。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

最初に、 cWin がnull または、cWin.closedの時は、開き直すようにすればいいかと思います。 if(cWin==null || cWin.closed){//開かれてない時 cWin=window.open("child.html","child","width=200,height=200,resizable=1"); } 確か、window.open は、名前が付いているウィンドウをwindow.openしようとした時は単にそのまま(新しく開かない)ので、コレで良いかと思います。 また、 Ajax的手法を使えば、親からのPHP(DB)受信時にリロードしなくて済みます。

mezashi2000
質問者

お礼

>Ajax的手法を使えば それ、私も考えました。 出来るだけシンプルに作りたいと思ったので今回は敬遠してたのですが、どうしてもダメならそれを試すつもりでした(^^ 試すにしても、Ajaxの勉強をしないと概念しかわかってないのですが・・・。 ありがとうございました。

関連するQ&A

  • window.openで開いた子ウィンドウから親ウィンドウのjavascriptを実行するには

    window.openで開いた子ウィンドウから親ウィンドウのjavascriptを実行するにはどうしたらよいのでしょうか。 子ウィンドウから <INPUT TYPE="button" value=\"実行\" onClick=opener.document.jikkou();> や <INPUT TYPE="button" value=\"実行\" onClick=opener.jikkou();> 等のボタンを作ってみましたが、無反応でした。 すいません。宜しくお願いします。

  • 子ウィンドウを閉じるとき、親ウィンドウのテキストボックスにカーソルを移動したい。

    子ウィンドウを閉じるとき、親ウィンドウのテキストボックスにカーソルを移動したい。(java) <script> function openChild(f){ window.open("child2.htm","_blank"); } </script> <form> <input id="text1"><br /> <input id="text2"><br /> <input type="button" onclick="openChild(this.form)" value="子ウィンドを開く"> </form> 子ウィンドを閉じる <input type="button" onclick="window.close()" value="閉じる"> 親ウィンドウのテキストボックス(id="text2")にカーソルを移動したいのですが。 <input id="text2"><br />

  • 子ウィンドウに値を渡したい

    親ウィンドウ <form action="aaa.xxx" method="post" name="aaa"> 条件:<input type="text" name="joken"> <button onclick="子ウィンドウ開く"> </form> 親ウィンドウのbuttonをクリックすると、jokenをキーにウラでDBからデータを引っ張ってきます。それを、onclickで開いた子windowに表示する。 ということをやりたいのですが、1回ボタンを押すだけで、 ・ウラ(PHPです)にsubmitして、データを引っ張る ・子ウィンドウを開く ・子ウィンドウに引っ張ったデータを表示する という3つのことができるのでしょうか。 できるならば、恐れ入りますが、具体的に方法を示していただくか、 あるいは参考URLを教えていただけるととても助かります。 よろしくお願いします。

  • ウィンドウが閉じない

    フレーム付きの親ウィンドウから一つ子ウィンドウを生成し、その子ウィンドウ内のSubmitボタンのクリックするとメールを送信しその後、子ウィンドウ自身を閉じる動作をさせたいのですが、うまくいきません。 お助け下さい。 --------- 親ウィンドウ --------- window.open('kakunin.htm','CheckFrame'); ------------------------ --------- 子ウィンドウ --------- ~略~ function mailsub(){ window.close(); } --> </script> </head> <body> <div align="center"> <br><br> <META HTTP-EQUIV='Content-Type' CONTENT='text/html;CHARSET=Shift_JIS'> <form action="mailto:xxx@xxx.co.jp" method="post" enctype="text/plain" name="check">  <input type="submit" name="Submit" value="送信" onClick="mailsub()"> ~略~ ------------------------- これで子ウィンドウは閉じません。 オブジェクトを指定すればいいのかもしれませんが、親ウィンドウからの生成だとどうすればよいのかもわかりません。 よろしくお願い致します。

  • INPUTタグを使ってリンク先のウインドウを指定したい

    INPUTタグを使って、リンク先を表示させたいのですが、うまくいきません。わかる方よろしくお願いします。 今迄正常に動いていたソース↓ <INPUT type="button" value="ログオン" onclick="window.open('test.htm','win1','width=400,height=500');"> リンク先のウインドウの表示方法を変えると不具合がおこるソース↓ <INPUT type="button" value="ログオン" onclick="window.open('test.htm','win1','target=_home');"> ※フレームのページを使っていて(フレーム名 headとhome)、homeに表示させたい。 INPUTタグを使用したい。

  • JScript server2008 window.openについて

    JScript に関するバグ情報等が有れば教えて下さい。 具体的には Windows Web Server 2008 R1 + IE8 の環境にて window.open 操作をした場合にターゲット指定をうまく認識しない模様です。 フレーム内親ウィンドウから子ウィンドウ(別ウィンドウ)を開き、開いた子ウィンドウから親ウィンドウを操作したいのですが、新規のウィンドウを開いてしまいます。 XP + IE8、Vista + IE8では問題が発生しません。 以下に簡単なソースを記載します。 --- index.htm --- <HTML> <HEAD> <TITLE>フレーム</TITLE> </HEAD> <FRAMESET rows="50%,*" border="3" > <FRAME name="up" src="./parent.htm" frameborder="1"> <FRAME name="down" src="" frameborder="1"> </FRAMESET> </HTML> --- 親ウィンドウparent.htm --- <HTML> <HEAD> <TITLE>親ウィンドウ</TITLE> <script language="javascript"> <!-- function child_window(){ window.open("./child.htm" , "child"); } //--> </script> </HEAD> <BODY> 親ウィンドウ<BR> <input type="button" value="open" onclick="child_window();"> </BODY> </HTML> --- 子ウィンドウchild.htm --- <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>子ウィンドウ</TITLE> <script language="javascript"> <!-- function parent_window(){ window.open("./parent.htm" , "up"); } //--> </script> </HEAD> <BODY> 子供だよ<BR> <input type="button" value="parent_open1" onclick="parent_window();"> </BODY> </HTML>

  • ウィンドウサイズ2

    (先ほど質問したのですが、わかりにくいのでもう一度...) <INPUT TYPE="button" VALUE="open window" onClick='myWin = window.open("sample.htm","Sample","width=200,height=200")'> で、200×200の新しいウィンドウが開けますよね。 これを、ボタンではなく普通のリンクに、また、新しいウィンドウを開くのではなく元のウィンドウのサイズを変えることはできますか?

  • 親ウィンドウから子ウィンドウのURLを取得する方法

    openメソッドで開いた子ウィンドのURLを親ウィンドウから取得することは できますか? 子ウィンドウで色々なページに移動し、ある時点で表示されている 子ウィンドウのURLを親ウィンドウで取得したいのです。 以下の様なソースを書いてみましたが駄目でした。 var child; function OpenWindow() { child = open("http://xxx.yyy.zzz/", ""); } function GetChildURL() { var child_url = child.location.href; }

  • 新しいウィンドウで開きたい

    フレームで上下に分けたページで、 <input type="button" value="編集" onclick="parent.parent.location = '../page.php?id=1'"> このボタンを押すと、リンク先が親フレームに展開されますが、親フレームでなく、新しいウィンドウで開きたいと思います。 target="new"を指定しても駄目でした。「parent.parent.」をいじらなければ駄目でしょうか?

  • 子ウィンドウのフォームにアクセスすることはできますか?

    親ウィンドウから,子ウィンドウを生成し,子ウィンドウ内のフォームの値を設定・参照することは可能でしょうか. ローカル内であればできそうな気もするのですが,以下の条件が有り,これを突破する方法が分かりません. ・子ウィンドウの内容は一般サイト(YahooだったりGoogleだったり,一定ではない) ・上記の理由で,formタグにname属性やid属性などが無い場合がある. サンプルで試したソースは以下の通りです. <html> <head> <title>JS test</title> </head> <body> <script type="text/javascript"><!-- function alert_d() { // alert("OK"); alert(target.sf1.p.value); } function newWindow() { target = window.open( "http://www.yahoo.co.jp", "target", "" ); } --></script> <input type="button" value="ダイアログ" onClick="alert_d();"> <input type="button" value="新規ウィンドウ" onClick="newWindow();"> </body> </html> 新規ウィンドウボタンでYahooを表示させた後,ダイアログボタンをクリックすると以下のエラーが発生します. Permission denied for <http://localhost> to get property Window.sf1 from <http://www.yahoo.co.jp>. http://localhost/test_js/ Line 9 これはやはりセキュリティ上の制限であり,実現は不可能ということでしょうか?