后退導致的重復提交?
原理:用新頁面的URL替換當前的歷史紀錄,這樣瀏覽歷史記錄中就只有一個頁面,后退按鈕永遠失效。 注:history.go和history.back(包括用戶按瀏覽器歷史前進后退按鈕)觸發, 頁面由于使用pushState修改了history),會觸發popstate事件。 【代碼如下】 注:直接放在不想后退跳轉的頁面即可! 方法一: <script type="text/javascript"> jQuery(document).ready(function ($) { if (window.history && window.history.pushState) { $(window).on('popstate', function () { window.history.forward(1); }); } }); </script> 方法二【推薦】: $(function() { if (window.history && window.history.pushState) { $(window).on('popstate', function () { window.history.pushState('forward', null, '#'); window.history.forward(1); }); } window.history.pushState('forward', null, '#'); //在IE中必須得有這兩行 window.history.forward(1); })其中涉及到的方法詳細介紹:一、window.history:表示window對象的歷史記錄二、 歷史記錄的前進和后退 window. history.forward() --- 此方法加載歷史列表中的下一個 URL,同瀏覽器中點擊向前按鈕; window. history.back() --- 此方法加載歷史列表中的前一個 URL,同瀏覽器中點擊后退按鈕。 可移動到指定歷史記錄點: 通過指定一個相對于當前頁面位置的數值,你可以使用 go() 方法從當前會話的歷史記錄中加載頁面 (當前頁面位置索引值為0,上一頁就是-1,下一頁為1) 如:要后退一頁(相當于調用back()): window.history.go(-1); 向前移動一頁(相當于調用forward()): window.history.go(1); window.history.length: 可以查看length屬性值,可知道歷史記錄棧中共有多少個記錄點。三、操作歷史記錄點 HTML5的新API擴展了window.history,可實現存儲、替換當前歷史記錄點,以及監聽歷史記錄點。 1、存儲、替換當前歷史記錄點 創建當前歷史記錄點pushState(state, title, url):創建(添加)一個新的history實體, state:狀態對象,記錄歷史記錄點的額外對象(要跳轉的URL),可以為空; title:頁面標題,目前所有瀏覽器都不支持; url:可選的url,瀏覽器不會檢查url是否存在,只改變url,url必須同域。 window.history.pushState(json,”",”404 Not Found); 替換當前歷史記錄點replaceState():修改當前的history實體,不會新增。 類似replace(url),要更新當前歷史記錄的狀態對象或URL時,使用replaceState()方法會更合適。 2 、監聽歷史記錄點onpopstate() 當history實體被改變時,popstate事件將會發生; onhashchange()可監聽URL的hash部分。 3、讀取現有state 當頁面加載時,它可能會有一個非空的state對象。當頁面重新加載,頁面將收到onload事件,但不會有popstate事件。 然而,如果你讀取history.state屬性,將在popstate事件發生后得到這個state對象。