首頁 > web前端 > css教學 > 全面考察「禁用瀏覽器後退」_CSS/HTML

全面考察「禁用瀏覽器後退」_CSS/HTML

WBOY
發布: 2016-05-16 12:10:42
原創
1574 人瀏覽過

瀏覽器的後退按鈕使得我們能夠輕鬆地返回以前訪問過的頁面,它無疑非常有用。但有時候我們必須關閉這個功能,以
防止使用者打亂預定的頁面存取次序。本文介紹網路上可找到的各種停用瀏覽器後退按鈕方案,分析它們各自的優缺點和適
用場合。
一、概述 
   曾經有許多人問起,“怎樣才能'禁用'瀏覽器的後退按鈕?”,或者“怎樣才能防止用戶點擊後退按鈕返回以前和
覽過的頁面? 「在ASP論壇上,這個問題也是問得最多的問題之一。遺憾的是,答案非常簡單:我們無法停用瀏覽器的後退
按鈕。 
   起先我對居然有人想要停用瀏覽器的後退按鈕感到不可思議。後來,看到竟然有那麼多的人想要禁用這個後退按
鈕,我也就釋然(想要禁用的只有後退按鈕,不包括瀏覽器的前進按鈕)。因為在預設情況下,使用者提交表單之後可以通
過後退按鈕返回表單頁面(而不是使用「編輯」按鈕!),然後再次編輯並提交表單將新的記錄插入資料庫。這是我們不
願看到的。 
   因此我就決定要找出避免這種情況的方法。我造訪了許多網站,參考了這些網站所介紹的各種實作方法。如果你
經常造訪ASP程式設計網站,本文所介紹的部分內容你可能已經看過。本文的任務是把各種可能的方法都介紹給大家,然後找
出最好的方法! 
二、禁止快取 
   在我找到的許多方案中,其中有一種建議禁止頁面快取。具體是使用伺服器端腳本,如下圖所示: 
Response.Buffer = True 
Response.ExpiresAbsolute = Now() - 1  Reache. = "no-cache" 
%> 
   這種方法非常有效!它強制瀏覽器重新訪問伺服器下載頁面,而不是從快取讀取頁面。使用這種方法時,程式設計者的主
要任務是建立一個會話層級的變量,透過這個變數確定使用者是否仍舊可以查看那個不適合透過後退按鈕訪問的頁面。由於瀏
覽器不再快取這個頁面,當使用者點擊後退按鈕時瀏覽器將重新下載該頁面,此時程式就可以檢查那個會話變量,看看是否
應該允許使用者開啟這個頁面。
   例如,假設我們有以下表單: 
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; 以下開始建立表單 
%> 

 
 
 

("FirstTimeToPage")包含某個值),那麼我們就清除會話變數的值,然後把使用者重新導向到一個開始頁面。這樣,當表單
提交時(此時SompePage.asp被開啟),我們必須賦予FirstTimeToPage一個值。即,在SomePage.asp中我們需要加上下面
的程式碼: 
Session("FirstTimeToPage") = "NO" 
   這樣,已經開啟SomePage.asp的使用者如果點擊後退按鈕,瀏覽器將重新請求伺服器下載頁面,伺服器檢查到Session
("FirstTimeToPage")包含了一個值,於是就清除Session("FirstTimeToPage"),並把使用者重新導向到其他頁面。當然,所有
這一切都需要使用者啟用了Cookie,否則會話變數將是無效的。(有關此問題的更多說明,請參閱For session variables 
to work, must the Web visitor have cookies enabled?) 

 

 
 
 
 
Web頁面,必須注意以下幾點: 
只有在使用安全連線時「Pragma: no-cache」才防止瀏覽器快取頁面。對於不受安全保護的頁面,「Pragma: no-cache」
被視為與「Expires: -1」相同,此時瀏覽器仍舊快取頁面,但標記頁面立即過期。 
在IE 4或5中,「Cache-Control」META HTTP-EQUIV標記將被忽略,且無法運作。 
   在實際應用中我們可以加上所有這些程式碼。然而,由於這種方法不能適用於所有的瀏覽器,所以是不建議使用的。但
如果是在Intranet環境下,管理員可以控制使用者使用哪種瀏覽器,我想還是有人會使用這種方法。 
三、其他方法 
   接下來我們要討論的方法以後退按鈕本身為中心,而不是瀏覽器快取。這裡有一篇文章Rewiring the Back Button很
值得參考。不過我注意到,如果使用這種方法,雖然使用者點擊一下後退按鈕時他不會看到以前輸入資料的頁面,但只要點
擊兩次就可以,這可不是我們希望的效果,因為很多時候,固執的使用者總是能夠找到繞過預防措施的方法。 
   另一個停用後退按鈕的方法是用客戶端JavaScript開啟一個沒有工具列的窗口,這使得使用者很難回到前一頁面,但
不是不可能。一種更安全但相當惱人的方法是,當表單提交時打開一個新的窗口,同時關閉表單所在的窗口。但我覺
得這種方法不值得認真考慮,因為我們總是無法讓使用者每提交一個表單就開啟一個新視窗。 
   那麼,在那個我們不想讓使用者回傳的頁面是否也可以加入JavaScript程式碼呢?在這個頁面中加入的JavaScript程式碼可
用來產生點擊前進按鈕的效果,這樣也就抵消了使用者點擊後退按鈕所產生的動作。用來實現此功能的JavaScript程式碼如下
所示: 

 
   同樣地,這種方法雖然有效,但距離「最好的方法」還差得很遠。後來我又看到有人建議用location.replace從一個
頁面轉到另一個頁面。這種方法的原理是,用新頁面的URL取代目前的歷史紀錄,這樣瀏覽歷史記錄中就只有一個頁面,後
退按鈕永遠不會變成可用。我想這可能正是許多人所尋求的方法,但這種方法仍舊不是任何情況下的最佳方法。使用此
方法的實例如下所示: 
event.returnValue=false; ">
禁止後退到本頁的連結
 
   試試下面這個連結: 
   禁止後退到本頁的連結!
   這個方法的缺點是:單純運用Response.Redirect將不再有效,這是因為每次使用者從一個頁面轉到另一個頁面,
我們都必須用客戶端程式碼清除location.history 。另外也要注意,這種方法清除的是最後一個存取歷史記錄,而不是全部
的存取記錄。 
   點擊上面的鏈接,你將打開一個簡單的HTML頁面。再點選後退按鈕,你可以看到此時開啟的不是本頁面,而是本頁
之前的頁面! (當然,你必須在瀏覽器中啟用了客戶端JavaScript代碼。) 
   經過一番仔細的尋尋覓食之後,我發現仍舊無法找出真正能夠完全禁用瀏覽器後退按鈕的辦法。這裡介紹的所有方法
都能夠在不同程度上、以不同的方式禁止使用者返回前一頁面,但它們都有各自的限制。由於不存在能夠完全停用後退按鈕
的方法,所以最好的方案應該是:混合運用客戶端腳本和伺服器端腳本。

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板