在我们的 Web 应用程序中,我们使用在 beforeunload 事件中触发的 ajax 调用来跟踪用户是否仍在处理某条信息。大致是这样的:
$(window).on('beforeunload', function() {
$.ajax({
async: false,
url: "../orderInformation/assignOrder",
data: {
orderId: orderId,
shouldAssign: false
}
});
console.info("Handled beforeunload");
});
直到今天,这在 Chrome、IE 和 Firefox 中都运行良好。从 Chrome 版本 73.0.3683.103 开始,Ajax 调用不再触发,尽管该处理程序中的其余 JS 确实执行。 IE。该消息被打印到控制台。
Chrome 的开发者工具栏不显示版本 73.0.3683.103 中正在执行的 AJAX 调用,并且我已确认我们的网络服务器也没有收到请求。然而,当我在 Chrome 73.0.3683.86 上运行相同的代码时,它会触发 Ajax 请求并且 Web 服务器会收到它!我确认此更改会影响 Mac OS 和 Windows。
Chrome 73.0.3683.103 中的哪些更改导致了此问题?和/或如何修复它?
客户的一系列支持请求引起了我们的注意,因为它对我们应用程序的工作方式产生了负面影响。在我作为 Web 应用程序开发人员 11 年的职业生涯中,这是我第一次不得不告诉我们的用户切换到 Internet Explorer。
最佳答案
我也遇到过这个问题。我发现一条推文称,Blink(Chrome 使用的浏览器引擎)中的页面关闭事件已删除对同步 xhr 的支持。这件事发生在四月初。 Chrome 73.0.3683.103 很可能在已删除此功能的 Blink 版本上运行。 sendBeacon 和 fetch keepalive 是在 pageunload 上触发 ajax 的新推荐方法。
关于javascript - 为什么 $(window).on ('beforeunload' ,回调);更新到 73.0.3683.103 后不再在 Chrome 中触发我的 ajax 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55659828/