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

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

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

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

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

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


仅供参考,因为它必须防止恶意网页滥用,以防止您在需要时离开其网站。

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

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

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

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