• ベストアンサー

フレーム&リファラ

content1.html のページからリンクして、 frame.html(menu.html , content1.html) を表示するにはどのような方法があるでしょうか。 *.html からのリンクで、 frame.html(menu.html , *.html) を表示させるようにする記述を教えていただきたいです。 一応、フレームは cols="120,*" として120の方が menu.html です。 また、frame.html(menu.html , *.html)が表示されている状態で、 menu.htmlの方のリンクで、*.htmlだけを表示する(フレームを解除する)ことは出来るのでしょうか? ページのURLはlocation.hrefで取得できますが、どのように応用すればよいのかという感じです…。

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

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

動いてしまったものは仕方ない・・・ ■content1.html <html><body> content1<br> <a target="_top" href="frame.html?content1.html">frame</a> </body></html> ■frame.html <html><head> <script type="text/javascript"><!-- document.write('<frameset cols="20%,*">\n'); document.write('<frame src="menu.html?' + location.search.substr(1) + '">'); document.write('<frame src="' + location.search.substr(1) + '">'); //--></script> </head></html> ■menu.html <html><head> <body> <script type="text/javascript"><!-- document.write('<a target="_top" href="' + location.search.substr(1) + '">noframe</a>'); //--></script> </body></html> refererを使えばアドレス欄がきれいになるのですが、 refererを無効にしたり詐欺するツールがあるので 使わないほうがいいでしょう。

quads
質問者

お礼

動作確認させていただきました。ほぼ完璧ですw 大変感謝しております。 JSに関しては変数くらいしか使いこなせないレベルなのでもう少し理解を深めてみたいと思います。 仰られるように、この方法だと効果は理想のものですがアドレス表示が少し気になりますね…。 しかし逆にこの方が良かったりもするのでこの記述を利用させていただきたいと思います。 更にアドバイス等あればお願いします。 回答が見られないようなら2、3日後に締め切りたいと思います。 05-03-31 01:25

その他の回答 (4)

回答No.5

このときは、frame.html のどこかに <noscript> JavaScriptが必要です </noscript> のような記述をすれば、とりあえずはうながせます。 もし、固定ページのフレームでよければ <noscript> <frameset ....> <frame src=menu.html> <frame src=どこかのページ.html(例:content1.html)> </frameset> </noscript> のようにしてもいいでしょう。 menu.htmlも、同じように<noscript>に対応して、フレーム解除もできるかとできます。 (JavaScriptでタグ生成しているので・・・)

quads
質問者

お礼

回答ありがとうございます。 HTMLタグとスタイルシートに関してはある程度詳しいのですが、JavaScriptは全然分からないのでお聞きしてしまいました。。 <html></html>内に直接<script><noscript>を書いたり、<frameset>が直接ないのも抵抗があるので応用して使わせていただきます。 今回ご回答いただきありがとうございました。

回答No.4

location.href を使わなかった理由には、referer相当が取得できない(Norton等により)、または詐欺されている可能性があることを考慮してあります。 Cookieが生きていれば、Cookieを利用する手もあるのですが、ブラウザによっては利用確認のダイアログが出たりとうざかったりもします。 今回、location.search (サーバーの環境変数だと、QUERY_STRING)を使ったのは、最もオーソドックスな例として出しておきました。 それとは別に、アドレス欄に表示されたくないのなら もうひとつ上位のフレームを作り、その下に表示する手もあります。 この場合、target="_top" ではなく、適切なものにかえる必要がありますが、これをやると全部が全部かわってしまいます。汗

quads
質問者

お礼

アドバイスありがとうございます。 編集してて気になったのですが、JavaScript対応していない場合にいろいろ不味いことが起こりますよね…。 JavaScriptとFrameが有効でないと滅茶苦茶に…。 未対応ブラウザまで配慮してたらキリがないので、フレームを利用される場合にはJavaScriptが有効であることを前提とするような構成にしたいと思います…。 その上で更に質問なのですが、メニューの方からnoframeにした場合に表示されるページは、フレームのURLの?以降のページですよね。 実際にコンテンツの方に表示されているページというのは出来ないのでしょうか? 重ね重ね恐れ入ります…。 05-03-31 03:10

quads
質問者

補足

index.htmlからフレームを表示させた場合、 frame.html?index.html となりますが、 menuの方で他のリンク先を<a href="content2.html" target="migi">のような普通のリンクをさせた場合、アドレスは変わらず、コンテンツ部が変わってもnoframeで表示されるページはindex.htmlになってしまいますよね…。 リンクの仕方を<a href="frame.html?content2.html" target="_top">としてしまうと、フレームが書き換えられる操作が行われるのでフレームごと読み込まれ、リンクがスムーズに行われないような気がするのです…。 補足させていただきました。

回答No.3

menu.html の <head>が閉じていませんでした。。。 location.hrefでは取得できることは取得できるのですが フレームに乗ったアドレスのURLを取得するのは困難がありますので(URLが化ける 「:」が%3a 等・・) 明示的にcontent1等でフレームを乗っける時に明示的にファイル名を指定するといいでしょう。

  • gura_
  • ベストアンサー率44% (749/1683)
回答No.1

例えばこういうことですか。 >content1.htmlからリンクして、frame.html(menu.html , content1.html)を表示 【content1.html】 <html> <head></head> <body> content1.html<br><br> <a href="frame.html" target="_top">frame.html(menu.html,content1.html)へリンク</a> </body> </html> 【frame.html】 <html> <head> <title>frame.html</title> </head> <frameset cols="120,*"> <frame src="menu.html" name="hidari"> <frame src="content1.html" name="migi"> </frameset> </html> >*.htmlからのリンクで、frame2.html(menu.html , *.html)を表示 【x.html】 <html> <head></head> <body> *.html<br><br> <a href="frame2.html" target="_top">frame2.html (menu.html,x.html)を表示</a> </body> </html> 【frame2.html】 <html> <head></head> <frameset cols="120,*"> <frame src="menu.html" name="hidari"> <frame src="x.html" name="migi"> </frameset> </html> >また、frame2.html(menu.html , *.html)が表示されている状態で、 menu.htmlの方のリンクで、*.htmlだけを表示する(フレームを解除する) 【menu.html】 <html> <head></head> <body> menu.html<br><br> <a href="x.html" target="_top">*.htmlを表示(フレーム解除)</a><br><br> <a href="frame.html" target="_top">frame.html</a><br><br> <a href="frame2.html" target="_top">frame2.html</a> </body> </html> 参考サイト↓ http://www.tohoho-web.com/html/frameset.htm

quads
質問者

お礼

回答ありがとうございます。 説明不足でしたが、JavaScriptの変数などを用いて同じソースで任意のページに対応するものを教えていただきたいです…。 フレーム解除の方では、フレームを跨いでもう一方のフレームに表示されているページのURLを取得して、そのURLをtarget="_top"で開くようなリンクの記述と言うのでしょうか…。 恐れ入ります…。