- PR -

frameタグのsrcのリンク先を動的に変更するには?

1
投稿者投稿内容
さくら
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 76
投稿日時: 2004-02-18 21:07
現在、Windows2000+ASP.NET+IE6.0で
WEBアプリを作成しています。

ある1画面は4つのフレームから成り、
top,head,left,bodyと分かれています。
それらをMain.aspxのHTMLコードページで
--------------------------------------------------
<frameset rows="60,80,*">
  <frame name="top" src="Top.aspx">
  <frame name="head" src="Head.aspx">
  <frameset cols="120,*">
    <frame name="left" src="Left.aspx">
    <frame name="body" src="Body.aspx>
  </frameset>
</frameset>
--------------------------------------------------
と記述して、表示するときはこのMain.aspxを指定して表示させています。
この <frame name="body" src="Body.aspx> のsrcのリンク先を
bodyフレームから動的に変更したいのですが、
window.parent. ・・・ 
ここから先をどのように書けばいいのか分かりません…。
もし、ご存知の方がおられましたら
ご教授よろしくお願い致します。
He
大ベテラン
会議室デビュー日: 2002/12/18
投稿数: 141
投稿日時: 2004-02-19 01:18
引用:

この <frame name="body" src="Body.aspx> のsrcのリンク先を
bodyフレームから動的に変更したいのですが、


bodyフレームのURLをbodyフレームから変更するだけなら、
document.URLを変更することで可能かと思いますが、外してますか?

MSDN LibraryのDHTML リファレンス
さくら
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 76
投稿日時: 2004-02-19 09:25
お返事ありがとうございます。

bodyフレームからbodyフレームのURLを変更することはできるのですが、
当画面を表示するときはMain.aspxを指定して表示させているため、
F5キー等で画面更新を行った場合、
もともとMain.aspxで指定しているページがbodyフレームに表示されてしまい、
これまで表示されていたbodyページと違ったページに
変わってしまうため、それを回避する方法を探しています。

もし、何か良い方法等がありましたら
ご教授よろしくお願い致します。

BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-02-19 10:07
私も同じことを考えてやろうと思いましたが、
結局わからず同類のFramesetを二つ作成して切り替えて使っています。

何か良い方法はないでしょうかね?
He
大ベテラン
会議室デビュー日: 2002/12/18
投稿数: 141
投稿日時: 2004-02-19 10:36
偶然にも、前の返答で貼り付けたページがさくらさんの希望する要件を満たしているようなので解析してみました。

↓のURLを『IEの』アドレス欄に貼り付けてみてください。
■http://www.microsoft.com/japan/msdn/library/ja/jpisdk/dhtml/references/properties/URL.asp

URL.aspを要求すると、default.asp?url=〜〜.URL.aspにリダイレクトされますよね。
で、クエリで渡された値をもとに、default.aspがframeタグのsrcの値を生成。
・・・という感じだとおもいます。

URL.aspの中に、『<BASE TARGET="_top" />』という記述があるのもポイントですね。

# ただし、私はこれを良い方法とは思いませんが。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2004-02-19 11:53
引用:
window.parent. ・・・ 
ここから先をどのように書けばいいのか分かりません…。

window.parent.frames[3].location = '(表示するurl)';
とすれば該当フレームだけリクエストしなおしますが(番号でなくフレーム名で指定
する方法はないのだろうか・・)、これではMain.aspxはリクエストしなおして
いないので、F5を押せばBodyの表示は結局もとに戻ってしまいます。

そこで(Mainは幸いaspxのようですし)、<frame name="body" src="Body.aspx>
このframeタグごと<asp:Literal>にしてしまってPageLoad時に動的に変更するように
する、とか。何をもとにするかといえばやはりQueryStringになるのでしょうかねぇ。
原理的にはHeさんが紹介してくださった方法と同じでしょうね。

[余談]
VS.NETにaspxフレームセットのテンプレートはないですよね。こういうことのためにも
用意してほしいな、と思います。(Formありきと考えると、しょうがないのでしょうか)
さくら
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 76
投稿日時: 2004-02-19 14:48
お返事ありがとうございます。

src部分だけを変更するということは
やはりできそうにないのですね…。
タグごと書きかえてしまう方法で
検討しようと思います。
ありがとうございました!!
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2004-02-19 19:59
引用:
src部分だけを変更するということは
やはりできそうにないのですね…。

いや、
<frame name="body" src="<asp:Literal id='Literal1' runat='server'></asp:Literal>">
こんなことしても動くみたいですが、なんかいやだなぁと思ったので・・
1

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