首页 > 解决方案 > 为什么 $(window).on('beforeunload', callback); 更新到 73.0.3683.103 后不再在 Chrome 中触发我的 ajax 调用?

问题描述

在我们的 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 确实执行。即消息被打印到控制台。

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。

标签: javascriptajaxgoogle-chrome

解决方案


我也遇到了这个。我发现一条推文说已从 Blink 中的页面关闭事件中删除了对同步 xhr 的支持,这是 Chrome 使用的浏览器引擎。这发生在四月初。Chrome 73.0.3683.103 很可能在已删除此功能的 Blink 版本上运行。sendBeacon 和 fetch keepalive 是在 pageunload 上触发 ajax 的新推荐方法。

有问题的推文


推荐阅读