在“onbeforeunload”函数中发出 GET/POST 请求

Posted

技术标签:

【中文标题】在“onbeforeunload”函数中发出 GET/POST 请求【英文标题】:Make a GET/POST request inside 'onbeforeunload' function 【发布时间】:2017-10-08 17:45:21 【问题描述】:

我想在用户离开页面时发出 HTTP POST(甚至 GET 也可以)请求。 我尝试使用“onbeforeunload”“卸载”事件监听器来观察用户何时重定向到其他不同的页面。

有什么方法可以检查用户是否在默认的“onbeforeunload”确认框中单击了“离开”或“留下”按钮? 我只想在他单击“离开”按钮时调用该函数(发出请求)。

我怎样才能做到这一点?

【问题讨论】:

javascript, browsers, window close - send an AJAX request or run a script on window closing的可能重复 您只需要点击unload 事件,该事件仅在用户在onbeforeunload 交互过程中确认离开时触发。您必须使 ajax 调用同步。见this。 【参考方案1】:

你可以试试

window.onunload

功能取决于浏览器

window.onbeforeunload和window.onunload都有,根据浏览器的不同,使用方式不同。Quote from here

【讨论】:

【参考方案2】:

onunload(或 onbeforeunload)无法将用户重定向到另一个页面。这是出于安全原因。

如果您想在用户离开页面之前显示提示,请使用

在卸载前:

window.onbeforeunload = function()
  return 'Are you sure you want to leave?';
;

或者使用 jQuery:

$(window).bind('beforeunload', function()
  return 'Are you sure you want to leave?';
);

这只会询问用户是否要离开页面,如果他们选择留在页面上,您将无法重定向他们。如果他们选择离开,浏览器将转到他们告诉它去的地方。

您可以在页面卸载之前使用 onunload 执行操作,但不能从那里重定向(Chrome 14+ 会阻止 onunload 中的警报):

window.onunload = function() 
    alert('Bye.');

或者使用 jQuery:

$(window).unload(function()
  alert('Bye.');
);

【讨论】:

您好,请分享您的看法,这对您有帮助吗?【参考方案3】:

好吧,这就是我所做的:

    当用户尝试离开页面时 - 在 onbeforeunload 事件监听器中调用 API(如果用户点击离开按钮,我想调用该 API)。 如果用户点击离开按钮,他将被重定向到其他页面。 如果用户单击停留按钮,我在 onbeforeunload 事件侦听器中有一个超时功能,该功能将在用户停留在当前页面本身的一定时间(2 秒)后执行。 [在这个 API 中,我撤销了在第一步中调用的 API 所做的操作]

【讨论】:

以上是关于在“onbeforeunload”函数中发出 GET/POST 请求的主要内容,如果未能解决你的问题,请参考以下文章

退出浏览器并关闭选项卡时发出警报

如何在onbeforeunload上执行ajax函数?

React:在网站退出时执行功能,而不发出警报警告

onbeforeunload事件两种写法及效果

系统可能不会保存你所做的修改 onbeforeunload

JS捕获关闭浏览器事件之chrome浏览器真支持onbeforeunload事件吗