- PR -

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

1
投稿者投稿内容
okr
会議室デビュー日: 2008/01/10
投稿数: 7
投稿日時: 2008-08-21 13:05
いつも参考にさせていただいております。
JavaScriptに関して質問です。

【実現したい事】
フレーム分割してある親画面から子画面を開き、子画面にあるリロードボタンで、子画面自身をリロードしたら、親画面のフレーム(menu)部分をリロードさせたいと考えています。

【親画面のフレーム構成】
フレーム:main
フレームセット1:menu(子画面呼び出し元)
フレームセット2:top
フレームセット3:bottom

【現在の実装】
子画面のリロード後に、この処理で親画面のリロードを行っています。
window.opener.location.href = window.opener.location.href;

【現状で出来ていること】
・パターン1
@親画面から子画面を開く
A子画面でリロード⇒親画面(menu)がリロードされる
・パターン2
@親画面から子画面を開く
A親画面(menu)のリロード
B子画面でリロード⇒親画面(menu)がリロードされる

【問題点】
@親画面から子画面を開く。
A親画面のフレーム(main)をリロード
B子画面でリロード
⇒window.opener.location.href = window.opener.location.href;
 の処理の部分で「書き込みできません」 というエラーになってしまう。

以前にも同じような質問をされている方がいて解決しているみたいなのですが、その解決方法を見ても分かりませんでした。
対処法について,どなたかご教授いただけないでしょうか?
宜しくお願い致します。

以下が参考にしたURLです↓
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=15172&forum=7&start=0
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-08-21 13:29
参考元スレッドから
引用:

[解決案] openerは使わないで直指定
====================================================
<input type=button onclick='window.open("frame1.aspx", "frame1");'>
====================================================



frameのnameをOpen時のtargetとする事で実現。

親画面のソースイメージ
コード:
<frameset>
  <frame name="frame1" src="frame1.aspx">
  <frame name="frame2" src="top.aspx">
  <frame name="frame3" src="bottom.aspx">
</frameset>

okr
会議室デビュー日: 2008/01/10
投稿数: 7
投稿日時: 2008-08-21 14:36
ご返答ありがとうございます。

親のframeの名前を子のウィンドウ名にしました。
そうしたら、親画面(menu)に子画面で表示したい内容が表示されてしまいした。


書き忘れてしまったのですが、strutsを使用し作成しております。
現在のソースを乗せておくので、指摘等ありましたらお願いします。

------------------------------------------------------------------------
[親画面]
<html>
<body>
<frameset cols="320px,*">
<html:frame action="/menuAction" frameName="menu">
<frameset rows="50px,*">
<html:frame action="/topAction" frameName="top">
<html:frame action="/bottomAction" frameName="bottom">
</frameset>
</frameset>
</body>
</html>

[親画面(menu)]
<html>
<head>
<!-- jsは外部ファイルに記述 -->
<script type="text/javascript" src="./common.js"></script>
</head>
<body>
<!-- 子画面を開く -->
<html:form action="/subWinAction" target="subWin">
<input type=button onclick="subWindOpen(); submit();">
<html:form>
</body>
</html>

[子画面(subWin)]
<html>
<head>
<!-- jsは外部ファイルに記述 -->
<script type="text/javascript" src="./common.js"></script>
</head>
<!-- onload時に親画面のリロード処理を行う -->
<body onload="parentRload();">

<!-- 子画面のリロードするアクション -->
<html:form action="/selfReload" target="_self">
<input type=button onclick="submit();">
<html:form>
</body>
</html>

[jsファイル(common.js)]
// 子画面を開く
function subWindOpen(){
window.open("", "subWin");
}

// 親画面のリロード
function parentRload(){
window.opener.location.href = window.opener.location.href;
}

------------------------------------------------------------------------

【疑問点】
くまっちさんの方法でやる場合、子画面から親画面のリロード処理は
window.opener.location.href = window.opener.location.href;
のままでいいのでしょうか?
参考元の解決案で
 >openerは使わないで直指定
とあったのですが、直指定の意味が理解できませんでした。。。
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-08-21 16:55
私の方法ではなく、参考記事での解決方法ね。

>親のframeの名前を子のウィンドウ名にしました。
↑そうじゃありません。

>直指定の意味が理解できませんでした。。。
子画面から親画面(メニュー)のリロードが必要な場合
厳密にはリロードではなくwindow.openを行う事で、同様の動きをさせています。

つまり子画面から親画面を開く際にtargetとして親画面のフレームを指定することで
あたかもリロードしている動きを実現しています。

コード:
// 親画面のリロード 
function parentRload(){ 
    window.open("/menuAction", "menu");
}


で、実現しませんか?
okr
会議室デビュー日: 2008/01/10
投稿数: 7
投稿日時: 2008-08-22 10:16
くまっちさんの説明でやっと理解でしました!
解決しました。本当にありがとうございました。
1

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