「戻る」を管理する


インターネットを始めて間もない人は、WWWブラウザの「戻る(Back)」ボタンに戸惑うことがあります。 ユーザがブラウザで順に複数のページを開いて見た場合に「戻る」ボタンの機能が有効となり、直前に開いていたページに戻ることが出来ます。 Windows などのヘルプファイルにも似たような機能があり、使いこなせれば大変便利なのですが、慣れない人にとっては混乱を来すこともあります。 (「進む」ボタンにも同じことが言えますが、「戻る」の意味が理解できれば「進む」も自然に理解できると思うので、ここでは省略します。)

1つのサイトにA,B,Cの3つのページがあり、ABC順に読まれることを意図して作られているとします。 たいていこの種のシーケンシャルなページ作りでは、ページ自身にも「戻る」や「進む」を表すホットリンクないしはボタンがあり、 例えばこのページの下の方にもあります。ユーザはA,B,C順に読み、CからBに戻ることにしました。 もしブラウザの「戻る」ボタンではなく、CページのリンクからBに戻ったとすると、ブラウザ上は、A>B>C>Bの順で「進んだ」ことになります。 この時点でユーザがブラウザの「戻る」ボタンをクリックすれば、Cページに戻ることになります。 当たり前と言ってしまえばそれまでですが、この構造を理解しながら操作しないと、Bの前はAじゃないのか、と錯覚することもあるわけです。

ブラウザの「戻る」「進む」ボタンはユーザのためのもの、Web ページの管理者はユーザがどのようにページをたどるかは予測しようもないわけですが、 逆にページ管理者が、ユーザが前に見ていたページに戻ることを許容したい場合もあります。 例えばDというページがあり、それはABCどのページからも参照され得るような(ヘルプとか注意書きとかの)ページだったとしましょう。 この場合、DにABCへのリンクを貼っておくことも必要でしょうが、もし「前ページに戻る」というリンクやボタンがあれば、 ユーザはDを見る前に見ていたページに戻れることになり、大変便利です。

これはブラウザの「戻る」ボタンをクリックするのと同じことですが、慣れないユーザは必ずしも「戻る」ボタンを使いこなすとは限りません。 またページの中に「戻る」ボタンがあるのでクリックしてみたら、前に見ていたページではなく、ページ作成者が指定したページにジャンプしてしまった、 ということはよくあります。ユーザが前に見ていたページに戻ることは、HTMLのタグだけでは設定できないので、JavaScript を使います。

ホットリンクの場合:
<A href="javascript:history.go(-1)">前ページに戻る</A>
前ページに戻る

ボタンの場合:
<FORM>
<INPUT type="button" value="前ページに戻る" onClick="history.go(-1)">
</FORM>

history.go( ) というメソッドは、ブラウザの履歴をたどることを意味し、history.go(-1) なら1つ戻る、ということになります。 Netscape Navigator、Internet Explorer ともバージョン3以降で動作が確認できます。 (hiostory.back ( ) というメソッドもありますが、ここではより汎用性のある history.go( ) にしました。)

反対に、ユーザにブラウザの「戻る」ボタンをクリックしてもらっては困る、という場合もあるかも知れません。 例えば同一ファイルでも、CGIなどによってデータが書き込まれ、ページの内容が更新される場合などです。 データが更新されたら、更新前のページにアクセスされないようにする、という方法はあるでしょうか。

私は以下の方法を考えてみました。これは JavaScript と Cookie を使用します。 例えばページAからBにジャンプしたとき、Bには更新されたデータが書かれているので、Aには戻ってほしくない場合を考えてみます。 古いブラウザでは Cookie を受け付けなくする設定が出来るものもありますが、ここではユーザが Cookie を受け付けることをアクセスの前提としています。 AからBにジャンプするとき、Cookie を受け取るようにするのです。ページAの設定を次のようにします。 まずAのヘッダー部分に

function Check() {
document.cookie="OK";
Jump();
}

function Jump() {
if(document.cookie=="OK") location.href="B.htm";
}

のように2つの関数を定義します。そして BODY タグの中に onLoad="Jump()" と書き加えます。 Aの本文中でBへのリンクを <A href="JavaScript:Check()>Bヘ</A> などとします。 はじめてAにアクセスした人は Cookie に "OK" という文字列を取り込みます。 「Bヘ」をクリックしたとき、既に Cookie には "OK" が入っているので問題なくBにジャンプします。 BからAヘ戻るときはどうでしょうか。Aの onLoad で Cookie がチェックされ、もし "OK" が返されると自動的にBにジャンプしてしまいますので、 Bを読むことは出来なくなるという仕掛けです。「戻る」ボタンだけでなく、履歴や、AのURLを直接入れて戻ろうとした場合も結果は同じです。

このほかにもやり方はあると思います。例えば Cookie を使わず、代わりに referrer というメソッドを利用する方法です。 document.referrer はページのリンク元URLを返すので、もしAのリンク元ページがBだったらBに戻す、というやり方です。 但し、「戻る」ボタンでAに戻った場合にはBはリンク元とはならないので、ユーザがAに戻ること自体を防ぐことは出来ないと思います。




次のトピックは「改行の研究」です。

目次 | ← 前のトピック | ↑ページのトップ | 次のトピック →

ご意見・ご質問がありましたら「ザ・掲示板」またはメールにて梅ちゃん堂まで