ブラウザでの“戻る”,“進む”ボタンの無効化?

[上に] [前に] [次に]
[E-Mail] 2000/03/23(木) 17:19:25
過去にもこのような問題点は出ており,調べたのですがどうも
求めている回答と違うような気がしてもう一度質問してみました。

問題点は,ブラウザ上の“戻る”,“進む”ボタンの無効化についてです。

きっと,この質問に対しそのようなページはいやだと言われる方はおられると
思います。が,あやしいページを作成しようとするのではありません。
ただ,戻るボタンを押下されると,サーバでの処理において
前画面と次画面とでデータの整合が取れなくなってしまい
ミドルウエアにおいてエラーがでてしまうのです。

過去の質問にて検索をしたのですが,
<BODY onUnload=""> 画面遷移する時の処理ですが,前画面の情報を消すには?
location.replace ブラウザの戻るボタンの無効化???
と解決策は挙がっているのですが,実際どのようにして使えば
ブラウザ上の戻るボタンが無効となるのか教えていただけないでしょうか?
はっきりいうと,ブラウザの戻る,次へボタンの押下をできなくしたい
(ブラウザを最初に立ち上げた状態)のです。
よいアドバイスお願いします。

びーだま [E-Mail] 2000/03/23(木) 17:36:24
> ブラウザの戻る,次へボタンの押下をできなくしたい

これが出来ないことので、代替手段をみなさん考えて下さっている
のだと思います。

サーバーでの整合を気にするのであれば、おそらく、ボタンを押さ
れ無いようにしても、途中で接続を切ってしまった。途中でブラウザ
が落ちてしまった。あるいは、ブラウザの情報をコピーしながら進んだ。
などの原因がその不整合と同じような症状をもたらすと思われます。

たぶん、ご心配されている問題の元を絶つには、もう少しサーバー
よりのレベルでの対応が必要だと思います。

ひみつ 2000/03/23(木) 18:06:21
>はっきりいうと,ブラウザの戻る,次へボタンの押下をできなくしたい
>(ブラウザを最初に立ち上げた状態)のです。
>よいアドバイスお願いします。
いっそのこと、VBとかでブラウザの型だけ作り変えてしまったほうが
良いかもしれません。それをクライアントには使ってもらうという。
これでもショートカットは有効なので、それに関してはJavaScriptで
妨害すれば良いかと思います。

峠の走り屋 2000/03/23(木) 19:41:58
あくまでも質問者さんの作成されるサイト内に限って「戻る」「進む」ボ
タンが無効になるのでよければ・・・

すべての画面遷移をJavaScriptのlocation.replace()で行ってはどうでしょうか。
つまり、JavaScriptのlocation.hrefや、<A HREF>は一切使わないで。
location.replace()はキャッシュに読まずに画面遷移ができるので、実質的に
ボタンは無効にできますよ。location.replace()は以下のように書きます。

parent.フレーム名.location.replace("http://〜");

フレーム名はフレームを使ってなければ省略できたと思います(私はフレーム
使う方法しかやったことないので・・・申し訳ないですが)。なお、同一サー
バー内であれば「http://〜」は省略できます(パスとファイル名だけでよい)。
あと、注意点としてはlocation.hrefが

location.href="http://〜"

と記述するのに対し、location.replace()は

location.replace("http://〜")

とURLを()でくくる必要があるってコトですね。

余談ですが、私がASPでデータベースにアクセスするサイトを作っていたとき、
画面遷移の際にキャッシュのデータを読み込んでしまい、新しいデータベースの
情報を読んでくれなくて困っていましたが(キャッシュの無効化設定ってIEに
はない・・・よね?)、location.replace()に切り替えたところ必ずデータベー
ス(サーバー)を読みにいくようになり助かったことがあります。

ただし、location.replace()には以下の欠点(というか注意点)があります。
・NN3、IE4以降の対応です。
・<FORM>+submitボタンでなにかの転送ついでに画面遷移、なんて処理が入ると
 そこだけはキャッシュに読みこまれてしまいます。
・キャッシュに読みこまれないのはlocation.replace()で画面遷移を行っている
 うちだけなので、その前後にどこかのサイトを読みこんでいた場合はボタンが
 有効になってしまいます。例えば質問者さんのサイトの前にMicrosoftのサイト
 を読みこんでいた場合、質問者さんのサイト内は「戻る」ボタンが無効になり
 ますが、Microsoftのサイトには戻ってしまいます(完全に無効化ってのは無
 理だと思います)。

・・・ただ、最後のは余計なサイトを読みこまなければいいことですが。ブラウ
ザ立ち上げて、それ以降はlocation.replace()で画面遷移を続ける、他のサイトは
読まない!というのであれば「戻る」「進む」ボタンは無効のままになります。

以上の方法はいかがですか?

チャペル 2000/03/23(木) 20:41:34
ToolBar無しのウィンドウを新しく開いて、そこに表示するとかでは、だめでしょうか?

びーだま [E-Mail] 2000/03/23(木) 23:42:53
>ToolBar無しのウィンドウを新しく開いて、そこに表示するとかでは、だめでしょうか?

それだと、右クリックなどで、戻ったり進んだり出来てしまうのです。

2000/03/24(金) 00:15:29
右クリック禁止?あたりから
../199809/98090039.htm
../199812/98120010.htm
../199907/99070296.htm
などが参考になると。

Syn [E-Mail] 2000/03/24(金) 00:34:57
びーだまさんのご意見がもっとも的を射ているのですが…
もしナビゲーション操作を禁止させたいなら、 Alt + ←/→ 、
Backspace も禁止しないと。

それよりはミドルウェアに用意されているセッション/トランザク
ション管理機能を使うのが吉かと。

びーだま [E-Mail] 2000/03/24(金) 23:51:34
クライアントサーバーシステムにおいては、クライアント
の振る舞いを過信てはいけないことがは重要な基本なんです。

特に、Webクライアント(あるいはエミュレータ)を作ること
なんてサーバークライアントシステムの中では割合簡単な
部類ですから、クライアントのイレギュラーなアクセスなんて
いつでもあり得ることなんです。

根本的に、クライアントをいくら制御しても駄目ってことです。
ということで、私も、Syn さんのミドルウェアの管理機構を
使うご意見に1票です。

ミドルウェアがトランザクション機構を持っていないもの
ならば、持っている物にするかクライアントとミドルウェア
間に置くCGIなどで、Cookie を使った簡単なトランザクション
機構をつくってやるとかするのがいいでしょうね。

[上に] [前に] [次に]