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

JavaScript - Run code when user confirms leaving page

本文关键字:运行 代码 离开 用户 确认 JavaScript      更新时间:2023-09-26

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

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

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

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

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


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

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

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

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

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