Javascript pushState()在卸载前不工作,popState()在加载时不工作,历史API

Javascript pushState()在卸载前不工作,popState()在加载时不工作,历史API,javascript,jquery,html,browser-history,Javascript,Jquery,Html,Browser History,我有一个网站。主页由各种内容部分组成,单击某些按钮时,这些内容部分会淡入淡出。我只想在用户点击页面时推送包含相关状态信息的两个重要对象的状态。这样,当它们返回时,将显示正确的内容并突出显示正确的按钮。在页面卸载之前,我会这样做: window.addEventListener("beforeunload", function () { history.pushState(nodeContainer, '', currNode.contentId); his

我有一个网站。主页由各种内容部分组成,单击某些按钮时,这些内容部分会淡入淡出。我只想在用户点击页面时推送包含相关状态信息的两个重要对象的状态。这样,当它们返回时,将显示正确的内容并突出显示正确的按钮。在页面卸载之前,我会这样做:

    window.addEventListener("beforeunload", function () {
        history.pushState(nodeContainer, '', currNode.contentId);
        history.pushState(currNode, '', currNode.contentId);
      return;
    });
当页面重新加载时,我调用popstate方法,如下所示:

    window.addEventListener('popstate', function(e) {
        console.log('Event ', e);
    });

然而,这是行不通的。popstate方法仅在两次单击返回空状态对象的后退时调用。我知道类似的问题,所以我做了研究。没有帮助。

beforeUnload将只处理同步请求。您需要找到阻止事件循环的方法。我过去曾使用此功能向服务器发送同步请求,检查用户是否正在下载文件,并警告他们离开将停止下载

如果浏览器认为代码可能导致弹出,那么它也有可能忽略代码

更多信息请点击这里

因此,我能够将pushState函数移动到另一个逻辑位置,但仍会遇到背面的页面刷新,需要再次按page back键才能获得popstate(已成功存储对象)。我确定您此时正在做什么。您是否关闭页面,然后重新打开,然后尝试使用相同的html状态?推送状态对于单页应用程序来说非常强大,您只需加载index.html一次。我需要做的是在导航到子页面(不同的html文件)之前保留对象的状态,以便在导航回它时(通过单击“上一步”),可以重置它。