- PR -

子画面から親画面のリロードについて

投稿者投稿内容
ラララ
ベテラン
会議室デビュー日: 2004/02/04
投稿数: 66
投稿日時: 2004-09-27 21:53
いつも参考にさせていただいております。

[やりたい事]
一覧画面である親画面から詳細画面である子画面を別画面で起動し
子画面で更新ボタンをおしたタイミングで,DBを更新し,
親画面の一覧をリロードしたいと考えております。

本来であれば画面遷移で対応したいのですが,理由があって
別画面で起動する必要があります。

[親画面の構成]
以下のようにフレームで構成されています。
フレーム:Main
フレームセット1:frame1(子画面呼び出し元)
フレームセット2:frame2

[可能な事]
ここで,親画面のリロードは,以下のようにして可能です。
window.opener.location.reload();

[問題点]
親画面において,ボタンを押してフレームの分割率を変更する
処理があります。
この時,フレーム(Main)にPostBackの処理が入ってしまうので,
フレーム(Main)がリロードされてしまいます。

子画面を開いたままフレーム(Main)のリロードが行われた場合,
frame1のリロードをしようとすると「書き込みできません」
というエラーとなってしまいます。
どうもフレーム(Main)のリロードが行われた時点で,
openerが探せなくなっているようです。

これに対する対処法について,どなたかご教授いただけないでしょうか?
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-09-28 16:50
子画面起動時にwindow.opener.topを変数に格納するとか。

<script language="javascript">
var OpenerTop = window.opener.top;
</script>
<input type=button onclick='OpenerTop.frames["frame1"].location.reload();'>
ラララ
ベテラン
会議室デビュー日: 2004/02/04
投稿数: 66
投稿日時: 2004-09-29 10:10
ご回答ありがとうございます。
ご提示された方法で大丈夫だと思ったのですが,一点,問題がありました。

[OKなケース]
@子画面呼び出し
A親画面でPostBack(リロードと同等)
B子画面から親画面リロード(JavaScript)
 ⇒JavaScriptレベルで何度リロードしてもOKでした。

[NGなケース]
@子画面呼び出し
A親画面でPostBack(リロードと同等)
B子画面でPostBack(リロードと同等)
C子画面から親画面リロード(JavaScript)
 ⇒ここでエラーが発生します。
  「エラー:OpenerTop.frames.frame1.locationはNullまたはオブジェクトではありません」

呼出し元の大元のフレームがリロードされた後に,子画面の方でもリロードされると
駄目みたいです。(この時点でOpenerがおかしくなる?)
子画面をリロードしないとうまくいきます。(しかしPostBackが走ってしまう)

という事は,最初にOpenerTopに格納した値を保存しておければ大丈夫なのかなとも
思って色々試したのですが,方法を見つけることができませんでした。

すみませんが,どなたか再度,ご教授いただけないでしょうか?
えんぞ@?
ぬし
会議室デビュー日: 2004/07/06
投稿数: 271
お住まい・勤務地: はまっこ
投稿日時: 2004-09-29 11:35
発想の転換ということで参考程度に...

『A親画面でPostBack(リロードと同等)』の時に、
 1.Postさせる前にJavaScriptにて子画面が存在するかチェック
 2.Post完了後、「1.」にて子画面が存在した場合のみJavaScriptにて子画面をリロードさせる

実際試しておらず、頭にふと思っただけなので可能かどうかは...(謎
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-09-29 11:46
window.openのtargetにframe1を指定すれば、子画面からframe1にロードできます。

<input type=button onclick='window.open("frame1.aspx", "frame1");'>
ラララ
ベテラン
会議室デビュー日: 2004/02/04
投稿数: 66
投稿日時: 2004-09-29 11:46
誤解があるかもしれませんので,念の為です。
以下の文章は,OpnerTopに格納した値を保存しても駄目だったのではなく,
リロードされても保存しておく方法が分からなかったという意味になります。

>>という事は,最初にOpenerTopに格納した値を保存しておければ大丈夫なのかなとも
>>思って色々試したのですが,方法を見つけることができませんでした。

どなたか保存方法がお分かりでしたらよろしくお願いします。
ラララ
ベテラン
会議室デビュー日: 2004/02/04
投稿数: 66
投稿日時: 2004-09-29 11:51
えんぞ@見習さま,todoさま,アドバイスありがとうございます。
教えていただいた方法について,これから検証してみたいと思います。
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-09-29 12:03
引用:

ジダンさんの書き込み (2004-09-27 21:53) より:

[問題点]
親画面において,ボタンを押してフレームの分割率を変更する
処理があります。
この時,フレーム(Main)にPostBackの処理が入ってしまうので,
フレーム(Main)がリロードされてしまいます。



そもそも、フレームの分割率を変えるときにPostBack しないっていうのはどうですか?
フレームのrowsやcolsはJavaScriptで変更できますよ。

スキルアップ/キャリアアップ(JOB@IT)