恩,以前就知道history api 新加了幾個方法但是沒怎麼研究過,今天碰到了一個小問題,用history完美解決了,很興奮,記錄下
首先說下我遇到的問題場景:
現在有兩個頁面 A,B
A頁面時提交信息頁面 B頁面是結果頁
並且 A,B 頁面是同一個html文件內用 js 模板 動態渲染的,
那麼當結果頁面動態渲染出來以後,每次刷新就會顯示A頁面,其實,我更想顯示B頁面對吧,肯定不想讓用戶再次提交一次,而且大多數情況下我其實並不希望用戶直接進入提交信息頁面的,因爲如果是支付的話,會造成二次支付,
而且在邏輯上也是有錯誤的,我在A頁面刷新,你還應該讓我在A頁面纔對,爲什麼顯示B頁面????
那麼這個時候就是replaceState大顯身手的時候了。
var stateObject = { result: true }; //可以傳遞參數
var title = "Wow Title";
var newUrl = location.href;
history.replaceState(stateObject, '', newUrl);
console.info('history', history);
中間的title 傳空,因爲現在大多數瀏覽器都選擇忽略了它== ,
stateObject 是傳遞的參數
可以用 history.state直接獲取到
那麼這樣事情就變得簡單了,在渲染B頁面的時候替換掉A頁面的連接,其實這個例子中只是傳遞了一個result參數,那麼當頁面刷新的時候只要檢測到result 這個參數爲true 即直接顯示結果頁。而且當用戶點擊瀏覽器回退按鈕的時候也不會再返回到A頁面,避免再次提交。
也許vue react 單頁面應用也可以用這種方式來實現,先記個引子,有時間可以嘗試下。
可能這個例子比較抽象,有時間整個完整的demo
附上 history api 官網說明地址吧