JavaScript - 当用户确认离开页面时运行代码

时间:2013-09-27 21:43:30

标签: javascript jquery

我希望用户确认他要离开页面。我用jQuery这样做:

$(window).bind('beforeunload', function(){ 
    return "Are you sure?";
});

如果用户说“是”,我想运行一个函数,在浏览器选项卡关闭之前发出一个ajax请求来保存一些数据。这可能吗?在那种情况下如何?

2 个答案:

答案 0 :(得分:2)

你问的是不可能的。 beforeunload不允许您进行自己的提示,然后根据问题的答案进行分支。它只允许您运行代码或返回一个提示字符串,该字符串只是确定用户是否导航离开页面。

在您的特定情况下,我建议您在获得此回调时始终保存数据(如文字处理程序中的自动保存)。如果用户选择留在页面上并进行更多更改,则可以在以后离开页面时再次保存新的数据状态。您必须仔细测试多个浏览器,以确保在beforeunload处理程序中启动的ajax调用将正确完成。看起来应该如此,但浏览器之间可能存在实现差异。


仅供参考,beforeunload如此严格的原因是因为它必须防止恶意网页滥用,以防止您在需要时离开其网站。

答案 1 :(得分:1)

由于jfriend00提到了你想要做的事情,这是不可能的。你最好的选择是按下后退按钮时会感到悲观。我的意思是:

$(window).bind('beforeunload', function(){ 
    $.ajax({
        //Do ajax call to save
    });
    return "Are you sure?";
});

这将做什么希望给你的ajax调用留出时间并通知服务器新数据。我希望因为当您离开页面时浏览器将终止所有请求。

另外要记住的是,当用户强行关闭浏览器时,不会触发此事。