2010年2月26日 星期五

window.location.href和window.location.replace的區別,以acer網站為例

有3個jsp頁面(1.jsp, 2.jsp, 3.jsp),進系統默認的是1.jsp ,當我進入2.jsp的時候, 2.jsp裡面用window.location.replace("3.jsp");與用window.location.href("3.jsp");從用戶界面來看是沒有什麼區別的,但是當3.jsp頁面有一個「返回」按鈕,調用window.history.go(-1);wondow.history.back();方法的時候,一點這個返回按鈕就要返回2.jsp頁面的話,區別就出來了。

當用window.location.replace("3.jsp");連到3.jsp頁面的話,3.jsp頁面中的調用window.history.go(-1);wondow.history.back();方法是不好用的,會返回到1.jsp 。

當用window.location.href("3.jsp");連到3.jsp頁面的話,3.jsp頁面中的調用window.history.go(-1);wondow.history.back();方法是好用的,會返回2.jsp。

因為window.location.replace("3.jsp");是不向服務器發送請求的跳轉,而window.history.go(-1);wondow.history.back();方法是根據服務器記錄的請求決定該跳到哪個頁面的,所以會跳到系統默認頁面1.jsp 。

window.location.href("3.jsp");是向服務器發送請求的跳轉,window.history.go(-1); wondow.history.back();方法是根據服務器記錄的請求決定該跳到哪個頁面的,所以就可以返回到2.jsp。

以上參考window.location.href和window.location.replace的区别

以上簡單的說,如果使用window.location.replace,使用瀏覽器上一頁的按鈕,是不會回到呼叫window.location.replace的那個頁面,而是回到window.location.replace呼叫前的那個頁面。這個運用在跳頁選單中,每按一次下拉式選單,就會使用window.location.replace跳到一個新頁面(事實上是同一個頁面,只是傳值不同而已),如果用window.location.href來做,那麼如果你很頻繁的使用跳頁選單來查詢,那麼當你按上一頁時,看起來都會是回到同一個頁面,如果使用window.location.replace的話,那麼按上一頁,看起來才像是回到上個頁面中。

如果不能體會的話,看看acer網站的例子
http://www.acer.com.tw/acer/service.do?LanguageISOCtxParam=zh&miu10einu24.current.attN2B2F2EEF=3212&sp=page15e&ctx2.c2att1=238&miu10ekcond13.attN2B2F2EEF=3212&CountryISOCtxParam=TW&ctx1g.c2att92=917&ctx1.att21k=1&CRC=4153026338

你可以查詢acer產品的下載檔案,無論您使用跳頁選單,如何多次查詢(每次查詢,事實上都產生一個新頁面),當按回上一頁時,都能跳出acer的網站,回到您進到此網站的前一個頁面。這就是使用window.location.replace的效果。