需要创建javascript确认弹出点击浏览器后退按钮。如果我点击后退按钮弹出将出现,并说“你想继续吗?”如果点击是,那么它会重定向到上一页。
我有下面的代码,它是不是按照要求工作。
if(window.history && history.pushState){ // check for history api support
window.addEventListener('load', function(){
// create history states
history.pushState(-1, null); // back state
history.pushState(0, null); // main state
history.pushState(1, null); // forward state
history.go(-1); // start in main state
this.addEventListener('popstate', function(event, state){
// check history state and fire custom events
if(state = event.state){
event = document.createEvent('Event');
event.initEvent(state > 0 ? 'next' : 'previous', true, true);
this.dispatchEvent(event);
var r = confirm("Would you like to save this draft?");
if(r==true) {
// Do nothing
} else {
self.location = document.referrer;
}
// reset state
history.go(-state);
}
}, false);
}, false);
}
在这方面的任何帮助都将是非常值得赞赏的。
8条答案
按热度按时间sbdsn5lh1#
50few1ms2#
试试这个:它很简单,你可以完全控制后退按钮。
knsnq2tg3#
这对你有帮助。
DEMO
scyqe7ek4#
Robert摩尔的解决方案在刷新页面时导致了重复事件,可能是因为状态会被多次重新添加。
我通过只在状态为null时添加状态来解决这个问题,我还在返回之前清理了侦听器。
MDN对管理状态有很好的理解:https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_pushState()_method
6ss1mwsb5#
当用户试图离开页面时,可以始终显示一个确认框。这也包括按下“后退”按钮。也许这是一个适合您的问题的快速解决方案?
http://jsfiddle.net/squarefoo/8SZBN/1/
6kkfgxo06#
这适用于所有情况,当
1.用户单击“后退”按钮并取消确认。
1.用户再次点击返回按钮并取消确认。
1.用户再次点击后退按钮并点击确定。
1.所以...
polhcujo7#
chri3g91提供的解决方案对我来说是上述解决方案中最好的,但当我在NextJS项目中测试该解决方案时,它出现了一个问题,即后退按钮被永久禁用,因为即使单击
OK
按钮也无法返回,因为它再次创建了一个新的confirm
。我在解决方案中做了一些更改,现在它工作得非常好!
zzlelutf8#
试试这个