清除pushState在刷新时创建的html历史记录

jcu*_*bic 8 javascript arrays html5 html5-history

我在history.state和popstate中有数组的状态和索引数组我读了数组的内容,它工作正常但是当我回到第一页并刷新数组时(不正常)但是前进历史国家仍然.

是否可以删除使用pushState创建的虚假历史记录?

我无法将我的状态存储在localStorage中,因为我的状态数组中有函数.

Gab*_*oli 9

如果您阅读了pushState的History API规范,则在步骤4中说明

  1. 如果调用的方法是pushState()方法:
    在当前条目之后删除浏览上下文的会话历史记录中的所有条目.如果当前条目是会话历史记录中的最后一个条目,则不会删除任何条目.

因此,根据您要做的事情,您可以为首次加载页面并推送状态(一个您将考虑第一个)时做出特殊情况,并在此过程中清除历史记录的前向状态.

  • 几乎工作,但是当我创建pushState onInit(刷新)时,我有两个历史页面,原始真实页面和来自pushState的假页面.replaceState也不起作用,因为它不清除历史记录只改变当前的历史记录.它并不完美,但可能你不能做得更好. (3认同)

fab*_*aby 5

无法清除会话历史记录或禁用非特权代码的后退/前进导航。最接近的可用解决方案是 location.replace() 方法,该方法用提供的 URL 替换会话历史记录的当前项目。 莫兹拉

唯一的方法就是这个(但我想你知道)

var length=history.length;     
history.go(-length);
window.location.replace("urlToRedirect");
Run Code Online (Sandbox Code Playgroud)

使用replace()后,当前页面将不会保存在会话历史记录中,这意味着用户将无法使用“后退”按钮导航到该页面。


Luk*_*uda 5

我的想法 - 覆盖整个历史:

for (i = 0; i < 50; i++) {
  history.pushState({}, '');
}
Run Code Online (Sandbox Code Playgroud)

  • 无论如何,我的病毒扫描由于“历史注入”而阻止了这种情况,因此它可能不适用于所有客户端。 (4认同)