2014-04-09 172 views
6

我有history.state和popstate中的數組的狀態和索引數組,它讀取數組的內容,但它工作正常,但是當我回到第一頁並刷新陣列消失了(這是正常的),但是正向歷史狀態保持不變。清除pushState創建的清除歷史記錄

是否可以刪除使用pushState創建的假歷史?

我不能在localStorage中存儲我的狀態,因爲我的狀態數組中有函數。

+0

您可以設置使用pushState的或replaceState在頁面加載一個新狀態,它會刪除前進歷史。 – LawfulHacker

回答

7

如果讀取specification of History API for pushState,在步驟4中它指出

  • 如果該方法調用是pushState()方法:
    在瀏覽上下文的刪除所有條目會話歷史記錄在當前條目之後。如果當前條目是會話歷史記錄中的最後一個條目,則不會刪除條目。
  • 所以這取決於你正在嘗試做的,你都可以成爲首次加載頁面的特殊情況,推動一個國家(一個你會考慮你的第一個),並在這樣做清晰歷史的前沿狀態。

    +2

    幾乎可以工作,但是當我創建pushState onInit(刷新)時,我在歷史中有兩個頁面,原始真實頁面和來自pushState的假頁面。 replaceState也不起作用,因爲它不會清除歷史記錄,只會更改當前的歷史記錄。這並不完美,但可能你做不到更好。 – jcubic

    2

    無法清除會話歷史記錄或禁止從非特權代碼後退/前進導航 。最接近的可用 解決方案是location.replace()方法,它使用提供的URL替換會話歷史記錄的當前 項目。 Mozilla

    的唯一方法是這樣的(但我認爲你知道)

    var length=history.length;  
    history.go(-length); 
    window.location.replace("urlToRedirect"); 
    

    使用替代()當前頁面不會被保存在會話歷史記錄,這意味着用戶以後也不會能夠使用後退按鈕導航到它。

    +0

    但是,用戶可以前進,因爲替換不會刪除前面的歷史記錄。 – modiX

    2

    我的想法 - 覆蓋整個歷史:

    for (i = 0; i < 50; i++) { 
     
        history.pushState({}, ''); 
     
    }