• ベストアンサー

子画面から親画面のデータを操作するには?

4つのフレームから成る画面より子画面を開き、 (2番目のフレームに子画面を呼び出すボタンが有ります) 子画面から親画面の2番目と3番目のフレームのデータを 操作したいのですが、上手くいきません。 window.top.opener.frames[1].formxxx.xxxx.value=xxxxx; window.top.opener.frames[2].formxxx.xxxx.value=xxxxx; で良いと思ったのですが。。。 どなたか分かる方いらっしゃったら教えて下さい。

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.4

2番目のフレームのHTML構成を  <FORM name="f1">   <INPUT type="text" name="t1">  </FORM> とします。 このとき  window.opener.parent.frames[1].document.f1.t1.value = 値; でOKです。 (IE5.0、NN4.7で動作確認済み)  window.opener.parentで、4つのフレーム分けをしているHTMLへアクセスし、配列framesで各フレームにアクセスします。  そこから下は、各HTML内でのオブジェクトへのアクセスと同じです。  HIROYOさんの言うように2番目は実親なのでopnerでもアクセスできますが、他のフレームからサブウィンドウが開かれた時に対応できないので、このようにフレーム群の親までアクセスした方が良いでしょう。 (例えこのサブウィンドウが他のフレームから開かれなくても、別のサブウィンドウを開くことになった時に流用できますので、やはりこのようにします。)

m_miyachan
質問者

お礼

できました!! ありがとうございます。

その他の回答 (3)

noname#1785
noname#1785
回答No.3

