2014-04-09 101 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({}, ''); 
     
    }