HTML5 pushstate并替换状态重新加载状态

时间:2016-02-29 14:14:40

标签: jquery html5 pushstate

我最难解决这个问题。

基本上我有一个弹出窗口,当点击它时会将状态推送到url栏:

$(document).on('click', '.youtube_video', function(){
    window.history.pushState("vidPage", "vidPopped", "/video/"+video_id +"");
});

这很好用。现在,当我单击退出弹出窗口时,它会返回上一个链接(当前页面),如下所示:

$(document).on('click', '.popblock_box_exit', function(){
    window.history.back();
});

这很好用。现在,当我使用浏览器按钮继续前进时,它会通过以下方式加载点击弹出窗口:

window.onpopstate = function(e){
    if(e.state !== null) {
        $("#"+ popID).trigger( "click" );
    }
};

这很好用,但现在当我点击退出弹出窗口时,它只是重新加载弹出窗口。我知道e.state永远不会为null,因为我使用" history.back",因此当点击退出时它只是加载触发器。

如何阻止此弹出窗口不断重新加载?

谢谢!

1 个答案:

答案 0 :(得分:1)

您应该检查4 3 2 1 处理程序中的状态是"vidPage"。如果先前的历史条目包含非空的内容,则它将显示弹出窗口。

尝试onpopstate,以便了解该历史记录条目中的状态。

编辑:

我认为问题可能是当您单击“前进”按钮时,它会触发点击,它会在历史记录中插入另一个条目,因此会有两个 {{ 1}}条目。如果长按后退按钮,您可能会看到一个额外的条目。这里有一些人为的代码来证明这一点。

console.log('state:', e.state)

GOOD 替换为 BAD 以重现问题。