リンク元に応じてフレームで最初に表示されるページを変える

[新着] Webテンプレートを仮オープンしました



0   名前:  : 2006/09/04(月) 19:51  ID:RxmV/XrJ
はじめまして。色々検索してはみたのですがズバリというものが無く恥をしのんで質問させていただきます。
なにぶん初心者で簡単な質問かもしれませんがご容赦下さいm(_ _)m

現在、index.htmlでframesetを記述し左にA.html、右にB.htmlというページが表示されるようになっています。
Aがメニューの形になっており、その中には右側にC.htmlというページを表示させるコンテンツがあります。
このC内には、target="_top"でフレームを解除するリンクが存在してまして
それにより全画面でD.htmlというページが表示されます。

このD.htmlから元のフレームページに戻るリンクを作りたいのですが
この場合のみ右側にCを表示させるにはどう記述したらよいのでしょうか?
D内にインラインフレームがあって色々操作するため、「戻る」は使えません。
document.referrerを使うのかな?とは思ったのですがうまく書けず…
ちなみに、index2.htmlのように新しくフレームページを作るのはできたら避けたいです。
最初に表示されるページが違うだけであとは全く同じなのにアドレスが変わってしまうので。

よろしくお願いします。

1   名前: シオン : 2006/09/04(月) 19:51  ID:R3tFnkDE
普通に

<a href="javascript:history.back()">戻る</a>

で戻ったらいけないのですか?

2   名前:  : 2006/09/04(月) 19:51  ID:RxmV/XrJ
Dのページ内にインラインフレームがあって、そこを色々変えるのがメインになるため
history.backだと先にインラインフレーム内が「戻って」しまって
D→Cに戻るまで何度もクリックしないといけないのです。

Dに来てから何をやっていたとしても一発でA+Cの状態に戻れるリンクが欲しいんですが
根本的なところがよくわかっていないのでうまく作れなくて…すみません。。

3   名前: いなづき : 2006/09/04(月) 19:51  ID:3YZaY..q
D.htmlでのindex.htmlへ戻るリンクは、URLに ?xxx を付け、index.html?xxx としておいて、
document.location.href の値を見て、?xxxが含まれていたら右側のフレームをC.htmlに変えるようにする。
というのはどうでしょう?(?xxxの形式がいやだったら#で判断するのでもいいかも。)
index.htmlのjavascriptはこんな感じ。

<html>
<head>
<script type="text/javascript">
<!--
window.onload = function(){
	var str = document.location.href;
	if(str.match(/\?xxx/)){
		parent.f2.document.location.href='C.html';
	}
}
//-->
</script>
</head>

<frameset cols="20%,*">
<frame name="f1" src="A.html">
<frame name="f2" src="B.html">
</frameset>


なお、javascript OFFの環境を考慮しない(右側フレームがまったく表示されなくてもいい)のなら、
元のf2 frameのURLをabout:blankにしておいて、javascriptで
document.location.hrefのxxxの存在に応じて、B.htmlとC.htmlを切り分けるようにするのがいいと思います。

4   名前: いなづき : 2006/09/04(月) 19:51  ID:3YZaY..q
あ、書き忘れ。
もちろん 上記ソースの str.match の部分で document.referrer の値で判別してもいいと思います。
document.referrer が切られる環境で無ければですが・・・

5   名前:  : 2006/09/04(月) 19:51  ID:RxmV/XrJ
なるほど、matchというのがあるんですね。
#で試してみたところ、見事うまくいきました。
もっとjavascriptを使いこなせるように勉強してきます〜。

シオンさん、いなづきさんアドバイスありがとうございました!

一覧へ戻る