2

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

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

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

4

2 回答 2

2

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

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


仅供参考,之所以beforeunload如此严格是因为它必须防止恶意网页滥用,这些网页会阻止您在需要时离开他们的网站。

于 2013-09-27T21:48:19.607 回答
1

正如 jfriend00 提到的那样,您尝试做的事情是不可能的。不过,当他们按下后退按钮时,你最好保持悲观。我的意思是:

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

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

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

于 2013-09-27T22:03:29.297 回答