history.go和History.back的區別
Javascript:history.go()和history.back()的用法和區別
簡單的說就是:go(-1): 返回上一頁,原頁面表單中的內容會丟失;back(): 返回上一頁,原頁表表單中的內容會保留。
history.go(-1):后退+刷新
history.back():后退
之所以注意到這個區別,是因為不同的瀏覽器的后退行為也是有區別的,而區別就跟Javascript:history.go()和history.back()的區別類似。
chrome和ff瀏覽器后退頁面,會刷新后退的頁面,若有數據請求也會提交數據申請。類似于
history.go(-1)
而safari(包括桌面版和ipad版本)的后退按鈕則不會刷新頁面,也不會提交數據申請。類似于
Javascript:history.back()。
history.go和History.back的區別
history.back(-1): 直接返回當前頁的上一頁,數據全部消息,是個新頁面
history.go(-1): 也是返回當前頁的上一頁,不過表單里的數據全部還在
history.back(0) 刷新 history.back(1) 前進 history.back(-1) 后退,望采納,謝謝。
history.go和History.back的區別
Javascript中的history對象
其中history.back()方法用于返回前一個瀏覽的頁面
而history,go()則可以轉到history中的任何頁面,且是相對于當前瀏覽頁面而言的。
例如:返回前一頁history.go(-1),這時它等價于history.back()
前往下一頁history.go(1),這時它等價于history.forward()
history.go和History.back的區別及應用
history.go()和History.back()的區別及應用
分類: javascript
< input type=button value=刷新 onclick="window.location.reload()" >
< input type=button value=前進 onclick="window.history.go(1)" >
< input type=button value=后退 onclick="window.history.go(-1)" >
< input type=button value=前進 onclick="window.history.forward()" >
< input type=button value=后退 onclick="window.history.back()" > 后退+刷新< input type=button value=后退 onclick="window.history.go(-1);window.location.reload()" >
JSP 返回上一頁的幾種方法
1. < a href="javascript:history.back(-1)">返回上一頁
2. < a href="javascript:;" onClick="javascript:history.back(-1);">返回上一頁
3.如果是用按鈕做的話就是:
< input type="button" name="Submit" onclick="javascript:history.back(-1);" value="返回上一頁">
4.用圖片做的話就是:
< a href="javascript :;" onClick="javascript :history.back(-1);">< img src="圖片路徑" border="0" title="返回上一頁">< /a>
5.< a href="javascript:history.go(-1);">向上一頁< /a>, 返回兩個頁面: history.go(-2);
頁面跳轉:onclick="window.location.href='list.php'"
6.用js實現頁面自動返回到上一頁
幾秒鐘后自動返回上一頁代碼:(加入兩個head間,3000表示3秒)
< script type="text/javascript">tTimeout("history.go(-1)", 3000); < /script>
< SCRIPT language=javascript>
function go()
{ window.history.go(-1);}
tTimeout("go()",3000);
< /SCRIPT>
Javascript 返回上一頁
1. Javascript 返回上一頁 history.go(-1), 返回兩個頁面: history.go(-2);
2. history.back().
3. window.history.forward()返回下一頁
4. window.history.go(返回第幾頁,也可以使用訪問過的URL)
JavaScript:history.go() 的妙用
在Web開發中,會遇到從一頁(父頁)導向另一頁(子頁),并且要求“返回”父頁的情況,在這里如果用ASP.NET提供的Respon.Redirect()方法,往往不會達到理想的效果,例如:返回后,重新加載了頁面,無法保存導向子頁前的狀態,等等,在這里我就介紹一下如何使用JavaScript中history.go()函數來實現返回功能并且保存住狀態的方法。
這個函數用起來很簡單,只要在頁面上加一個html的input元素,例如:
< input type="button" value="返回">
然后再為這個元素添加onclick屬性,如:
< input type="button" value="返回" onclick="history.go(-1);">
這樣就能達到返回上一頁的效果。但是,往往在實踐中,并沒有這么簡單,當你在向服務器提交請求的時候,引起頁面回發,你再用history.go(-1)這招就不靈啦,它在這里是返回你回發前的狀態,go后面的參數,實際上就是標識你要返回你回發第前n次的狀態,所以只要能記住回發了幾次,就能用history.go(-n)準確地返回到父頁了。
在Web開發中,全局變量也是存不住的,當頁面回發后,全局變量的值就會丟失,取而代之的是視圖狀態,所以我們就只能用視圖狀態來記錄回發的次數了。那么就封裝一個視圖狀態屬性把。
public int returnCount
{ get{ if(ViewState["returnCount"] == null)
ViewState["returnCount"] = 0;
return (int)ViewState["returnCount"]; }
t { ViewState["returnCount"] = value ;} }
定義好這個后,把他放到Page_Load里面,讓他每次在頁面回發時減1,這樣就能準確的記住回發了幾次。
protected void Page_Load(object nder, EventArgs e)
{ returnCount--; //要放在!iIsPostBack之外,要不然就僅僅在頁面第一次加載時執行一次,回發時就不執行了。
if(!IsPostBack)
{ } }
吼吼,到這一步還沒完呢,要把我們封裝的屬性加到Js里面。如下:
< input type="button" value="返回" onclick="history.go('< % =returnCount % >');" >
這下就完美了,管你在頁面上怎么回發,只要一點這個按鈕,肯定會返回到父業的。
注意:
1、如果在本頁面上有Respon.Redirect()到本頁或者類似的情況,那么就要將returnCount作為查詢字符串傳遞一下了,因為這東西在頁面失效時就over了。
2、本文僅對非Ajax的Web系統有作用,Ajax的還沒仔細研究過
javascript:history.go(-1)返回上一頁時,網頁已過期
通常出現網頁過期提示都是因為之前發生表單post,對于這種請求方式,瀏覽器會認為返回的顯示內容與提交的數據有關,除非你再次提交數據,否則無法顯示。而如果改用get方式提交數據,在IE中,會默認對同一url的get操作,返回的內容相同。
出現這種情況我想是因為你的a.jsp是通過之前的post操作顯示出來的吧,嘗試改成get。如果在詳單頁面中存在對于數據的更改,在返回時最好不要使用history導航的方式,瀏覽器是不會去服務器端拿數據的,最好是將url帶過來吧,用根據url控制瀏覽器跳轉,get方式在最后記得加上隨機時間戳,不然有可能出現數據不更新的情況。
解決辦法:首先試試back()或go(-2),若依然不行,則取消禁用頁面緩存的限制
ssion_cache_limiter('private,must-revalidate');
作用:當ssion_cache_limiter('private')時,用處是讓表單history.go(-1)的時候,填寫內容不丟失。
go(-2)后再forward(1).
為什么我在點擊瀏覽器的后退按鈕后,所有字段的信息都被清空了
答:這是由于你在你的表單提交頁面中使用了 ssion_start 函數。
因為我們后退瀏覽的是緩存頁,而該函數會強制當前頁面不被緩存。所以出現了’警告: 網頁已經過期!’.
這些信息,而我們不得不刷新下才能正確顯示,對于一個程序人員來說有可能無所謂,但是對于一個internet網上的一個顧客來說,看到該頁面,他有可能關閉該頁面,而不會去查看這些信息!
還有一個原因就是當一個網站流量比較大的時候,緩存是我們程序人員最好的工具,如果失去了這把工具,那么你所在的虛擬服務器必將受到考驗!
解決辦法為,
1、不使用ssion_start()函數。
2、在你的 Session_start 函數后加入 header("Cache-control: private"); 注意在本行之前你的PHP程序不能有任何輸出。
還有基于ssion的解決方法,在ssion_start前加上
ssion_cache_limiter('nocache');// 清空表單
ssion_cache_limiter('private'); //不清空表單,只在ssion生效期間
ssion_cache_limiter('public'); //不清空表單,如同沒使用ssion一般
在開發過程中,往往因為表單出錯而返回頁面的時候填寫的信息都不見了,為了支持頁面回跳,可以通過兩種方法實現。
第一,使用Header方法設置消息頭Cache-control
引用:
header(’Cache-control: private, must-revalidate’); //支持頁面回跳
第二,使用ssion_cache_limiter方法
ssion_cache_limiter('private, must-revalidate'); //注意要寫在ssion_start方法之前
< meta http-equiv="Cache-Control" CONTENT="private,must-revalidate">
火狐中很奇怪的history.go(-n)的問題
您好!很高興為您答疑。
因為iframe 中鑲嵌的是一個個網頁實例,您在一個頁面鑲入多個iframe時,其效果相當于將多個頁面放在一起展示,而您這時候執行history.go(-1),根據該事件的載體位置不同,其作用域是不同的。在父框架下,就是全局有效,在子頁面下就是本頁面有效。
至于解決方案,第一、在ajax框架如此發達的當今,還在一個功能頁面鑲嵌那么多iframe本就不妥,還牽涉到了跨域問題,以后盡量避免;第二、在不想對現有結構大改的情況下,用記錄reffer的方式,直接訪問上一次的地址,達到回退的效果,但是此模式下在從緩存還是現網實際獲取存在差別。此法是重新發起訪問請求,之前的方式實際是去取緩存。
如果對我們的回答存在任何疑問,歡迎繼續問詢。