• ベストアンサー

親フレームの中でずっと小フレームを展開させ続ける方法

自分でも既にフレームを使ったホームページを作成したのですが、 今回やりたいものはちょっと自分には複雑なので知恵をお貸しください。 まず、上下に2分割したページをindexページにします。 下はコピーライト表示のみでリンクタグはありません。 上がメインウィンドウで、ここからサイトの中に入ります。 そこから先はまた上下2分割のフレームページで、この上部のフレームにメニュー表示をしたいのです。この下部のフレームがメインウィンドウになります。 そして常に、メニューウィンドウからのリンクはターゲット属性の _parentを使い、indexで切っていた下のコピーライト表示は常に置いておきたいというものなのですが・・・・。 _parentを使ったリンクの事は、理解しているつもりです。 そしてその理解の上では、私がやりたいことは出来るはずなのですが・・・・。 始めに試してみたところでは、2番目の子フレームの上部の更に中だけでまたフレームページが展開されてしまいました。 次に試してみたところでは、_topと同じ使われ方をしてしまいました。 ファイルの置き方が悪いのか、フレームセットの組み方が悪いのか、 そもそも基本的なことを解っていないのではないかと想い、 どのように試してみたかを取りあえず置いといて、 最初から組み方を教えて頂けないでしょうか。 ちなみに、コピーライト表示だけの最初のフレームをずっと切ったままにしておきたいのは、賛否両論あるのは存じていますが サイトアドレスを統一して表示させたい為です。 そして最初のフレーム上部の中で更にフレーム展開させ続けながら _parent属性でリンクを張りたいのは、ずいぶん気持ちの中で折り合いをつけて、検索などからたどり着いた方の為に最低限メニューとメインのコンテンツを見てもらいたい為です。 申し訳ありませんがどうぞ、教えて下さい。

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

  • ベストアンサー
回答No.1

_parent ユーザエージェントは、指定文書を、現在のフレームの直接の親である FRAMESETに読みこまねばならない。この値は、現在のフレームに親フレームが存在しない場合、_selfと等価である。親フレームに対しての親フレームが存在しない場合、_topと等価である。 まず index がウィンドに単独でいる場合、index では _self, _parent, _top いずれも等価である。 ここ(index)でメイン MAIN100 とコピーライト COPY100 をフレーム表示という事で、 MAIN100, COPY100 の親フレームは index であるので MAIN100, COPY100 では _parent, _top いずれも等価である。 次に MAIN100 から MAIN200 を呼び出し MAIN200 でメニュー MENU210 とメイン MAIN210 をフレーム表示という事で、 MENU210, MAIN210 の親フレームは MAIN200 であるので MENU210, MAIN210 では _self, _parent, _top いずれも異なる。 で、操作・・・。 MAIN100 から各ページ(フレーム)へのリンクは _self か又はそのフレーム名か指定しない必要があります。 (BASE 要素で省略時の target 指定も可能なので注意) 当然そこで _parent, _top を指定すれば MAIN100 の親フレーム index は解除されます・・・。 MENU210 での操作は、たぶん MAIN300 というフレームを用意してそのフレームで MENU210, MAIN310 という組み合わせを表示したいのだと推測します。 その場合は、_parent か又はその親フレーム名を指定する必要があります。 と、ここまで記述した内容で実行して実現できない場合は、記述に誤りがある可能性も考えられます・・・。 とりあえず「ターゲット属性」なしで検証してみて、次に「ターゲット属性」に _self を指定して比較検証し変化がない事を確認の上で _parent, _top を順次指定してみて比較検証されてみる事をお勧めします。 (意外とリンク先が想定外だったり・・・)

参考URL:
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/types.html#type-frame-target
hachiko873873
質問者

お礼

出来ましたー!!解りやすい解説ありがとうございました! 同じように一回目にやっていたはずなのに、その時はなぜか出来ませんでした。なんでだろう。 indexページを <html> <head> 中略 <frameset rows="*,30" frameborder="NO" border="0" framespacing="0"> <frame name="main" src="main100.html"> <frame name="copy" scrolling="NO" noresize src="copy100.html" > </frameset> <noframes>中略 </html> とし、main100からmain200へ飛び、main200は <frameset rows="50,*" frameborder="NO" border="0" framespacing="0"> <frame name="menu" src="menu210.html"> <frame name="content" scrolling="NO" noresize src="main210.html"> </frameset> とし、menu210で操作しつつmain300では <frameset rows="50,*" frameborder="NO" border="0" framespacing="0"> <frame name="menu" scrolling="NO" noresize src="menu210.html" > <frame name="content" src="main310.html"> </frameset> としました。 ターゲットを_parentにしても、最初のindexのメインフレームの framenameである"main"にしても、どちらでもちゃんと動作しました!あー、よかった! ホントにありがとうございました!助かりました!

その他の回答 (1)

  • goldfox
  • ベストアンサー率49% (123/249)
回答No.2

フレーム名を活用してはどうですか。 親ページ(index.html)でmainとcopyがあり、 子フレーム(main200.html)でmenuとcontentを指定していますね。 menuフレームのリンクでmain全体に表示したいのでしたら、target="main"でいいのではないでしょうか?

hachiko873873
質問者

お礼

回答ありがとうございます。 えっと、_parentでもフレームnameでもどっちでも出来ました! 私の中でどうしても_parentを使わなければいけないという観念があったのですが、ご指摘をいただいてフレームネームで指定した方が確実なのではないかと想い、フレームネームで指定する方法を採用させて頂きたいと思いました。 私の最初の組み方がきっとよくなかったのです。 そんなに難しいことではありませんが、ややこしいことに変わりはなく、ファイルが膨大になりディレクトリの作り方などが大変ですが、 ちゃんと理解が出来てよかったです。 target="main"でやってみようと思います。 どうもありがとうございました。

関連するQ&A