我最难解决这个问题。
基本上我有一个弹出窗口,当点击它时会将状态推送到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",因此当点击退出时它只是加载触发器。
如何阻止此弹出窗口不断重新加载?
谢谢!
答案 0 :(得分:1)
您应该检查4
3
2
1
处理程序中的状态是"vidPage"
。如果先前的历史条目包含非空的内容,则它将显示弹出窗口。
尝试onpopstate
,以便了解该历史记录条目中的状态。
编辑:
我认为问题可能是当您单击“前进”按钮时,它会触发点击,它会在历史记录中插入另一个条目,因此会有两个 {{ 1}}条目。如果长按后退按钮,您可能会看到一个额外的条目。这里有一些人为的代码来证明这一点。
console.log('state:', e.state)
将 GOOD 替换为 BAD 以重现问题。