Javascript历史记录返回错误如何删除历史记录

时间:2018-10-24 10:32:32

标签: javascript

我们不能在同一网络浏览器中两次使用window.history.back();

让我们说我曾经在window.history.back()的位置上存储过如何从浏览器中删除它

1 个答案:

答案 0 :(得分:0)

您现在可能已经搬走了,但是...据我所知,无法删除历史记录条目(或状态)。

我一直在研究的一个选项是用JavaScript自己处理历史记录,并将window.history对象用作各种载体。

基本上,页面首次加载时,您将创建自定义历史记录对象(我们将在此处使用数组,但要使用适合您情况的任何东西),然后执行初始pushState。我会将您的自定义历史记录对象作为状态对象传递,因为如果您还需要处理导航离开您的应用程序并稍后返回的用户,它可能会派上用场。

var myHistory = [];

function pageLoad() {
    window.history.pushState(myHistory, "<name>", "<url>");

    //Load page data.
}

现在,在导航时,您可以添加到自己的历史记录对象(或不添加-历史记录现在就在您手中!),并使用replaceState使浏览器脱离循环。

function nav_to_details() {
    myHistory.push("page_im_on_now");
    window.history.replaceState(myHistory, "<name>", "<url>");

    //Load page data.
}

当用户向后导航时,他们将达到“基本”状态(您的状态对象将为null),并且您可以根据您的自定义历史记录对象处理导航。然后,您执行另一个pushState。

function on_popState() {
    // Note that some browsers fire popState on initial load,
    // so you should check your state object and handle things accordingly.
    // (I did not do that in these examples!)

    if (myHistory.length > 0) {
        var pg = myHistory.pop();
        window.history.pushState(myHistory, "<name>", "<url>");

        //Load page data for "pg".
    } else {
        //No "history" - let them exit or keep them in the app.
    }
}

用户将永远无法使用其浏览器按钮向前导航,因为它们始终位于最新页面上。

从浏览器的角度来看,每次他们“后退”时,它们都会立即再次向前推动。

从用户的角度来看,他们能够向后浏览页面,但不能向前导航(基本上是模拟智能手机的“页面堆栈”模型)。

从开发人员的角度来看,您现在可以高度控制用户如何浏览应用程序,同时仍然允许他们使用浏览器上熟悉的导航按钮。您可以根据需要在历史记录链的任何位置添加/删除项目。如果您在历史记录数组中使用对象,则还可以跟踪有关页面的其他信息(例如字段内容和诸如此类)。

您还可以将其扩展为处理向前导航。您将需要3个页面-一个“后退”处理程序页面,一个“前进”处理程序页面以及一个介于它们之间的用户通常位于的“休息”页面。然后,您需要沿历史对象来回移动,而不是简单地推动/弹出项目