Web ページにいわゆるフレームを使用するかどうかは、人さまざまだと思います。親切なサイトは、フレーム版とノンフレーム版の両方を用意しています。 電脳レストハウス「梅ちゃん堂」にもかつて「フレーム付きバージョン」がありました。(いずれ復活するかも知れません。)
フレームを使用することには長所と短所の2面があります。 長所は、サイトのインデックスが左フレームなどに表示されるので、制作者にとってはサイトの管理がしやすく、 閲覧者にとってはサイト内の移動がしやすいことが、まず上げられます。 またサイト内のすべてのページに表示したいことを別フレームに載せれば良いので、効率的です。
フレームを使用すると、サイト内を移動しても、ブラウザのアドレス欄に特定のアドレス(フレーム定義ページのアドレス)しか表示されないことは、 長所であると共に短所でもあります。サイトの制作者側にとって、レンタル掲示板などをサイト内に使用してもアドレスが判らないのはメリットです。 (これを応用して、フレーム比率 100:0%にしてサイトのURLをカモフラージュしている裏サイトもあります。)
逆に閲覧者にとっては、現在見ているページのアドレスが判らず、リロードしたら以前のページに戻ってしまった、なんてトラブルを経験した人も多いのではないでしょうか。 制作者にとっても、フレームの便利さに惑わされて、フレームなしの環境で見ている人もいることを忘れてしまうのは問題です。
Internet Explorer や Netscape (Navigator) などの主要ブラウザがフレームをサポートしているので見落としがちですが、 フレームとはブラウザの機能であってWWWそのものの機能ではないことを知っておくべきです。前置きが長くなりました。本題に入りましょう。
1.フレーム内リンクに対する裏技
最近は少なくなったかも知れませんが、自分のサイトのフレーム内に他のサイトのページを表示するのは良くないこととされています。 それがサイト管理者の許可なく行われたのであれば著作権に抵触する、という話を聞いたことがありますし、 そうでなくとも閲覧者にとっては紛らわしいですし、もしリンク先サイトにもフレームが使用されていれば、フレーム内に更にフレームが表示されることになって、 非常に見づらくなります。私もかつて海外のサイトを見ていたとき、どこまでネットサーフしても最初に訪れたサイトのコンテンツが左フレームに居座っているので、 困惑した経験があります。
このようなフレーム内リンクは、必ずしも悪意があって行われているわけではなく、 Web 制作者が target 属性の使用を知らずに(或いはうっかり付け忘れて?)他サイトにリンクした結果、起こることが多いものです。 そこで、フレーム内リンクに対応する裏技を考えてみました。
これは自衛手段となるるだけでなく、前述したように閲覧者がフレームのネストに陥ることを防いでくれます。 IE、Netscape、Mozilla は無論のこと、最近日本語版が出て話題の Opera でも機能します。 (もちろん閲覧者が JavaScript を無効にしていなければの話ですが。)
まず、警告表示用のHTMLファイルを以下のように作成し、任意のファイル名(例えば no_frame_link.html)を付けます。
- <HTML>
- <HEAD>
- <TITLE>警告</TITLE>
- <BODY>
- http://www.umechando.com/<BR>
- このページは正しいフレーム内に表示されていません。<BR>
- 以下のリンクから移動して下さい。<BR>
- <A href="http://www.umechando.com/" target="_top">正しいページ</A>
- </BODY>
- </HTML>
文言は何でもかまいません。http://www.umechando.com/ の所には、代わりにあなたのサイトのURLを入れます。 フレームを解除するために target="_top" を入れるのを忘れないで下さい。
次に、あなたのホームページがフレームを使っているなら、フレーム定義ページのヘッダ部、使っていないなら、 コンテンツページのヘッダ部(</TITLE> と </HEAD> の間)に次のスクリプトを入れます。
- <SCRIPT language="JavaScript">
- <!--
- if (parent.frames.length > 0) location.href = "no_frame_link.html";
- //-->
- </SCRIPT>
これは何をしているかというと、画面のフレーム数を数えているのです。自分のサイト上では 0 という値が返って来るはずです。 自分のサイトでフレームを使っていても、フレーム定義ページは親(parent)を持たないので、やはり 0 となります。 ところが他のサイトのフレーム内に表示されると 0 より多い数字が返って来るため、no_frame_link.html にリダイレクトするわけです。 この方法は、フローティングフレームに対しても有効です。
下のリンクをクリックしてみて下さい。この frame_test.html は左フレームで dummy.html に、右フレームでこのページにリンクしています。 しかし右フレームには no_frame_link.html の内容が表示されるはずです。「正しいページ」をクリックすると、ここに戻って来ることができます。
自サイト内でのテストなので、実際には意味がありませんが、感じはつかめると思います。
2.フレーム付きで見ていない人をフレームページに誘導する裏技
前にも述べたように、ホームページにフレームを使っていると安心してしまい、 コンテンツページにナビゲーションリンクを入れていない人をよく見かけます。せめてトップページへのリンクくらいはページ内に入れた方が良いでしょう。 すべての人がフレーム表示できるブラウザを使っているとは限りません。 また、たとえフレーム仕様のブラウザを使っていても、検索エンジンはフレームなしのコンテンツページにリンクしてきますし、 ブラウザの履歴をたどった場合でもコンテンツページが表示されます。
ここではそのようにしてコンテンツページにたどり着いた人をフレーム付きのトップページに誘導する裏技を考えてみました。 原理は先の場合と同じですが、今度は parent.frames.length が 0 だったらトップページに誘導するというものです。 また今回はフレーム定義ページではなく、コンテンツページに使用します。またヘッダではなく、<BODY> タグの直後くらいに入れます。
(その一)ページにリンクを書き込む方法
- <SCRIPT language="JavaScript">
- <!--
- if (parent.frames.length == 0) document.write("<A href = 'index.html'>トップページへ</A>");
- //-->
- </SCRIPT>
(その二)質問して誘導する方法
- <SCRIPT language="JavaScript">
- <!--
- if (parent.frames.length == 0)
- {
- if (confirm("フレーム付きトップがあります。\nジャンプしますか?")) location.href = "index.html";
- }
- //-->
- </SCRIPT>
ここでは index.html がフレーム定義ページと考えます。
これよりはコンテンツページにトップページへのリンクを入れた方が手っ取り早いのは確かですが、 検索エンジンや履歴から来て、そのページだけ見て終わる人をフレーム付きトップにお導きする利点はあると思います。