javascript - 为什么 $(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。
解决方案
我也遇到了这个。我发现一条推文说已从 Blink 中的页面关闭事件中删除了对同步 xhr 的支持,这是 Chrome 使用的浏览器引擎。这发生在四月初。Chrome 73.0.3683.103 很可能在已删除此功能的 Blink 版本上运行。sendBeacon 和 fetch keepalive 是在 pageunload 上触发 ajax 的新推荐方法。
推荐阅读
- python - 如何使用 Python 访问不同/远程 Windows 机器?
- c++ - %lf 说明符在代码块 IDE 中为双整数提供了错误的输出,而我在 IDE 中添加了“aka C++17”标志
- android - 减少 imageView 和 TextView 之间的距离
- javascript - React 在 Spring 应用程序中不渲染任何东西(使用 frontend-maven-plugin)
- python - 编写 PDF 时添加页码
- c# - 如何禁用按钮,直到动态生成或数据网格中的所有条目都被填充
- linux-kernel - linux内核中的arch/arc/include目录是什么?
- javascript - 显示表格内容时出现问题
- arrays - 根据角度 7 中的另一个对象数组对对象数组进行排序
- shell - Shell 脚本 IP 邻居刷新