ホームページ > 記事 > ウェブフロントエンド > 「ブラウザバック無効化」徹底検証_CSS/HTML
瀏覽器的後退按鈕使得我們能夠輕鬆地返回以前訪問過的頁面,它無疑非常有用。但有時候我們必須關閉這個功能,以 ("FirstTimeToPage")包含某個值),那麼我們就清除會話變數的值,然後把使用者重新導向到一個開始頁面。這樣,當表單
防止使用者打亂預定的頁面存取次序。本文介紹網路上可找到的各種停用瀏覽器後退按鈕方案,分析它們各自的優缺點和適
用場合。
一、概述
曾經有許多人問起,“怎樣才能'禁用'瀏覽器的後退按鈕?”,或者“怎樣才能防止用戶點擊後退按鈕返回以前和
覽過的頁面? 「在ASP論壇上,這個問題也是問得最多的問題之一。遺憾的是,答案非常簡單:我們無法停用瀏覽器的後退
按鈕。
起先我對居然有人想要停用瀏覽器的後退按鈕感到不可思議。後來,看到竟然有那麼多的人想要禁用這個後退按
鈕,我也就釋然(想要禁用的只有後退按鈕,不包括瀏覽器的前進按鈕)。因為在預設情況下,使用者提交表單之後可以通
過後退按鈕返回表單頁面(而不是使用「編輯」按鈕!),然後再次編輯並提交表單將新的記錄插入資料庫。這是我們不
願看到的。
因此我就決定要找出避免這種情況的方法。我造訪了許多網站,參考了這些網站所介紹的各種實作方法。如果你
經常造訪ASP程式設計網站,本文所介紹的部分內容你可能已經看過。本文的任務是把各種可能的方法都介紹給大家,然後找
出最好的方法!
二、禁止快取
在我找到的許多方案中,其中有一種建議禁止頁面快取。具體是使用伺服器端腳本,如下圖所示:
Response.Buffer = True
Response.ExpiresAbsolute = Now() - 1
%>
這種方法非常有效!它強制瀏覽器重新訪問伺服器下載頁面,而不是從快取讀取頁面。使用這種方法時,程式設計者的主
要任務是建立一個會話層級的變量,透過這個變數確定使用者是否仍舊可以查看那個不適合透過後退按鈕訪問的頁面。由於瀏
覽器不再快取這個頁面,當使用者點擊後退按鈕時瀏覽器將重新下載該頁面,此時程式就可以檢查那個會話變量,看看是否
應該允許使用者開啟這個頁面。
例如,假設我們有以下表單:
Response.Buffer = True
Response.ExpiresAbsolute =ExNow()) .CacheControl = "no-cache" If Len(Session("FirstTimeToPage")) > 0 then
&single; 使用者已造訪目前頁面,現在是再次返回造訪。
&single; 清除會話變量,將使用者重新導向至登入頁面。
Session("FirstTimeToPage") = ""
Response.Redirect "/Bar.asp"
Response.End
End If
Response.End
End If
Response.End
End If
&ingles;目前頁面
&single; 以下開始建立表單
%>
提交時(此時SompePage.asp被開啟),我們必須賦予FirstTimeToPage一個值。即,在SomePage.asp中我們需要加上下面
的程式碼:
Session("FirstTimeToPage") = "NO"
這樣,已經開啟SomePage.asp的使用者如果點擊後退按鈕,瀏覽器將重新請求伺服器下載頁面,伺服器檢查到Session
("FirstTimeToPage")包含了一個值,於是就清除Session("FirstTimeToPage"),並把使用者重新導向到其他頁面。當然,所有
這一切都需要使用者啟用了Cookie,否則會話變數將是無效的。(この問題の詳細については、「セッション変数
が機能するには、Web 訪問者は Cookie を有効にする必要がありますか?」を参照してください。)
さらに、クライアント側のコードを使用して、ブラウザが Web ページをキャッシュしないようにすることもできます。
上記の方法を使用してブラウザに強制的にキャッシュしなくなりました Web ページの場合は、次の点に注意する必要があります:
「Pragma: no-cache」は、安全な接続を使用している場合にのみ、ブラウザーがページをキャッシュしないようにします。セキュリティで保護されていないページの場合、「Pragma: no-cache」
は「Expires: -1」と同じように扱われますが、この時点でもブラウザーはページをキャッシュしますが、ページに即時に期限切れとしてマークを付けます。
IE 4 または 5 では、「Cache-Control」META HTTP-EQUIV タグは無視され、効果がありません。
実際のアプリケーションでは、これらすべてのコードを追加できます。ただし、この方法はすべてのブラウザで機能するわけではないため、お勧めできません。しかし、
イントラネット環境で、ユーザーが使用するブラウザを管理者が制御できる場合は、依然としてこの方法を使用する人もいると思います。
3. その他の方法
次に説明する方法は、ブラウザのキャッシュではなく、戻るボタン自体を中心に説明します。こちらの記事「戻るボタンの再配線」
を参照する価値があります。ただし、この方法を使用すると、ユーザーは [戻る] ボタンをクリックしたときに以前にデータを入力したページは表示されませんが、
を 2 回クリックするだけで済みます。これは私たちが望む効果ではないことに気付きました。多くの場合、頑固なユーザーは予防措置を回避する方法を見つけることができます。
戻るボタンを無効にするもう 1 つの方法は、クライアント側 JavaScript を使用してツールバーなしでウィンドウを開くことです。これにより、ユーザーは前のページに戻ることが困難になりますが、
不可能ではありません。より安全ですが、やや面倒な方法は、フォームの送信時に新しいウィンドウを開き、同時にフォームが配置されているウィンドウを閉じることです。しかし、
この方法は真剣に検討する価値がないと感じています。ユーザーがフォームを送信するたびに新しいウィンドウを開かせるわけにはいかないからです。
では、ユーザーに戻ってほしくないページに JavaScript コードを追加することもできるのでしょうか?このページに追加された JavaScript コード
を使用して、「進む」ボタンをクリックした効果を生成し、ユーザーが「戻る」ボタンをクリックしたことによって引き起こされるアクションを無効にすることができます。この関数の実装に使用される JavaScript コードは次のとおりです。
:
繰り返しますが、この方法は効果的ですが、まだ「最良の方法」には程遠いです。その後、ある
ページから別のページに移動するために location.replace を使用することを提案している人を見かけました。この方法の原理は、現在の履歴レコードを新しいページの URL に置き換えることです。これにより、閲覧履歴には 1 ページだけが残り、
戻るボタンは決して使用できなくなります。おそらくこれは多くの人が求めているものだと思いますが、それでもすべての状況において最善のアプローチであるとは限りません。この
メソッドの使用例は次のとおりです: このページへのリンクを無効にします
このリンクをお試しください:
このページへのリンクを無効にします。
このアプローチの欠点は、ユーザーがあるページから別のページに移動するたびに
クライアント コードで location.history をクリアする必要があるため、単に Response.Redirect を使用するだけでは機能しなくなることです。また、このメソッドはすべての
アクセス レコードではなく、最後のアクセス履歴レコードをクリアすることにも注意してください。
上のリンクをクリックすると、単純な HTML ページが開きます。もう一度戻るボタンをクリックすると、このページではなく、このページの前のページ
が開かれていることがわかります。 (もちろん、ブラウザでクライアント側の JavaScript コードを有効にする必要があります。)
慎重に検索した結果、ブラウザの「戻る」ボタンを完全に無効にする方法がまだ見つからないことがわかりました。ここで説明するすべてのメソッド
は、さまざまな程度およびさまざまな方法でユーザーが前のページに戻るのを防ぐことができますが、それぞれに独自の制限があります。 [戻る] ボタン <script> <BR><!-- <BR>javascript:window.history.forward(1); <BR>//--> <BR></script> を完全に無効にする方法はないため、最善の解決策は、クライアント側スクリプトとサーバー側スクリプトを組み合わせて使用することです。