フレーム個別ページからの移動

フレームを用いた Web ページは最近では嫌われている。なぜなら,フレームを構成するページを単独で表示すると,その他のフレームページとの関連が失われてしまい,意味不明になってしまうからである。例えば,検索でヒットして表示したページがなんらかのフォームだとする。ところが,その入力の説明が実は別フレームに記載されるだけで当該ページにないと,そのフォームの入力ができない。Google などの検索結果からアクセスすると,たいていこの事態に陥ってしまう。それでも,マニュアルのようなコンテンツではフレーム構造はやはり便利で,私にとっては捨てがたい。

私のサイトのコンコーダンス・プログラムも,フレームの悪しき特性を備えていた。説明ページとフォーム(個別ページ)がフレーム分割されていて,目次ページから行儀よくアクセスし,フレーム内容個別ページ全体をロードするページ(全体ページ)から利用する,というのでない限り,ほとんど使い物にならない。

そこで,個別ページだけを読者が表示した場合,自動的に全体ページにジャンプするようにすればよいと考える。meta タグ http-equiv="Refresh" オペランド指定により自動的ページ移動を実現することができる。「N 秒後に XXX ページに自動的に移動します。しない場合はここを...」というあれである。しかし,個別ページに対して全体ページへの移動を無条件に設定してしまうと,当該個別ページのロードでループしてしまう。だから,個別ページが要求されるもとになったリファラーをチェックし,それが全体ページでない場合に限りジャンプするようにしなければならない。 JavaScript コードの例は以下のようなものである。個別ページの meta タグを記述できるところに,これを挿入しておく。

<script type="text/javascript">
<!--
mt = new RegExp("\/XXX\/全体ページ", "gi");
if (! mt.test(document.referrer)) { // check the referrer
    document.write("<meta http-equiv=\"Refresh\" content=\"1; url=http://XXX/全体ページ"\">");
}
//-->
</script>

ただし,この手法の有効性には,ブラウザがきちんとリファラーをセットしてくれるという前提がある。あらゆる事態を想定するならもう少し工夫が必要である。