プロが教えるわが家の防犯対策術!

わかりにくいタイトルでごめんなさい。

http://www.~.jp/index.htm

でアクセスできるトップページは左右の2つのフレームに別れていて、右側にコンテンツ、左側が各コンテンツへのリンク(画像)を表示しているとします。

そこでコンテンツAをクリックしたときには、右側にトップページと同じディレクトリにあるa.htmを表示します(状態A)。これは、targetでフレームを指定しています。

さて、index.htmのURLをご案内して見に来てもらう時は問題ないのですが、a.htmのURLをご案内して来てもらったときは、左側のリンクバーが表示されません。そのときでも、状態Aの様に表示するにはどうしたらいいでしょうか。

全てのページをフレームページにして、リンクバーをロードさせれば実現出来そうですが、あまりスマートには思えなくて...

A 回答 (4件)

非常に簡単でかつスマートにできる。



(1)それぞれの単体のページのジャバスクリプトとして以下の趣旨の記述を書く。(それぞれのページに具体的に記述するのではなく、共通の読み込みJavaScriptにすれば良い)
(論理だけ述べる。
 ジャバスクリプトは書かない。自分で調べること)

(1).まず、親フレームが存在し、それが本当に自分のHPの親フレームかとうかの一致確認処理。
(レフトフレームの「フレーム名」から判定するのが良い)

(2).一致していれば、何もしない(それは左のリンクバーから来たとほぼ間違いなく推察される)

(3).一致していなければ、「そのファイルの名前を引数として」トップページを呼び出す。
location.search.substring()などで引数を受け取れる。
ヒントはhttp://oshiete1.goo.ne.jp/kotaeru.php3?q=18407 書籍などにものっている機能。

(4).トップページのジャバスクリプトは、
2つに分ける。
JavaScriptでフレーム分けを吐き出す。
JavaScript内で、引数があるばあいと、ない場合とで、document.writeの内容を変えれば良い。
※javaScriptを切っていた場合のデフォルト(今のフレーム分けと同じもの)は用意しておくことをお薦めする。
    • good
    • 0
この回答へのお礼

詳細にご教示くださり、有難うございます。

正直言ってJavascriptはまだまだ勉強不足なのですが、引数を使えばうまくいくということがわかりました。
がんばってみます。

お礼日時:2001/01/02 00:38

私はこんな風にやってます。



まず、JavaScriptでこんなのを書きます。
---
if (window.name != "framename" ) {
document.location.href = "frameset.html";
}
---
各ページに
<script>
</script>
で囲んで書いても良いですし、別ファイル(check.jsとしてファイル保存)にして
<script src="check.js"></script>
なんてこともできます。私は後者のをつかってます。

で、framename には、本来このコンテンツを表示すべきフレームの名前を入れます。targetで指定する名前です。
frameset.htmlはフレームセットを定義しているソースに置き換えます。

動きとしては、自分の表示されているウィンドウ名がframenameでは無い場合frameset.htmlを表示する。という感じです。
    • good
    • 0
この回答へのお礼

コードで例を示していただき、有難うございます。

Javascriptの知識が足りないので、大変勉強になりました。この方法と他の方が教えてくださった方法を組み合わせれば、何とかできそうな気がします。

お礼日時:2001/01/02 00:40

要するに、すべてのページを単ページで表示するのではなくフレームをつけるということでしょうか?



Javaスクリプトを使用して「単ページ」のみでは表示できないようにすることは可能です!

しかし、これは単ページのみでアクセスした場合は
TOPページを表示することになります!
質問の趣旨とは少し違うのですがどーですか?


スクリプト文

----------------------------------------
<script language="javascript">
<!--//
if (top == self) self.location.href="TOPページ";
//-->
</script>
----------------------------------------

※TOPページの所には例:index.htmlとかが入ります
    • good
    • 0
この回答へのお礼

有難うございました。

今回の目的とは微妙に違った方法だと思いますが、他のところで利用シーンがありそうです。大変参考になりました。

お礼日時:2001/01/02 00:35

直リンクでフレーム対応させたいということですよね?自分はプログラムの知識はないので、何かのプログラムを組み込めば出来るのかも知れませんが、それは分かりません。

以下にはひとつの案として回答いたします。
これを実行するにはそれなりのディスクスペースが必要ですので、あらかじめご了承下さい。
まず、すでにあるデータとは別に、直リンクしたいページも、新たにフレーム構造にします。もちろん名前も違うものを使ってください。a.htmlだったらaa.htmlというカンジです。メニューページもすでにあるものとは別の名前で新規に作成して下さい。とは言ってもデータはすでにあるもののコピーでOKです。そして直リンクページ以外のものは、すべてターゲットで指定します。本来トップページとなるはずのtop.htmlもターゲットにします。こうすると、あたかもフレーム構造で動くように見えます。ただし見かけのURL欄はa.htmlのままですが。。。
これで分かりますか?つまり直リンクしたいページの分だけ余計にフレームページとしてのデータが必要になるわけです。その他のページは共有できますが、もともとのページの戻りターゲットも_selfにしておく必要があります。
    • good
    • 0
この回答へのお礼

皆様、お礼が遅れてすみません。

フレームをたくさん作るのは避けたかったので、今回はこの方法は取れませんでした。でも、大変参考になりました。有難うございます。

お礼日時:2001/01/02 00:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!