为了账号安全,请及时绑定邮箱和手机立即绑定

为什么$(window).on('beforeunload',callback);

为什么$(window).on('beforeunload',callback);

青春有我 2021-04-14 13:14:54
在我们的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中的哪些更改导致了此问题?和/或如何解决?来自客户的一系列支持通知书引起了我们的注意,因为这对我们的应用程序的工作方式产生了负面影响。在我11年的职业生涯中,作为Web应用程序开发人员,这是我第一次告诉我们的用户切换到Internet Explorer。
查看完整描述

2 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

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



查看完整回答
反对 回复 2021-04-29
?
慕后森

TA贡献1802条经验 获得超5个赞

我的使用信标的解决方法-异步调用


不是答案,而是解决方案:我使用问题注释中提供的提示来提出以下解决方案。我在现有代码之上添加了此代码,因此现有代码是后备代码。请注意,使用信标将触发异步调用。


if (navigator && navigator.sendBeacon) {

    navigator.sendBeacon(url);

    return;

}

Ildar Faizov提到的解决方法-同步呼叫


我没有对此进行测试,但是据报道这可以工作并执行同步ajax调用。


var img = document.createElement('img');

img.src = url;

document.body.appendChild(img);


查看完整回答
反对 回复 2021-04-29
  • 2 回答
  • 0 关注
  • 466 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信