すいません、2番目のフレームが呼び出し元だったんですね。 見逃していました。(^^;; それでしたら、2番目と3番目とでは、アクセスの仕方が違います。 まず、2番目のフレームは子画面の呼び出し元になりますので、 window.opener.document.formxxx.xxx.value=xxx; でアクセス可能です。 そして、3番目のフレームは、 window.opener.parent.frames[2].document.formxxx.xxx.value=xxx; でアクセスできます。 window.openerは、呼び出した元の画面へのアクセスになります。 2番目のフレームから子画面を呼び出しているのであれば、window.openerは2番目のフレームになります。 他のフレームにアクセスしたい場合は、window.openerの後に、該当フレームからアクセスしたい他のフレームへのアクセスを付け足してやればOKです。 つまり。(笑) 2番目のフレームから3番目のフレームにアクセスする場合、 parent.frames[2].document.formxxx.xxx.value=xxx; と書きますよね? それにwindow.openerを付けてやればいいって事なのです。(^-^)

m_miyachan
質問者

お礼

できました!! ありがとうございます。

  • President
  • ベストアンサー率57% (12/21)
回答No.2

こんにちは。 子画面から window.opener.top.[framename].document.[formname].[textname].value で出来ますよ。 [framename]=フレームの名前 [formname]=フォームの名前 [textname]=INPUT TEXTの名前

m_miyachan
質問者

お礼

試してみましたが、 「'window.opener.top'はオブジェクトではありません」 というエラーが発生してしまいます。 唯一エラーが発生しないのが 「window.top.opener.document.formname.textname.value=XXX」 という方法ですが、これでは3番目のフレームに値をセット することができません。 「window.top.opener.framename.document.formname.textname.value=XXX」 とすると 「'window.top.opener.framename.document'はオブジェクトではありません」 というエラーが発生してしまいます。 ちなみに 「window.top.opener.frames[1].document.formname.textname.value=XXX」 とすると 「'window.top.opener.frames.1.document'はオブジェクトではありません」 というエラーが発生してしまいます。 このことから何かお分かりになるでしょうか?

noname#1785
noname#1785
回答No.1

documentが抜けてませんか? ・・・frames[2].document.formxxx...

m_miyachan
質問者

お礼

documentを入れても変わりませんでした。 ちなみに 「window.top.opener.frames[1].document.formname.textname.value=XXX」 とすると 「'window.top.opener.frames.1.document'はオブジェクトではありません」 というエラーが発生してしまいます。 []が化けてしまってるのでしょうか? それとも単なる表示上の不具合なのでしょうか? 以上、何かこのことからお分かりになったら、教えて下さい。

関連するQ&A

  • 親ウィンドウの別フレームを子ウィンドウから操作したい

    いろいろ試しているのですが、理解不足のせいでしょうが、どうやってもできません! 内容は以下の通り(分からないのは3)です。どうぞ宜しくお願いいたします。 1:画面を、AとBの2つのフレームに分割しています。 【index.html】 <frameset>  <frame src="A.html" name="A">  <frame src="B.html" name="B"> </frameset> 2:Aフレーム内に記述してあるaaaアンカーをクリックすると、子画面ko.htmlを開きます。 <a href="javascript:void(0)" onclick="window.open('path=ko.html','_blank');">子画面</a> 3:ko.htmlではbbbというアンカーがあって、それをクリックすると、"親画面のBフレームにbbbで指定したリンク内容を表示したい"のです。 <a href="javascript:void(0)" onclick="opener.window.location=('B?path=/home/~/~/ZZZ.html');">開きたいファイルZZZ.html</a> と書くと、openerはAだからAにZZZ.htmlの内容が表示されてしまうので、(全くおかしな記述をしているのかもしれませんが・・・(- -;))あちこち調べながら、 B.opener.window.locationとか、 B.opener.window.location.hrefとか、 parent.B.window.locationとか、 parent.frames[1].window.locationとか、 ほかにもいろいろやってみたのですが、出来ませんでした・・・。 このような別フレームの操作が出来る方法があれば教えてください。 宜しくお願いいたします。

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

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

  • フレームを使ったサブウィンドウから親ウィンドウへのデータセット

    下記のソースをフレームを使わないサブウィンドウから実行すると うまく親ウィンドウの該当項目へセットできますが、 フレームをつかったサブウィンドウからだとうまくセットできません。 ご存知の方おりませんか? よろしくお願いします。 function setData(theData) { window.opener.document.MAIN_FORM.DATA0.value = theData[0]; window.opener.document.MAIN_FORM.DATA1.value = theData[1]; window.opener.document.MAIN_FORM.DATA2.value = theData[2]; window.opener.document.MAIN_FORM.DATA3.value = theData[3]; window.opener.document.MAIN_FORM.DATA4.value = theData[4]; } <input type="button" onClick="setData(Array('000','111','222','333','444'))" value="選択">

  • 親→子1→子2→親のデータ渡し

    1.親ウィンドウからサブウィンドウ1を開く。 2.サブウィンドウ1でsubmitボタンを押すと値が  window.openerで親に渡り更にサブウィドウ2が開く。 ここまでは、出来るのですが 3.サブウィンドウ2でsubmitボタンを押して値を親ウィンドウに渡すにはどうしたらよいでしょうか? ここでwindow.openerを使うとサブウィンドウ1が親ウィンドウと判断してしまい上手くいきません。 上手い方法があれば教えて下さい。

  • 親画面からポップアップ画面が操作できない?!

    こんにちは。お世話になります。 *やりたいこと* 親画面からポップアップ画面(子画面)を出し、子画面でボタンを押したときに 子画面からのcallbackで親画面をサブミットします。このとき子画面は閉じない。 その後親画面を閉じたとき(別のページに移ったとき)に、子画面も閉じたい。 サブミット後の親画面では子画面が認識できなくなり、親画面から子画面を 閉じることができません。 *やりたいこと*ができる方法はありませんか? ちなみに、サブミットのときに子画面を再表示しようかと考えましたが、子画面に 表示するデータが多く、リソースを使い果たしそうで実行できません。 *親画面のソース(こんなカンジにしたいです)* <HTML> <SCRIPT Language="JavaScript"> <!-- var WinSel = null; function NewOpen(){ //子画面のオープン WinSel = window.open("NewWin.asp","NewWin","width=200,height=200"); } function NCallBack(){ //子画面からのコールバック window.document.frmMain.action = "OyaWin.asp"; window.document.frmMain.target = "_top"; window.document.frmMain.submit(); } // --> </SCRIPT> <BODY><FORM name="frmMain" Method="post"> <INPUT TYPE="button" VALUE="子画面オープン" onCLick="NewOpen();"> <INPUT TYPE="button" VALUE="子画面クローズ" onCLick="WinSel.close;"> </FORM></BODY></HTML> よろしくお願いします。

  • iframeの中から、親frameのURLを操作したい

    iframeの中から、親frameのURLを変更することはできないでしょうか? 現在、iframeの中にcgiのページを表示させてます。 このcgiから、親のURLを変更したいのです。 親Winodw、子Windowの関係なら、JavaScripを使用してこんな感じで 親URLを操作できますが、親frame、子frameの関係の場合はどうすればよいのでしょうか。 opener.location = "http://www.***.com" 宜しくお願いします。

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

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

  • 子画面への値の渡し方

    親画面と子画面があるとします。 親画面にテキストボックスとボタンがあります。 親画面のボタンを押すと、javascriptのWindow.Openで 子画面を開きます。 子画面は、最初の初期表示で検索結果を表示します。 子画面の検索のキーは、親画面のテキストボックスが持っています。 この時、検索する為に子画面で、親画面のテキストボックスの値を 参照したいのですが参照方法が分かりません。 javascript ではwindow.opener 等で参照できるようですが プログラムの中で値を参照したいと考えております。 初期時なのでPage_Load等に組み込む予定です。 どのような手段があるのでしょうか。 (Delphi .net WEBで作成です)

  • 親ウィンドから子ウィンドへのデータの受け渡し方法

    親ウィンドから子ウィンドへのデータの受け渡し方法で以下に簡単に記述致します。 親 <input・・・name="IN1"・・・> <input・・・name="IN2"・・・> <input・・・name="IN3"・・・> 子 for (i=1,i<=3,i++) { window.opener.document.form名.IN'+i+'.value = eval('form.IN'+i+'.value'); } <form・・・ <input ・・・name="IN1"・・・> <input ・・・name="IN2"・・・> <input ・・・name="IN3"・・・> として渡したいのですが、 window.opener.document.form名.IN'+i+'.valueの"+i+"の指定でエラーとなってしまいます。エラー内容は『'+i+の'の後に;がありません』です。どのように指定すれば宜しいのでしょうか?

  • 子ウィンドウから親ウィンドウのチェックボックス

    おそれいります。 現在、子ウインドウで、window.opener.document.getElementById('text1').value='4444'; window.opener.document.getElementById('text2').value='こんにちは'; window.opener.document.getElementById('text3').value='今日は晴れ'; として、親ウィンドウで <input type="text" id="text1"> <input type="text" id="text2"> <input type="text" id="text3"> へ値をセット出来ているのですが、 この記述の流れで親ウィンドウのチェックボックスを子ウィンドウからtrueにすることはできるでしょうか。よろしくお願いします。

専門家に質問してみよう