- ベストアンサー
フレームなしから、フレームありへ
今、HTMLの勉強をしていて、とりあえず最終課題なるもののために、ほかの人のホームページを作っています。 課題の必須項目の中にフレームがあり、とりあえず組み込もうと思うのですが、トップページはノンフレームでリンク先のHTMLを開くとフレームを組み込んだHTMLを呼び出してかつ、目的のHTMLとメニュ用のHTMLを両方フレームの中に開かせたいのですが、できれば、1つのフレームHTMLだけでそれを実行したいです。 JavaScriptを使ってかまわないので、できませんか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 なるほど。 確かにHTMLのままでは実現出来ません。 同一ウィンドウだとするとJavaScriptでも難しいでしょう。 僕ならCGIやPHPを使用して動的に生成します。 (しかしこれはHTMLを覚えてる途中の人にはハードルが高過ぎます) ひとつのフレームで表現する事に何の利点があるのでしょう?理解に苦しみます。 賭けても良いですが、教える側がそんな「課題」を出す訳はありません。 出題内容をもう一度よく確認した方が良いですよ。 そうではなく、ただやりたいのだ、という場合は考え直す事をお勧めします。
その他の回答 (3)
1つの案ですが,こうするのはどうでしょう? 下記をメモ帳などにコピペ→「任意の名前.html」で保存 ------------------------------------------- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>TOPページ</title> <script language="javascript"> function openWin1() { <!-- サブウィンドウ1を開く --> win = window.open('', 'win1'); <!-- サブウィンドウ1の内容 --> win.document.open(); win.document.write('<html><head><title>新窓1</title></head>'); win.document.write('<frameset rows="180,*">'); win.document.write('<frame name="header" scrolling="no" target="main" src="http://www.google.co.jp/">'); win.document.write('<frame name="main" src="http://www.goo.ne.jp/">'); win.document.write('</frameset>'); win.document.write('</html>'); win.document.close(); } function openWin2() { <!-- サブウィンドウ2を開く --> win = window.open('', 'win2'); <!-- サブウィンドウの2内容 --> win.document.open(); win.document.write('<html><head><title>新窓2</title></head>'); win.document.write('<frameset rows="180,*">'); win.document.write('<frame name="header" scrolling="no" target="main" src="http://www.google.co.jp/">'); win.document.write('<frame name="main" src="http://www.yahoo.co.jp/">'); win.document.write('</frameset>'); win.document.write('</html>'); win.document.close(); } </script> </head> <body> <a href="#" onClick="JavaScript:openWin1();return false">フレーム1</a> <a href="#" onClick="JavaScript:openWin2();return false">フレーム2</a> </body> </html> ------------------------------------------------ ※改行されているように見えるかもしれませんが, win.document.write('○○○'); の'○○○'の部分は改行せず1行にしてください。 保存したHTMLをブラウザで開き, 「フレーム1」をクリックするとサブウィンドウで,上段Google下段gooのフレームページが開き, 「フレーム2」をクリックするとサブウィンドウで,上段Google下段YAHOO!のフレームページが開くと思います。 上段のGoogleはメニュー(menu.html) に, 下段は各コンテンツページ(aaa.html…) に見たてています。 新窓で開いてしまうのが問題ですが, 一応1つのHTMLからフレームTOP(frame.html)ページが生成され,各ヘッダーとメインにはメニューとコンテンツページが表示されると思います。 なんとか,新窓でなく,同窓で開けないかとは思いますがちょっと方法がわかりません。 ----------------------------------------------- <script language="JavaScript"> function changeWin1() { document.body.innerHTML = 'あいうえお<br>かきくけこ'; } </script> <a href="#" onClick="JavaScript:changeWin1();return false">フレーム1</a> ----------------------------------------------- みたいな「innerHTM」で全文書き替えようかと思いましたが,「あいうえお<改行>かきくけこは」できるのですが, 長いのはできませんでした。
補足
サンプルありがとうございます。 また言い忘れていたのですが、できれば、同じ窓で行いたかったのです。すみません。
- pk7743
- ベストアンサー率23% (211/896)
1つのHTMLじゃ無理ですね。 ○トップページ ○フレーム ○フレーム内1 ○フレーム内2 4つ必要です。 JavaScriptは必要ありません。
補足
すみません。説明不足でした。 ANo.1さんの補足に、詳しく書きました。 (まだ、説明不足かもしれないですが、なにか、分からないことがあれば、何なりとご質問ください)
- rightegg
- ベストアンサー率41% (1357/3236)
こんにちは。 申し訳ないですがどこでつまずいているかが理解出来ません。 フレームを使ったページはそもそも最低3つのHTMLファイルで構成されます。 フレームのスクリプトを書いてあるファイル(リンク先)と、フレームに表示するページ(最低2つはあるでしょ?)。 質問文をそのまま読むと「フレームページへリンクする」ってことになります。迷う様な場所が無いんですよ。 フレームの作り方自体は分かってるんですよね?
補足
はい、確かにフレームを使う場合、いくつかのページを必要とすることや作り方は知っています。 ただ、自分がやりたいことは、ノンフレームのページをトップとして、そこにいくつかのコンテンツ(ローカルのHTML)へのリンクを普通に張ります。そして、そのコンテンツへ移動したとき、ナビメニュとクリックしたコンテンツをフレームで表示させたいのです。 そして、トップのどのコンテンツをクリックしても、上のようにさせたいのです。一番簡単なのは、仰る通り、それぞれのリンクをフレームにしたHTMLにして、<frame>にナビとクリックされたリンクのコンテンツを挿入させればいいのだと思いますが、それを、"ひとつのフレームセット" だけで行いたいのです。 #すみません、"どのリンクでも" がはじめに抜けてました。 たとえば、 top page: aaa.html bbb.html ccc.html(どれかをクリック) ↓ frame.html(これを、3つのリンクで共有) ↓ menu.html + aaa.html bbb.html ccc.html (menu.htmlと、クリックしたどれかが表示)
お礼
アドバイスありがとうございます。 それから、それぞれのコンテンツ用にフレームセットを作ることにします。なぜひとつのフレームでやりたかったかというと、単に、管理のしやすさといくつもフレームを作るのが面倒くさかったという、いい加減な理由でした。(変な理由に付き合っていただいた皆さん、ありがとうございましたそして、すみませんでした)